Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMultiMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMultiMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeMultiMoveGenerator.cs	(revision 6909)
@@ -64,5 +64,7 @@
 
       for (int i = 0; i < SampleSizeParameter.ActualValue.Value; i++) {
-        result.Add(PotvinPDExchangeSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue));
+        var move = PotvinPDExchangeSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue);
+        if (move != null)
+          result.Add(move);
       }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeSingleMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeSingleMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDExchange/PotvinPDExchangeSingleMoveGenerator.cs	(revision 6909)
@@ -66,36 +66,40 @@
       }
 
-      PotvinPDExchangeMove move = null;
-      while (cities.Count > 0 && move == null) {
-        int city = cities[rand.Next(cities.Count)];
-        Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
-        int oldTourIndex = individual.Tours.IndexOf(oldTour);
+      if (cities.Count > 1 && individual.Tours.Count > 1) {
+        PotvinPDExchangeMove move = null;
+        while (cities.Count > 1 && move == null) {
+          int city = cities[rand.Next(cities.Count)];
+          Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
+          int oldTourIndex = individual.Tours.IndexOf(oldTour);
 
-        int max = individual.Tours.Count;
-        if (individual.Tours.Count < problemInstance.Vehicles.Value)
-          max = max - 1;
+          int max = individual.Tours.Count;
+          if (individual.Tours.Count < problemInstance.Vehicles.Value)
+            max = max - 1;
 
-        int newTourIndex = rand.Next(max);
-        if (newTourIndex >= oldTourIndex)
-          newTourIndex++;
+          int newTourIndex = rand.Next(max);
+          if (newTourIndex >= oldTourIndex)
+            newTourIndex++;
 
-        Tour newTour = individual.Tours[newTourIndex];
-        List<int> tourCities = new List<int>();
-        foreach (int stop in newTour.Stops) {
-          if (pdp == null ||
-            (pdp.GetDemand(stop) >= 0 &&
-            pdp.GetPickupDeliveryLocation(stop) != pdp.GetPickupDeliveryLocation(city) &&
-            pdp.GetPickupDeliveryLocation(stop) != city &&
-            pdp.GetPickupDeliveryLocation(city) != stop))
-            tourCities.Add(stop);
+          Tour newTour = individual.Tours[newTourIndex];
+          List<int> tourCities = new List<int>();
+          foreach (int stop in newTour.Stops) {
+            if (pdp == null ||
+              (pdp.GetDemand(stop) >= 0 &&
+              pdp.GetPickupDeliveryLocation(stop) != pdp.GetPickupDeliveryLocation(city) &&
+              pdp.GetPickupDeliveryLocation(stop) != city &&
+              pdp.GetPickupDeliveryLocation(city) != stop))
+              tourCities.Add(stop);
+          }
+
+          if (tourCities.Count > 0) {
+            int replaced = tourCities[rand.Next(tourCities.Count)];
+            move = new PotvinPDExchangeMove(city, oldTourIndex, newTourIndex, replaced, individual);
+          }
         }
 
-        if (tourCities.Count > 0) {
-          int replaced = tourCities[rand.Next(tourCities.Count)];
-          move = new PotvinPDExchangeMove(city, oldTourIndex, newTourIndex, replaced, individual);
-        }
-      }
-
-      return move;
+        return move;
+      } else {
+        return null;
+      }             
     }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMultiMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMultiMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeMultiMoveGenerator.cs	(revision 6909)
@@ -64,5 +64,7 @@
 
       for (int i = 0; i < SampleSizeParameter.ActualValue.Value; i++) {
-        result.Add(PotvinPDRearrangeSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue));
+        var move = PotvinPDRearrangeSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue);
+        if (move != null)
+          result.Add(move);
       }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeSingleMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeSingleMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDRearrange/PotvinPDRearrangeSingleMoveGenerator.cs	(revision 6909)
@@ -62,11 +62,15 @@
       IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
       for (int i = 1; i <= individual.Cities; i++) {
-        if(pdp == null || pdp.GetDemand(i) >= 0)
+        if (pdp == null || pdp.GetDemand(i) >= 0)
           cities.Add(i);
       }
 
