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 17706)
@@ -0,0 +1,89 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Linq;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.GVR {
+  [Item("GVR Encoding", "Represents the genetic vehicle representation encoding for GVR encoded solutions.")]
+  [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
+  public class GVREncoding : Encoding, IVRPEncoding {
+
+    [StorableConstructor]
+    private GVREncoding(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      DiscoverOperators();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new GVREncoding(this, cloner); }
+    private GVREncoding(GVREncoding original, Cloner cloner) : base(original, cloner) { }
+
+
+    public GVREncoding() : this("VRPTours") { }
+    public GVREncoding(string name) : base(name) {
+      DiscoverOperators();
+    }
+
+    #region Operator Discovery
+    private static readonly IEnumerable<Type> encodingSpecificOperatorTypes;
+    static GVREncoding() {
+      encodingSpecificOperatorTypes = new List<Type>() {
+          typeof (IGVROperator),
+          typeof (IVRPCreator),
+          typeof (IMultiVRPOperator)
+      };
+    }
+    private void DiscoverOperators() {
+      var assembly = typeof(IGVROperator).Assembly;
+      var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
+      var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t));
+      var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList();
+
+      foreach (var op in newOperators.OfType<IMultiVRPOperator>().ToList()) {
+        op.SetOperators(Operators.Concat(newOperators));
+        if (!op.Operators.Any()) newOperators.Remove(op);
+      }
+      foreach (var op in Operators.OfType<IMultiVRPOperator>()) {
+        op.SetOperators(newOperators);
+      }
+      ConfigureOperators(newOperators);
+      foreach (var @operator in newOperators)
+        AddOperator(@operator);
+    }
+    #endregion
+
+    public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
+    }
+
+    #region specific operator wiring
+
+    #endregion
+  }
+}
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 17706)
@@ -0,0 +1,87 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Linq;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Alba {
+  [Item("MultiVRPEncoding", "Represents the combination of all encodings from the VRP.")]
+  [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
+  public class MultiVRPEncoding : Encoding, IVRPEncoding {
+
+    [StorableConstructor]
+    private MultiVRPEncoding(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      DiscoverOperators();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new MultiVRPEncoding(this, cloner); }
+    private MultiVRPEncoding(MultiVRPEncoding original, Cloner cloner) : base(original, cloner) { }
+
+
+    public MultiVRPEncoding() : this("VRPTours") { }
+    public MultiVRPEncoding(string name) : base(name) {
+      DiscoverOperators();
+    }
+
+    #region Operator Discovery
+    private static readonly IEnumerable<Type> encodingSpecificOperatorTypes;
+    static MultiVRPEncoding() {
+      encodingSpecificOperatorTypes = new List<Type>() {
+          typeof (IVRPOperator)
+      };
+    }
+    private void DiscoverOperators() {
+      var assembly = typeof(IAlbaOperator).Assembly;
+      var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
+      var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t));
+      var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList();
+
+      foreach (var op in newOperators.OfType<IMultiVRPOperator>().ToList()) {
+        op.SetOperators(Operators.Concat(newOperators));
+        if (!op.Operators.Any()) newOperators.Remove(op);
+      }
+      foreach (var op in Operators.OfType<IMultiVRPOperator>()) {
+        op.SetOperators(newOperators);
+      }
+      ConfigureOperators(newOperators);
+      foreach (var @operator in newOperators)
+        AddOperator(@operator);
+    }
+    #endregion
+
+    public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
+    }
+
+    #region specific operator wiring
+
+    #endregion
+  }
+}
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 17706)
@@ -0,0 +1,89 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Linq;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Potvin {
+  [Item("Potvin Encoding", "Represents the Potvin encoding for Potvin encoded solutions.")]
+  [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
+  public class PotvinEncoding : Encoding, IVRPEncoding {
+
+    [StorableConstructor]
+    private PotvinEncoding(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      DiscoverOperators();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new PotvinEncoding(this, cloner); }
+    private PotvinEncoding(PotvinEncoding original, Cloner cloner) : base(original, cloner) { }
+
+
+    public PotvinEncoding() : this("VRPTours") { }
+    public PotvinEncoding(string name) : base(name) {
+      DiscoverOperators();
+    }
+
+    #region Operator Discovery
+    private static readonly IEnumerable<Type> encodingSpecificOperatorTypes;
+    static PotvinEncoding() {
+      encodingSpecificOperatorTypes = new List<Type>() {
+          typeof (IPotvinOperator),
+          typeof (IVRPCreator),
+          typeof (IMultiVRPOperator)
+      };
+    }
+    private void DiscoverOperators() {
+      var assembly = typeof(IPotvinOperator).Assembly;
+      var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
+      var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t));
+      var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList();
+
+      foreach (var op in newOperators.OfType<IMultiVRPOperator>().ToList()) {
+        op.SetOperators(Operators.Concat(newOperators));
+        if (!op.Operators.Any()) newOperators.Remove(op);
+      }
+      foreach (var op in Operators.OfType<IMultiVRPOperator>()) {
+        op.SetOperators(newOperators);
+      }
+      ConfigureOperators(newOperators);
+      foreach (var @operator in newOperators)
+        AddOperator(@operator);
+    }
+    #endregion
+
+    public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
+    }
+
+    #region specific operator wiring
+
+    #endregion
+  }
+}
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 17706)
@@ -0,0 +1,89 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Linq;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Prins {
+  [Item("Prins Encoding", "Represents the Prins encoding for Prins encoded solutions.")]
+  [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
+  public class PrinsEncoding : Encoding, IVRPEncoding {
+
+    [StorableConstructor]
+    private PrinsEncoding(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      DiscoverOperators();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new PrinsEncoding(this, cloner); }
+    private PrinsEncoding(PrinsEncoding original, Cloner cloner) : base(original, cloner) { }
+
+
+    public PrinsEncoding() : this("VRPTours") { }
+    public PrinsEncoding(string name) : base(name) {
+      DiscoverOperators();
+    }
+
+    #region Operator Discovery
+    private static readonly IEnumerable<Type> encodingSpecificOperatorTypes;
+    static PrinsEncoding() {
+      encodingSpecificOperatorTypes = new List<Type>() {
+          typeof (IPrinsOperator),
+          typeof (IVRPCreator),
+          typeof (IMultiVRPOperator)
+      };
+    }
+    private void DiscoverOperators() {
+      var assembly = typeof(IPrinsOperator).Assembly;
+      var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
+      var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t));
+      var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList();
+
+      foreach (var op in newOperators.OfType<IMultiVRPOperator>().ToList()) {
+        op.SetOperators(Operators.Concat(newOperators));
+        if (!op.Operators.Any()) newOperators.Remove(op);
+      }
+      foreach (var op in Operators.OfType<IMultiVRPOperator>()) {
+        op.SetOperators(newOperators);
+      }
+      ConfigureOperators(newOperators);
+      foreach (var @operator in newOperators)
+        AddOperator(@operator);
+    }
+    #endregion
+
+    public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
+    }
+
+    #region specific operator wiring
+
+    #endregion
+  }
+}
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 17706)
@@ -0,0 +1,89 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Linq;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings.Zhu {
+  [Item("Zhu Encoding", "Represents the Zhu encoding for Zhu encoded solutions.")]
+  [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
+  public class ZhuEncoding : Encoding, IVRPEncoding {
+
+    [StorableConstructor]
+    private ZhuEncoding(StorableConstructorFlag _) : base(_) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      DiscoverOperators();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) { return new ZhuEncoding(this, cloner); }
+    private ZhuEncoding(ZhuEncoding original, Cloner cloner) : base(original, cloner) { }
+
+
+    public ZhuEncoding() : this("VRPTours") { }
+    public ZhuEncoding(string name) : base(name) {
+      DiscoverOperators();
+    }
+
+    #region Operator Discovery
+    private static readonly IEnumerable<Type> encodingSpecificOperatorTypes;
+    static ZhuEncoding() {
+      encodingSpecificOperatorTypes = new List<Type>() {
+          typeof (IZhuOperator),
+          typeof (IVRPCreator),
+          typeof (IMultiVRPOperator)
+      };
+    }
+    private void DiscoverOperators() {
+      var assembly = typeof(IZhuOperator).Assembly;
+      var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
+      var operators = discoveredTypes.Select(t => (IOperator)Activator.CreateInstance(t));
+      var newOperators = operators.Except(Operators, new TypeEqualityComparer<IOperator>()).ToList();
+
+      foreach (var op in newOperators.OfType<IMultiVRPOperator>().ToList()) {
+        op.SetOperators(Operators.Concat(newOperators));
+        if (!op.Operators.Any()) newOperators.Remove(op);
+      }
+      foreach (var op in Operators.OfType<IMultiVRPOperator>()) {
+        op.SetOperators(newOperators);
+      }
+      ConfigureOperators(newOperators);
+      foreach (var @operator in newOperators)
+        AddOperator(@operator);
+    }
+    #endregion
+
+    public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
+    }
+
+    #region specific operator wiring
+
+    #endregion
+  }
+}
