Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinRouteBasedCrossover.cs	(revision 6907)
@@ -50,12 +50,13 @@
       PotvinEncoding child = parent2.Clone() as PotvinEncoding;
 
-      int tourParent1 = random.Next(parent1.Tours.Count);
-      Tour replacing = parent1.Tours[tourParent1].Clone() as Tour;
+      if (parent1.Tours.Count > 0 && child.Tours.Count > 0) {
+        int tourParent1 = random.Next(parent1.Tours.Count);
+        Tour replacing = parent1.Tours[tourParent1].Clone() as Tour;
 
-      int tourParent2 = random.Next(child.Tours.Count);
-      Tour replaced = child.Tours[tourParent2];
+        int tourParent2 = random.Next(child.Tours.Count);
+        Tour replaced = child.Tours[tourParent2];
 
-      child.Tours.Remove(replaced);
-      child.Tours.Insert(tourParent2, replacing);
+        child.Tours.Remove(replaced);
+        child.Tours.Insert(tourParent2, replacing);
 
         Permutation vehicleAssignment = child.VehicleAssignment;
@@ -70,17 +71,20 @@
             break;
           }
-        }        
+        }
 
-      foreach (int city in replaced.Stops)
-        if (FindRoute(child, city) == null && !child.Unrouted.Contains(city))
-          child.Unrouted.Add(city);
+        foreach (int city in replaced.Stops)
+          if (FindRoute(child, city) == null && !child.Unrouted.Contains(city))
+            child.Unrouted.Add(city);
 
-      if (Repair(random, child, replacing, ProblemInstance, allowInfeasible) || allowInfeasible)
+        if (Repair(random, child, replacing, ProblemInstance, allowInfeasible) || allowInfeasible)
+          return child;
+        else {
+          if (random.NextDouble() < 0.5)
+            return parent1.Clone() as PotvinEncoding;
+          else
+            return parent2.Clone() as PotvinEncoding;
+        }
+      } else {
         return child;
-      else {
-        if(random.NextDouble() < 0.5)
-          return parent1.Clone() as PotvinEncoding;
-        else
-          return parent2.Clone() as PotvinEncoding;
       }
     }
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Crossovers/PotvinSequenceBasedCrossover.cs	(revision 6907)
@@ -53,38 +53,42 @@
       int cities = ProblemInstance.Cities.Value;
 
-      int breakPoint1 = random.Next(1, cities + 1);
-      Tour tour1 = FindRoute(child, breakPoint1);
-      breakPoint1 = tour1.Stops.IndexOf(breakPoint1);
+      if (cities > 0) {
+        int breakPoint1 = random.Next(1, cities + 1);
+        Tour tour1 = FindRoute(child, breakPoint1);
+        breakPoint1 = tour1.Stops.IndexOf(breakPoint1);
 
-      for (int i = 0; i < breakPoint1; i++)
-        newTour.Stops.Add(tour1.Stops[i]);
+        for (int i = 0; i < breakPoint1; i++)
+          newTour.Stops.Add(tour1.Stops[i]);
 
-      int breakPoint2 = random.Next(1, cities + 1);
-      Tour tour2 = FindRoute(parent2, breakPoint2);
-      breakPoint2 = tour2.Stops.IndexOf(breakPoint2);
+        int breakPoint2 = random.Next(1, cities + 1);
+        Tour tour2 = FindRoute(parent2, breakPoint2);
+        breakPoint2 = tour2.Stops.IndexOf(breakPoint2);
 
-      for (int i = breakPoint2; i < tour2.Stops.Count; i++)
-        newTour.Stops.Add(tour2.Stops[i]);
+        for (int i = breakPoint2; i < tour2.Stops.Count; i++)
+          newTour.Stops.Add(tour2.Stops[i]);
 
-      int tour1Index = child.Tours.IndexOf(tour1);
-      child.Tours.Remove(tour1);
-      child.Tours.Insert(tour1Index, newTour);
+        int tour1Index = child.Tours.IndexOf(tour1);
+        child.Tours.Remove(tour1);
+        child.Tours.Insert(tour1Index, newTour);
 
-      foreach (int city in tour1.Stops)
-        if (FindRoute(child, city) == null && !child.Unrouted.Contains(city))
-          child.Unrouted.Add(city);
+        foreach (int city in tour1.Stops)
+          if (FindRoute(child, city) == null && !child.Unrouted.Contains(city))
+            child.Unrouted.Add(city);
 
-      foreach (int city in tour2.Stops)
-        if (FindRoute(child, city) == null && !child.Unrouted.Contains(city))
-          child.Unrouted.Add(city);
+        foreach (int city in tour2.Stops)
+          if (FindRoute(child, city) == null && !child.Unrouted.Contains(city))
+            child.Unrouted.Add(city);
 
-      if (Repair(random, child, newTour, ProblemInstance, allowInfeasible) || allowInfeasible) {
+        if (Repair(random, child, newTour, ProblemInstance, allowInfeasible) || allowInfeasible) {
+          return child;
+        } else {
+          if (random.NextDouble() < 0.5)
+            return parent1.Clone() as PotvinEncoding;
+          else
+            return parent2.Clone() as PotvinEncoding;
+        }
+      } else {
         return child;
-      } else {
-        if (random.NextDouble() < 0.5)
-          return parent1.Clone() as PotvinEncoding;
-        else
-          return parent2.Clone() as PotvinEncoding;
-      }
+      } 
     }
   }
