Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning.Test/Program.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning.Test/Program.cs	(revision 8437)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning.Test/Program.cs	(revision 8438)
@@ -24,8 +24,8 @@
       IDataSource ds = TestLoad(file6);
       OsmGraph graph = new OsmGraph(ds);
-      //TestRouter(new DijkstraAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
-      //TestRouter(new AStarAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
+      TestRouter(new DijkstraAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
+      TestRouter(new AStarAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
       TestRouter(new AStarAlgorithmV2(graph), 529102170, 31372732, false); // inz - hgb
-      //TestRouter(new BidrectionalDijkstraAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
+      TestRouter(new BidrectionalDijkstraAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
 
       //TestLoadAndRouter(file6, typeof(DijkstraAlgorithm), 529102170, 31372732, false, false); // inz - hgb
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Edge.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Edge.cs	(revision 8437)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Edge.cs	(revision 8438)
@@ -12,7 +12,19 @@
     }
 
-    public Edge(Vertex source, Vertex target) {
+    private short category;
+    public short Category {
+      get { return category; }
+      set { category = value; }
+    }
+
+    public Edge(Vertex source, Vertex target)
+      : this(source, target, 0) {
+
+    }
+
+    public Edge(Vertex source, Vertex target, short category) {
       this.source = source;
       this.target = target;
+      this.category = category;
     }
 
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Graph.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Graph.cs	(revision 8438)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Graph.cs	(revision 8438)
@@ -0,0 +1,64 @@
+﻿
+using System;
+using System.Collections.Generic;
+namespace HeuristicLab.Problems.RoutePlanning.Graph {
+  public class Graph {
+    private IDictionary<long, Vertex> vertices;
+    private IDictionary<long, List<Edge<Vertex>>> adjacencyMap;
+    private IDictionary<long, List<Edge<Vertex>>> incidenceMap;
+
+    public Graph() {
+      vertices = new Dictionary<long, Vertex>();
+      adjacencyMap = new Dictionary<long, List<Edge<Vertex>>>();
+    }
+
+    public void AddVertex(Vertex vertex) {
+      vertices.Add(vertex.Id, vertex);
+    }
+
+    public Vertex GetVertex(long id) {
+      Vertex vertex = null;
+      vertices.TryGetValue(id, out vertex);
+      return vertex;
+    }
+
+    public void AddEdge(long startId, long endId) {
+      Vertex start = GetVertex(startId);
+      if (start == null) throw new ArgumentException(string.Format("Invalid vertex id {0}", startId), "startId");
+      Vertex end = GetVertex(startId);
+      if (end == null) throw new ArgumentException(string.Format("Invalid vertex id {0}", endId), "endId");
+
+      Edge<Vertex> edge = new Edge<Vertex>(start, end);
+      //edge.Category = -1
+
+      if (adjacencyMap[start.Id] == null) {
+        adjacencyMap[start.Id] = new List<Edge<Vertex>>();
+      }
+      adjacencyMap[start.Id].Add(edge);
+
+      if (incidenceMap[end.Id] == null) {
+        incidenceMap[end.Id] = new List<Edge<Vertex>>();
+      }
+      incidenceMap[end.Id].Add(edge);
+    }
+
+    public Edge<Vertex> GetEdge(long startId, long endId) {
+      List<Edge<Vertex>> edges = adjacencyMap[startId];
+      foreach (Edge<Vertex> edge in edges) {
+        if (edge.Target.Id == endId) {
+          return edge;
+        }
+      }
+      return null;
+    }
+
+    public List<Edge<Vertex>> GetInEdges(long vertexId) {
+      return incidenceMap[vertexId];
+
+    }
+
+    public List<Edge<Vertex>> GetOutEdges(long vertexId) {
+      return adjacencyMap[vertexId];
+    }
+  }
+}
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/IGraph.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/IGraph.cs	(revision 8438)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/IGraph.cs	(revision 8438)
@@ -0,0 +1,19 @@
+﻿
+using System.Collections.Generic;
+namespace HeuristicLab.Problems.RoutePlanning.Graph {
+  interface IGraph {
+    void AddVertex(Vertex vertex);
+    Vertex GetVertex(long id);
+    void AddEdge(long startId, long endId);
+    void RemoveEdge(long startId, long endId);
+    bool HasEdge(long startId, long endId);
+    Edge<Vertex> GetEdge(long startId, long endId);
+    List<Edge<Vertex>> GetEdges(long vertexId);
+    List<Edge<Vertex>> GetInEdges(long vertexId);
+    List<Edge<Vertex>> GetOutEdges(long vertexId);
+    Dictionary<long, float> GetNeighborsWithWeight(long id);
+    Dictionary<long, float> GetNeighborsWithWeightReversed(long id);
+    int GetOutDegree(long id);
+    int GetInDegree(long id);
+  }
+}
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Vertex.cs
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Vertex.cs	(revision 8437)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Graph/Vertex.cs	(revision 8438)
@@ -22,4 +22,10 @@
     public Vertex(long id) {
       this.id = id;
+    }
+
+    public Vertex(long id, double longitude, double latitude) {
+      this.id = id;
+      this.longitude = longitude;
+      this.latitude = latitude;
     }
 
Index: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/HeuristicLab.Problems.RoutePlanning.csproj
===================================================================
--- branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/HeuristicLab.Problems.RoutePlanning.csproj	(revision 8437)
+++ branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/HeuristicLab.Problems.RoutePlanning.csproj	(revision 8438)
@@ -57,8 +57,11 @@
   <ItemGroup>
     <Compile Include="Graph\Edge.cs" />
+    <Compile Include="Graph\Graph.cs" />
+    <Compile Include="Graph\IGraph.cs" />
     <Compile Include="Graph\OsmGraph.cs" />
     <Compile Include="Graph\IEdge.cs" />
     <Compile Include="Graph\OsmVertex.cs" />
     <Compile Include="Graph\Route.cs" />
+    <Compile Include="Graph\Vertex.cs" />
     <Compile Include="Osm.Data\XmlDataSource.cs" />
     <Compile Include="Osm\IDataSource.cs" />
