Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/DIMACS/DIMACSDataSource.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/DIMACS/DIMACSDataSource.cs	(revision 8480)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/DIMACS/DIMACSDataSource.cs	(revision 8480)
@@ -0,0 +1,135 @@
+﻿using System;
+using System.IO;
+using HeuristicLab.Problems.RoutePlanning.Graph;
+using HeuristicLab.Problems.RoutePlanning.Osm;
+using ICSharpCode.SharpZipLib.GZip;
+
+namespace HeuristicLab.Problems.RoutePlanning.DIMACS {
+  public class DIMACSDataSource : IDataSource {
+    FileInfo graphFile;
+    FileInfo coordinatesFile;
+
+    IGraph graph;
+
+    public DIMACSDataSource(string coordinates, string inputgraph) {
+      coordinatesFile = new FileInfo(coordinates);
+      graphFile = new FileInfo(inputgraph);
+      graph = new Graph.Graph();
+      ReadData();
+    }
+
+    #region IDataSource Members
+
+    public Node GetNode(long nodeId) {
+      throw new System.NotImplementedException();
+    }
+
+    public Way GetWay(long wayId) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.List<Way> GetWays(Node node) {
+      throw new System.NotImplementedException();
+    }
+
+    public Relation GetRelation(long relationId) {
+      throw new System.NotImplementedException();
+    }
+
+    public Graph.IGraph GetRoutingGraph() {
+      return graph;
+    }
+
+    #endregion
+
+    #region Private Methods
+
+    private void ReadData() {
+      using (FileStream fs = File.OpenRead(coordinatesFile.FullName))
+      using (GZipInputStream input = new GZipInputStream(fs)) {
+        string s = "";
+
+        int i;
+
+        while ((i = input.ReadByte()) != -1) {
+          char c = (char)i;
+          if (c == '\r' || c == '\n') {
+            if (s.StartsWith("c")) {
+              if (s.Length > 1) {
+                // comment
+                Console.WriteLine(s);
+              }
+            } else if (s.StartsWith("p")) {
+              string[] line = s.Split(' ');
+              if (line[1] == "aux" && line[2] == "sp" && line[3] == "co") {
+                int vertices = int.Parse(line[4]);
+                Console.WriteLine("vertices: {0}", vertices);
+              } else {
+                throw new ArgumentException("Wrong problem format");
+              }
+            } else if (s.StartsWith("v")) {
+              string[] line = s.Split(' ');
+
+              long id = int.Parse(line[1]);
+              double lon = double.Parse(line[2]);
+              double lat = double.Parse(line[3]);
+
+              Vertex v = new Vertex(id, lon, lat);
+              graph.AddVertex(v);
+            }
+            s = string.Empty;
+          } else {
+            s += c;
+          }
+        }
+      }
+
+
+      using (FileStream fs = File.OpenRead(graphFile.FullName))
+      using (GZipInputStream input = new GZipInputStream(fs)) {
+        string s = "";
+
+        int i;
+
+        while ((i = input.ReadByte()) != -1) {
+          char c = (char)i;
+          if (c == '\r' || c == '\n') {
+            if (s.StartsWith("c")) {
+              if (s.Length > 1) {
+                // comment
+                Console.WriteLine(s);
+              }
+            } else if (s.StartsWith("p")) {
+              string[] line = s.Split(' ');
+              if (line[1] == "sp") {
+                int vertices = int.Parse(line[2]);
+                int edges = int.Parse(line[3]);
+                Console.WriteLine("vertices: {0}; edges: {1}", vertices, edges);
+              } else {
+                throw new ArgumentException("Wrong problem format");
+              }
+            } else if (s.StartsWith("a")) {
+              string[] line = s.Split(' ');
+
+              long src = int.Parse(line[1]);
+              long dst = int.Parse(line[2]);
+              int len = int.Parse(line[3]);
+
+              Vertex vSrc = graph.GetVertex(src);
+              Vertex vDst = graph.GetVertex(dst);
+              Edge<Vertex> edge = new Edge<Vertex>(vSrc, vDst);
+              //TODO  len = weight
+              graph.AddEdge(edge);
+
+            }
+            s = string.Empty;
+          } else {
+            s += c;
+          }
+        }
+      }
+    }
+
+    #endregion
+  }
+}
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/HeuristicLab.Problems.RoutePlanning.csproj
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/HeuristicLab.Problems.RoutePlanning.csproj	(revision 8479)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/HeuristicLab.Problems.RoutePlanning.csproj	(revision 8480)
@@ -46,4 +46,5 @@
     <Reference Include="HeuristicLab.Persistence-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL" />
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -56,4 +57,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="DIMACS\DIMACSDataSource.cs" />
     <Compile Include="Graph\Edge.cs" />
     <Compile Include="Graph\Graph.cs" />
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm.Data/XmlDataSource.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm.Data/XmlDataSource.cs	(revision 8479)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm.Data/XmlDataSource.cs	(revision 8480)
@@ -1,4 +1,3 @@
 ﻿
-using System;
 using System.Collections.Generic;
 using System.IO;
@@ -92,22 +91,23 @@
           graph.AddVertex(v1);
           Vertex v2 = new Vertex(nodes[i + 1].Id, nodes[i + 1].Longitude, nodes[i + 1].Latitude);
-          if (v1.Id == 370626403) {
-            Console.WriteLine();
-          }
+
+          // ---------------------------------------
+          //long id = 314973778;
+          //if (v1.Id == id || v2.Id == id) {
+          //  Console.WriteLine();
+          //}
+          // ---------------------------------------
           graph.AddVertex(v2);
+          short category = (short)way.HighwayTag;
           if (way.OneWay) {
-            Edge<Vertex> edge = new Edge<Vertex>(v1, v2);
-            edge.Category = (short)way.HighwayTag;
+            Edge<Vertex> edge = new Edge<Vertex>(v1, v2, category);
             graph.AddEdge(edge);
           } else {
-            Edge<Vertex> edgeForward = new Edge<Vertex>(v1, v2);
-            edgeForward.Category = (short)way.HighwayTag;
+            Edge<Vertex> edgeForward = new Edge<Vertex>(v1, v2, category);
             graph.AddEdge(edgeForward);
 
-            Edge<Vertex> edgeBackward = new Edge<Vertex>(v2, v1);
-            edgeForward.Category = (short)way.HighwayTag;
+            Edge<Vertex> edgeBackward = new Edge<Vertex>(v2, v1, category);
             graph.AddEdge(edgeBackward);
           }
-
         }
       }
