Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs	(revision 5367)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Alba/Moves/LambdaInterchange/AlbaStochasticLambdaInterchangeSingleMoveGenerator.cs	(revision 5368)
@@ -63,22 +63,26 @@
       List<Tour> tours = individual.GetTours();
 
-      int route1Index = rand.Next(tours.Count);
-      Tour route1 = tours[route1Index];
+      if (tours.Count > 1) {
+        int route1Index = rand.Next(tours.Count);
+        Tour route1 = tours[route1Index];
 
-      int route2Index = rand.Next(tours.Count - 1);
-      if (route2Index >= route1Index)
-        route2Index += 1;
-      Tour route2 = tours[route2Index];
+        int route2Index = rand.Next(tours.Count - 1);
+        if (route2Index >= route1Index)
+          route2Index += 1;
+        Tour route2 = tours[route2Index];
 
-      int length1 = rand.Next(Math.Min(lambda + 1, route1.Cities.Count + 1));
-      int index1 = rand.Next(route1.Cities.Count - length1 + 1);
+        int length1 = rand.Next(Math.Min(lambda + 1, route1.Cities.Count + 1));
+        int index1 = rand.Next(route1.Cities.Count - length1 + 1);
 
-      int l2Min = 0;
-      if (length1 == 0)
-        l2Min = 1;
-      int length2 = rand.Next(l2Min, Math.Min(lambda + 1, route2.Cities.Count + 1));
-      int index2 = rand.Next(route2.Cities.Count - length2 + 1);
+        int l2Min = 0;
+        if (length1 == 0)
+          l2Min = 1;
+        int length2 = rand.Next(l2Min, Math.Min(lambda + 1, route2.Cities.Count + 1));
+        int index2 = rand.Next(route2.Cities.Count - length2 + 1);
 
-      return new AlbaLambdaInterchangeMove(route1Index, index1, length1, route2Index, index2, length2, individual);
+        return new AlbaLambdaInterchangeMove(route1Index, index1, length1, route2Index, index2, length2, individual);
+      } else {
+        return new AlbaLambdaInterchangeMove(0, 0, 0, 0, 0, 0, individual);
+      }
     }
 
Index: /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 5367)
+++ /trunk/sources/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs	(revision 5368)
@@ -38,8 +38,11 @@
     protected override void Manipulate(IRandom random, PotvinEncoding individual) {
       int selectedIndex = SelectRandomTourBiasedByLength(random, individual);
-      Tour route1 =
-        individual.Tours[selectedIndex];
+      Tour route1 = individual.Tours[selectedIndex]; 
 
-      for (int customer1Position = 0; customer1Position < route1.Cities.Count; customer1Position++) {
+      bool performed = false;
+      int customer1Position = 0;
+      while (customer1Position < route1.Cities.Count) {
+        performed = false;
+
         foreach (Tour tour in individual.Tours) {
           if (tour != route1) {
@@ -51,15 +54,16 @@
               tour.Cities[customer2Position] = customer1;
               if (Feasible(tour)) {
-                int route, place;
+                int routeIdx, place;
                 if (FindInsertionPlace(individual,
-                  customer2, selectedIndex, out route, out place)) {
-                  individual.Tours[route].Cities.Insert(place, customer2);
-                  route1.Cities.RemoveAt(customer1Position);
+                  customer2, selectedIndex, out routeIdx, out place)) {
+                    individual.Tours[routeIdx].Cities.Insert(place, customer2);
+                    route1.Cities.RemoveAt(customer1Position);
 
-                  if (route1.Cities.Count == 0)
+                    if (route1.Cities.Count == 0)
                     individual.Tours.Remove(route1);
 
                   //two-level exchange has been performed
-                  return;
+                  performed = true;
+                  break;
                 } else {
                   tour.Cities[customer2Position] = customer2;
@@ -70,5 +74,11 @@
             }
           }
+
+          if (performed)
+            break;
         }
+
+        if (!performed)
+          customer1Position++;
       }
     }