-      int city = cities[rand.Next(cities.Count)];
-      int tour = individual.Tours.FindIndex(t => t.Stops.Contains(city));
-      return new PotvinPDRearrangeMove(city, tour, individual);
+      if (cities.Count > 0) {
+        int city = cities[rand.Next(cities.Count)];
+        int tour = individual.Tours.FindIndex(t => t.Stops.Contains(city));
+        return new PotvinPDRearrangeMove(city, tour, individual);
+      } else {
+        return null;
+      }
     }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMultiMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMultiMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftMultiMoveGenerator.cs	(revision 6909)
@@ -64,5 +64,7 @@
 
       for (int i = 0; i < SampleSizeParameter.ActualValue.Value; i++) {
-        result.Add(PotvinPDShiftSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue));
+        var move = PotvinPDShiftSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue);
+        if (move != null)
+          result.Add(move);
       }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs	(revision 6909)
@@ -62,21 +62,25 @@
       IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
       for (int i = 1; i <= individual.Cities; i++) {
-        if(pdp == null || pdp.GetDemand(i) >= 0)
+        if (pdp == null || pdp.GetDemand(i) >= 0)
           cities.Add(i);
       }
 
-      int city = cities[rand.Next(cities.Count)];
-      Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
-      int oldTourIndex = individual.Tours.IndexOf(oldTour);
+      if (cities.Count > 1 && individual.Tours.Count > 1) {
+        int city = cities[rand.Next(cities.Count)];
+        Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
+        int oldTourIndex = individual.Tours.IndexOf(oldTour);
 
-      int max = individual.Tours.Count;
-      if (individual.Tours.Count < problemInstance.Vehicles.Value)
-        max = max - 1;
+        int max = individual.Tours.Count;
+        if (individual.Tours.Count < problemInstance.Vehicles.Value)
+          max = max - 1;
 
-      int newTourIndex = rand.Next(max);
-      if (newTourIndex >= oldTourIndex)
-        newTourIndex++;
+        int newTourIndex = rand.Next(max);
+        if (newTourIndex >= oldTourIndex)
+          newTourIndex++;
 
-      return new PotvinPDShiftMove(city, oldTourIndex, newTourIndex, individual);
+        return new PotvinPDShiftMove(city, oldTourIndex, newTourIndex, individual);
+      } else {
+        return null;
+      }             
     }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMultiMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMultiMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentMultiMoveGenerator.cs	(revision 6909)
@@ -64,5 +64,7 @@
 
       for (int i = 0; i < SampleSizeParameter.ActualValue.Value; i++) {
-        result.Add(PotvinVehicleAssignmentSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue));
+        var move = PotvinVehicleAssignmentSingleMoveGenerator.Apply(individual, ProblemInstance, RandomParameter.ActualValue);
+        if(move != null)
+          result.Add(move);
       }
 
Index: branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentSingleMoveGenerator.cs
===================================================================
--- branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentSingleMoveGenerator.cs	(revision 6857)
+++ branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/VehicleAssignment/PotvinVehicleAssignmentSingleMoveGenerator.cs	(revision 6909)
@@ -65,11 +65,15 @@
 
     public static PotvinVehicleAssignmentMove Apply(PotvinEncoding individual, IVRPProblemInstance problemInstance, IRandom rand) {
-      int tour1 = rand.Next(individual.Tours.Count);
-      int tour2 = rand.Next(problemInstance.Vehicles.Value);
+      if (individual.Tours.Count > 1) {
+        int tour1 = rand.Next(individual.Tours.Count);
+        int tour2 = rand.Next(problemInstance.Vehicles.Value);
 
-      while (tour2 == tour1)
-        tour2 = rand.Next(problemInstance.Vehicles.Value);
+        while (tour2 == tour1)
+          tour2 = rand.Next(problemInstance.Vehicles.Value);
 
-      return new PotvinVehicleAssignmentMove(tour1, tour2, individual);
+        return new PotvinVehicleAssignmentMove(tour1, tour2, individual);
+      } else {
+        return null;
+      }
     }
 
