Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs	(revision 11289)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauFormatInstanceProvider.cs	(revision 11303)
@@ -23,6 +23,6 @@
 
 namespace HeuristicLab.Problems.Instances.VehicleRouting {
-  public abstract class CordeauFormatInstanceProvider : VRPInstanceProvider<MDCVRPTWData> {
-    protected override MDCVRPTWData LoadData(Stream stream) {
+  public abstract class CordeauFormatInstanceProvider<T> : VRPInstanceProvider<T> where T : MDCVRPData {
+    protected override T LoadData(Stream stream) {
       return LoadInstance(new CordeauParser(stream));
     }
@@ -31,38 +31,9 @@
       get { return true; }
     }
-    public override MDCVRPTWData ImportData(string path) {
+    public override T ImportData(string path) {
       return LoadInstance(new CordeauParser(path));
     }
 
-    private MDCVRPTWData LoadInstance(CordeauParser parser) {
-      parser.Parse();
-
-      var instance = new MDCVRPTWData();
-      instance.Dimension = parser.Cities + 1;
-      instance.Depots = parser.Depots;
-      instance.Coordinates = parser.Coordinates;
-      instance.Capacity = parser.Capacity;
-      instance.Demands = parser.Demands;
-      instance.DistanceMeasure = DistanceMeasure.Euclidean;
-      instance.ReadyTimes = parser.Readytimes;
-      instance.ServiceTimes = parser.Servicetimes;
-      instance.DueTimes = parser.Duetimes;
-      instance.MaximumVehicles = parser.Vehicles;
-
-      int depots = parser.Depots;
-      int vehicles = parser.Vehicles / parser.Depots;
-      instance.VehicleDepotAssignment = new int[depots * vehicles];
-      int index = 0;
-
-      for (int i = 0; i < depots; i++)
-        for (int j = 0; j < vehicles; j++) {
-          instance.VehicleDepotAssignment[index] = i;
-          index++;
-        }
-
-      instance.Name = parser.ProblemName;
-
-      return instance;
-    }
+    internal abstract T LoadInstance(CordeauParser parser);
   }
 }
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauInstanceProvider.cs	(revision 11289)
+++ 	(revision )
@@ -1,52 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using ICSharpCode.SharpZipLib.Zip;
-
-namespace HeuristicLab.Problems.Instances.VehicleRouting {
-  public class CordeauInstanceProvider : CordeauFormatInstanceProvider {
-    public override string Name {
-      get { return "Cordeau (MDCVRPTW)"; }
-    }
-
-    public override string Description {
-      get { return "Cordeau test set"; }
-    }
-    
-    public override Uri WebLink {
-      get { return new Uri(@"http://neo.lcc.uma.es/radi-aeb/WebVRP/"); }
-    }
-
-    public override string ReferencePublication {
-      get { return null; }
-    }
-
-    protected override string FileName {
-      get { return "Cordeau"; }
-    }
-  }
-}
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDInstanceProvider.cs	(revision 11303)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDInstanceProvider.cs	(revision 11303)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Problems.Instances.VehicleRouting {
+  public class CordeauMDInstanceProvider : CordeauFormatInstanceProvider<MDCVRPData> {
+    public override string Name {
+      get { return "Cordeau (MDCVRP)"; }
+    }
+
+    public override string Description {
+      get { return "Cordeau test set"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri(@"http://neo.lcc.uma.es/vrp/vrp-instances/multiple-depot-vrp-instances/"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return @"J.-F. Cordeau, M. Gendreau, G. Laporte. 1997.
+A tabu search heuristic for periodic and multi-depot vehicle routing problems.
+Networks, 30, pp. 105–119.";
+      }
+    }
+
+    protected override string FileName {
+      get { return "CordeauMD"; }
+    }
+
+    internal override MDCVRPData LoadInstance(CordeauParser parser) {
+      parser.Parse();
+
+      var instance = new MDCVRPData();
+      instance.Dimension = parser.Cities + 1;
+      instance.Depots = parser.Depots;
+      instance.Coordinates = parser.Coordinates;
+      instance.Capacity = parser.Capacity;
+      instance.Demands = parser.Demands;
+      instance.DistanceMeasure = DistanceMeasure.Euclidean;
+      instance.MaximumVehicles = parser.Vehicles;
+
+      int depots = parser.Depots;
+      int vehicles = parser.Vehicles / parser.Depots;
+      instance.VehicleDepotAssignment = new int[depots * vehicles];
+      int index = 0;
+
+      for (int i = 0; i < depots; i++)
+        for (int j = 0; j < vehicles; j++) {
+          instance.VehicleDepotAssignment[index] = i;
+          index++;
+        }
+
+      instance.Name = parser.ProblemName;
+
+      return instance;
+    }
+  }
+}
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDTWInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDTWInstanceProvider.cs	(revision 11303)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/CordeauFormat/CordeauMDTWInstanceProvider.cs	(revision 11303)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Problems.Instances.VehicleRouting {
+  public class CordeauMDTWInstanceProvider : CordeauFormatInstanceProvider<MDCVRPTWData> {
+    public override string Name {
+      get { return "Cordeau (MDCVRPTW)"; }
+    }
+
+    public override string Description {
+      get { return "Cordeau test set"; }
+    }
+
+    public override Uri WebLink {
+      get { return new Uri(@"http://neo.lcc.uma.es/vrp/vrp-instances/multiple-depot-vrp-with-time-windows-instances/"); }
+    }
+
+    public override string ReferencePublication {
+      get {
+        return @"J.-F. Cordeau, M. Gendreau, G. Laporte. 1997.
+A tabu search heuristic for periodic and multi-depot vehicle routing problems.
+Networks, 30, pp. 105–119.";
+      }
+    }
+
+    protected override string FileName {
+      get { return "CordeauMDTW"; }
+    }
+
+    internal override MDCVRPTWData LoadInstance(CordeauParser parser) {
+      parser.Parse();
+
+      var instance = new MDCVRPTWData();
+      instance.Dimension = parser.Cities + 1;
+      instance.Depots = parser.Depots;
+      instance.Coordinates = parser.Coordinates;
+      instance.Capacity = parser.Capacity;
+      instance.Demands = parser.Demands;
+      instance.DistanceMeasure = DistanceMeasure.Euclidean;
+      instance.ReadyTimes = parser.Readytimes;
+      instance.ServiceTimes = parser.Servicetimes;
+      instance.DueTimes = parser.Duetimes;
+      instance.MaximumVehicles = parser.Vehicles;
+
+      int depots = parser.Depots;
+      int vehicles = parser.Vehicles / parser.Depots;
+      instance.VehicleDepotAssignment = new int[depots * vehicles];
+      int index = 0;
+
+      for (int i = 0; i < depots; i++)
+        for (int j = 0; j < vehicles; j++) {
+          instance.VehicleDepotAssignment[index] = i;
+          index++;
+        }
+
+      instance.Name = parser.ProblemName;
+
+      return instance;
+    }
+  }
+}
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj	(revision 11289)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj	(revision 11303)
@@ -103,7 +103,7 @@
   <ItemGroup>
     <Reference Include="ICSharpCode.SharpZipLib">
-		<HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
-		<Private>False</Private>
-	</Reference>
+      <HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -111,4 +111,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CordeauFormat\CordeauMDTWInstanceProvider.cs" />
     <Compile Include="GoldenFormat\ChristofidesInstanceProvider.cs" />
     <Compile Include="GoldenFormat\KytojokiInstanceProvider.cs" />
@@ -122,5 +123,5 @@
     <Compile Include="TSPLibFormat\AugeratInstanceProvider.cs" />
     <Compile Include="TSPLibFormat\ChristofidesEilonInstanceProvider.cs" />
-    <Compile Include="CordeauFormat\CordeauInstanceProvider.cs" />
+    <Compile Include="CordeauFormat\CordeauMDInstanceProvider.cs" />
     <Compile Include="CordeauFormat\CordeauFormatInstanceProvider.cs" />
     <Compile Include="LiLimFormat\LiLimInstanceProvider.cs" />
@@ -142,5 +143,4 @@
     <EmbeddedResource Include="Data\Homberger.zip" />
     <EmbeddedResource Include="Data\LiLim.zip" />
-    <EmbeddedResource Include="Data\Cordeau.zip" />
     <EmbeddedResource Include="Data\Golden.zip" />
     <EmbeddedResource Include="Data\Christofides.zip" />
@@ -148,4 +148,6 @@
     <EmbeddedResource Include="Data\Taillard.opt.zip" />
     <EmbeddedResource Include="Data\Taillard.zip" />
+    <EmbeddedResource Include="Data\CordeauMD.zip" />
+    <EmbeddedResource Include="Data\CordeauMDTW.zip" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="Plugin.cs" />
@@ -180,5 +182,5 @@
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-   <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -186,5 +188,5 @@
 
 call PreBuildEvent.cmd</PreBuildEvent>
-<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
 export ProjectDir=$(ProjectDir)
 export SolutionDir=$(SolutionDir)
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimInstanceProvider.cs	(revision 11289)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/LiLimFormat/LiLimInstanceProvider.cs	(revision 11303)
@@ -37,7 +37,7 @@
       get { return "LiLim test set"; }
     }
-    
+
     public override Uri WebLink {
-      get { return new Uri(@"http://www.sintef.no/Projectweb/TOP/Problems/PDPTW/Li--Lim-benchmark/"); }
+      get { return new Uri(@"http://www.sintef.no/Projectweb/TOP/PDPTW/Li--Lim-benchmark/"); }
     }
 
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/HombergerInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/HombergerInstanceProvider.cs	(revision 11289)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/SolomonFormat/HombergerInstanceProvider.cs	(revision 11303)
@@ -37,7 +37,7 @@
       get { return "Homberger test set"; }
     }
-    
+
     public override Uri WebLink {
-      get { return new Uri(@"http://www.fernuni-hagen.de/WINF/touren/inhalte/probinst.htm"); }
+      get { return new Uri(@"http://www.sintef.no/Projectweb/TOP/VRPTW/Homberger-benchmark/"); }
     }
 
Index: branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs
===================================================================
--- branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs	(revision 11289)
+++ branches/HeuristicLab.Problems.Orienteering/HeuristicLab.Problems.Instances.VehicleRouting/3.4/VRPInstanceProvider.cs	(revision 11303)
@@ -93,4 +93,11 @@
             routes.Add(route);
           }
+
+          if (line.StartsWith("Solution")) {
+            if (routes.Any()) {
+              // Skip remaining solutions since only one "best solution" is stored
+              break;
+            }
+          }
         }
       }
