Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 6771)
@@ -78,5 +78,5 @@
     }
 
-    public int FindBestInsertionPlace(Tour tour, int city) {
+    public int FindBestInsertionPlace(Tour tour, int city, int positionToAvoid = -1) {
       int place = -1;
       double minQuality = -1;
@@ -85,9 +85,11 @@
 
       for (int i = 0; i <= tour.Stops.Count; i++) {
-        bool feasible;
-        double quality = ProblemInstance.GetInsertionCosts(eval, city, 0, i, out feasible);
-        if (place < 0 || quality < minQuality) {
-          place = i;
-          minQuality = quality;
+        if (positionToAvoid != i) {
+          bool feasible;
+          double quality = ProblemInstance.GetInsertionCosts(eval, city, 0, i, out feasible);
+          if (place < 0 || quality < minQuality) {
+            place = i;
+            minQuality = quality;
+          }
         }
       }
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/Crossovers/PrinsPermutationCrossover.cs	(revision 6771)
@@ -52,4 +52,7 @@
 
     protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) {
+      if (parent1.Length != parent2.Length)
+        return parent1.Clone() as PrinsEncoding;
+
       //note - the inner crossover is called here and the result is converted to a prins representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover1.cs	(revision 6771)
@@ -61,4 +61,7 @@
       ZhuEncoding child = parent2.Clone() as ZhuEncoding;
 
+      if (parent1.Length != parent2.Length)
+        return child;
+
       int breakPoint = random.Next(child.Length);
       int i = breakPoint;
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuHeuristicCrossover2.cs	(revision 6771)
@@ -53,4 +53,7 @@
       ZhuEncoding child = parent2.Clone() as ZhuEncoding;
 
+      if (parent1.Length != parent2.Length)
+        return child;
+
       int breakPoint = random.Next(child.Length);
       int i = breakPoint;
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover1.cs	(revision 6771)
@@ -62,4 +62,7 @@
       ZhuEncoding child = parent2.Clone() as ZhuEncoding;
 
+      if (parent1.Length != parent2.Length)
+        return child;
+
       int breakPoint = random.Next(child.Length);
       int i = breakPoint;
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuMergeCrossover2.cs	(revision 6771)
@@ -54,4 +54,7 @@
       ZhuEncoding child = parent2.Clone() as ZhuEncoding;
 
+      if (parent1.Length != parent2.Length)
+        return child;
+
       int breakPoint = random.Next(child.Length);
       int i = breakPoint;
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 6759)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/Crossovers/ZhuPermutationCrossover.cs	(revision 6771)
@@ -54,4 +54,6 @@
       //note - the inner crossover is called here and the result is converted to a prins representation
       //some refactoring should be done here in the future - the crossover operation should be called directly
+      if (parent1.Length != parent2.Length)
+        return parent1.Clone() as ZhuEncoding;
 
       InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName;
