Index: branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Parsers/DynPDPParser.cs
===================================================================
--- branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Parsers/DynPDPParser.cs	(revision 8824)
+++ branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Parsers/DynPDPParser.cs	(revision 8839)
@@ -50,8 +50,15 @@
     }
 
+    public struct DistanceMatrixInformation {
+      public bool useDistanceMatrix;
+      public int[,] coordinates;
+      public double[,] matrix;
+    }
+
     protected string file;
     protected string problemName;
     protected List<Vehicle> vehicles;
     protected List<Order> orders;
+    protected DistanceMatrixInformation distanceMatrix;
 
     public string ProblemName {
@@ -73,8 +80,18 @@
     }
 
+    public DistanceMatrixInformation DistanceMatrix {
+      get {
+        return distanceMatrix;
+      } 
+    }
+
     public DynPDPParser(string file) {
       this.file = file;
       vehicles = new List<Vehicle>();
       orders = new List<Order>();
+      distanceMatrix = new DistanceMatrixInformation();
+      distanceMatrix.useDistanceMatrix = false;
+      distanceMatrix.coordinates = null;
+      distanceMatrix.matrix = null;
     }
 
Index: branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Parsers/TSPLibDynPDPParser.cs
===================================================================
--- branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Parsers/TSPLibDynPDPParser.cs	(revision 8824)
+++ branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Parsers/TSPLibDynPDPParser.cs	(revision 8839)
@@ -23,4 +23,5 @@
 using System.IO;
 using System.Text.RegularExpressions;
+using System;
 
 namespace HeuristicLab.PDPSimulation {
@@ -52,6 +53,6 @@
         int dueTime = int.Parse(dueTimeLine);
 
-        List<double> xCoord = new List<double>();
-        List<double> yCoord = new List<double>();
+        List<int> xCoord = new List<int>();
+        List<int> yCoord = new List<int>();
 
         line = reader.ReadLine();
@@ -59,6 +60,6 @@
         m = reg.Matches(line);
         while (m.Count == 3) {
-          xCoord.Add(double.Parse(m[1].Value, System.Globalization.CultureInfo.InvariantCulture));
-          yCoord.Add(double.Parse(m[2].Value, System.Globalization.CultureInfo.InvariantCulture));
+          xCoord.Add(int.Parse(m[1].Value, System.Globalization.CultureInfo.InvariantCulture));
+          yCoord.Add(int.Parse(m[2].Value, System.Globalization.CultureInfo.InvariantCulture));
 
           line = reader.ReadLine();
@@ -76,4 +77,36 @@
 
           vehicles.Add(v);
+        }
+
+        if (line.Contains("EDGE_WEIGHT_TYPE: EXPLICIT")) {
+          line = reader.ReadLine();
+
+          int count = xCoord.Count;
+
+          distanceMatrix.useDistanceMatrix = true;
+          distanceMatrix.coordinates = new int[count, 2];
+          for (int i = 0; i < count; i++) {
+            distanceMatrix.coordinates[i, 0] = xCoord[i];
+            distanceMatrix.coordinates[i, 1] = yCoord[i];
+          }
+
+          distanceMatrix.matrix = new double[count, count];
+
+          line = reader.ReadLine();
+          m = reg.Matches(line);
+
+          int j = 0;
+          while (m.Count == count) {
+            for (int i = 0; i < count; i++) {
+              distanceMatrix.matrix[i, j] = double.Parse(m[i].Value, System.Globalization.CultureInfo.InvariantCulture);              
+            }
+
+            line = reader.ReadLine();
+            m = reg.Matches(line);
+            j++;
+          }
+
+          if (j != count)
+            throw new Exception("Invalid distance matrix definition");
         }
 
Index: branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/PickupDeliveryScenario.cs
===================================================================
--- branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/PickupDeliveryScenario.cs	(revision 8824)
+++ branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/PickupDeliveryScenario.cs	(revision 8839)
@@ -212,4 +212,13 @@
       VehicleDueTimesParameter.Value = vehicleDueTimes;
 
+      if (parser.DistanceMatrix.useDistanceMatrix) {
+        DistanceMatrixMeasure dm = new DistanceMatrixMeasure();
+
+        dm.PointMapping = new IntMatrix(parser.DistanceMatrix.coordinates);
+        dm.DistanceMatrix = new DoubleMatrix(parser.DistanceMatrix.matrix);
+
+        DistanceMeasure = dm;
+      }
+
       PickupDeliveryPredefinedOrderGenerator orderGen = new PickupDeliveryPredefinedOrderGenerator();
       int orders = parser.Orders.Length;
