Index: /branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape.VRP/Manipulators/TwoOptStarManipulator.cs
===================================================================
--- /branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape.VRP/Manipulators/TwoOptStarManipulator.cs	(revision 7150)
+++ /branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape.VRP/Manipulators/TwoOptStarManipulator.cs	(revision 7151)
@@ -58,69 +58,70 @@
       bool feasible;
 
+      //consider creating new tour
+      individual.Tours.Add(new Tour());
+
       do {
         feasible = true;
 
-        if (individual.Tours.Count > 1) {
-          int route1Idx = random.Next(individual.Tours.Count);
-          int route2Idx = random.Next(individual.Tours.Count - 1);
-          if (route2Idx >= route1Idx)
-            route2Idx++;
+        int route1Idx = random.Next(individual.Tours.Count);
+        int route2Idx = random.Next(individual.Tours.Count - 1);
+        if (route2Idx >= route1Idx)
+          route2Idx++;
 
-          Tour route1 = individual.Tours[route1Idx];
-          Tour route2 = individual.Tours[route2Idx];
+        Tour route1 = individual.Tours[route1Idx];
+        Tour route2 = individual.Tours[route2Idx];
 
-          int x1 = random.Next(route1.Cities.Count + 1);
-          int x2 = random.Next(route2.Cities.Count + 1);
+        int x1 = random.Next(route1.Cities.Count + 1);
+        int x2 = random.Next(route2.Cities.Count + 1);
 
-          if (!allowInfeasible) {
-            bool originalFeasible =
-              RouteFeasible(route1, demand, capacity) &&
-              RouteFeasible(route2, demand, capacity);
+        if (!allowInfeasible) {
+          bool originalFeasible =
+            RouteFeasible(route1, demand, capacity) &&
+            RouteFeasible(route2, demand, capacity);
 
-            if (originalFeasible) {
-              double routeLoad = 0;
-              for (int i = 0; i < x1; i++)
+          if (originalFeasible) {
+            double routeLoad = 0;
+            for (int i = 0; i < x1; i++)
+              routeLoad += demand[route1.Cities[i]];
+            for (int i = x2; i < route2.Cities.Count; i++)
+              routeLoad += demand[route2.Cities[i]];
+
+            if (routeLoad > capacity.Value) {
+              feasible = false;
+            } else {
+              routeLoad = 0;
+              for (int i = 0; i < x2; i++)
+                routeLoad += demand[route2.Cities[i]];
+              for (int i = x1; i < route1.Cities.Count; i++)
                 routeLoad += demand[route1.Cities[i]];
-              for (int i = x2; i < route2.Cities.Count; i++)
-                routeLoad += demand[route2.Cities[i]];
 
               if (routeLoad > capacity.Value) {
                 feasible = false;
-              } else {
-                routeLoad = 0;
-                for (int i = 0; i < x2; i++)
-                  routeLoad += demand[route2.Cities[i]];
-                for (int i = x1; i < route1.Cities.Count; i++)
-                  routeLoad += demand[route1.Cities[i]];
-
-                if (routeLoad > capacity.Value) {
-                  feasible = false;
-                }
               }
             }
           }
+        }
 
-          if (feasible) {
-            int count = route1.Cities.Count - x1;
-            List<int> segmentX1 = new List<int>();
-            if (count > 0) {
-              segmentX1 = route1.Cities.GetRange(x1, count);
-              route1.Cities.RemoveRange(x1, count);
-            }
+        if (feasible) {
+          int count = route1.Cities.Count - x1;
+          List<int> segmentX1 = new List<int>();
+          if (count > 0) {
+            segmentX1 = route1.Cities.GetRange(x1, count);
+            route1.Cities.RemoveRange(x1, count);
+          }
 
-            count = route2.Cities.Count - x2;
-            List<int> segmentX2 = new List<int>();
-            if (count > 0) {
-              segmentX2 = route2.Cities.GetRange(x2, count);
-              route2.Cities.RemoveRange(x2, count);
-            }
+          count = route2.Cities.Count - x2;
+          List<int> segmentX2 = new List<int>();
+          if (count > 0) {
+            segmentX2 = route2.Cities.GetRange(x2, count);
+            route2.Cities.RemoveRange(x2, count);
+          }
 
-            route1.Cities.AddRange(segmentX2);
-            route2.Cities.AddRange(segmentX1);
-
-            individual.Tours.RemoveAll(t => t.Cities.Count == 0);
-          }
+          route1.Cities.AddRange(segmentX2);
+          route2.Cities.AddRange(segmentX1);
         }
       } while (!feasible);
+
+      individual.Tours.RemoveAll(t => t.Cities.Count == 0);
     }
 
