diff --git a/evaluation/T.py b/evaluation/T.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d70f2882f895f183ff2fb156cc47ed44588b58a
--- /dev/null
+++ b/evaluation/T.py
@@ -0,0 +1,38 @@
+from collections import namedtuple
+from dataclasses import dataclass
+
+@dataclass
+class QueryRow:
+    start_node: str
+    target_node: str
+    query_time: float
+    trip_time: float
+    nodes: int
+    edges: int
+    charging_stations: int
+
+
+@dataclass
+class GasstationQueryRow(QueryRow):
+    time_contracted_graph: float
+    time_state_graph: float
+
+
+@dataclass
+class ChargeQueryRow(QueryRow):
+    time_contracted_graph: float
+    time_state_graph: float
+
+
+@dataclass
+class ClassicQueryRow(QueryRow):
+    dijkstra_rank: int
+
+
+@dataclass
+class AStarQueryRow(QueryRow):
+    pass
+
+
+Query = namedtuple('Query',
+                   field_names=['query_function', 'filename', 'row_dataclass'])
diff --git a/evaluation/results/charge.log b/evaluation/__init__.py
similarity index 100%
rename from evaluation/results/charge.log
rename to evaluation/__init__.py
diff --git a/evaluation/configs/example.yaml b/evaluation/configs/example.yaml
index 8c7f64bea2572e5bee2f327bf2c195dc6dcd38ae..44dceb7f0dce2a2b6066dd3b9dea77daabd703f8 100644
--- a/evaluation/configs/example.yaml
+++ b/evaluation/configs/example.yaml
@@ -1,6 +1,8 @@
 description: >
   Compare charge and gasstation problem by assuming for the charge
-  algorithm also an consumption proportional to driving time
+  algorithm also an consumption proportional to driving time.
+type: query
+charging_stations: charging_stations.json
 maps:
   - map.osm
 querys_per_setup: 10
@@ -10,7 +12,5 @@ setups:
     charging_stations: 10 # Max Number of charging Stations to be inserted.
     capactiy: 85 # kWh
     consumption:
-      gasstation:
-        consumption_coefficient: 100 # kWh/s
-      charge:
-        type: gasstation # Use the same
+      type: gasstation
+      consumption_coefficient: 100 # kWh/s
diff --git a/evaluation/export.py b/evaluation/export.py
new file mode 100644
index 0000000000000000000000000000000000000000..2ccaace4e2c460ee9f0b71a612f026ad0eeb2404
--- /dev/null
+++ b/evaluation/export.py
@@ -0,0 +1,15 @@
+from typing import TextIO
+from dataclasses import asdict, fields
+
+from evaluation.T import QueryRow
+
+SEP = ','
+
+
+def write_head(f: TextIO, row_class: QueryRow):
+    head = SEP.join([field.name for field in fields(row_class)])
+    f.write(head + '\n')
+
+
+def write_row(f: TextIO, row: QueryRow):
+    f.write(SEP.join(asdict(row).values()) + "\n")
diff --git a/evaluation/queries.py b/evaluation/queries.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4460b28d997513a5f991a0c925770519bf9d265
--- /dev/null
+++ b/evaluation/queries.py
@@ -0,0 +1,28 @@
+from evaluation.export import write_row
+from evaluation.T import (
+    GasstationQueryRow,
+    ChargeQueryRow,
+    ClassicQueryRow,
+    AStarQueryRow
+)
+
+from evrouting import gasstation, charge
+from evrouting.osm.routing import GasstationAccessFunctions
+
+__all__ = ['gasstation_query', 'charge_query', 'classic_query', 'astar_query']
+
+
+def gasstation_query(graph, conf, file):
+    pass
+
+
+def charge_query(graph, conf, file):
+    pass
+
+
+def classic_query(graph, conf, file):
+    pass
+
+
+def astar_query(graph, conf, file):
+    pass
diff --git a/evaluation/results/example/queries/astar.csv b/evaluation/results/example/queries/astar.csv
new file mode 100644
index 0000000000000000000000000000000000000000..19c78db8876a38a4f7312fc2f27084e82dc54b99
--- /dev/null
+++ b/evaluation/results/example/queries/astar.csv
@@ -0,0 +1 @@
+start_node,target_node,query_time,trip_time,nodes,edges,charging_stations
diff --git a/evaluation/results/example/queries/charge.csv b/evaluation/results/example/queries/charge.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e0eab29be90dfcd179f5096540ab88b1f5af22ad
--- /dev/null
+++ b/evaluation/results/example/queries/charge.csv
@@ -0,0 +1 @@
+start_node,target_node,query_time,trip_time,nodes,edges,charging_stations,time_contracted_graph,time_state_graph
diff --git a/evaluation/results/example/queries/classic.csv b/evaluation/results/example/queries/classic.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ad83ad22ad3d5b243f6ebd21ff3bf933234f1968
--- /dev/null
+++ b/evaluation/results/example/queries/classic.csv
@@ -0,0 +1 @@
+start_node,target_node,query_time,trip_time,nodes,edges,charging_stations,dijkstra_rank
diff --git a/evaluation/results/example/queries/gasstation.csv b/evaluation/results/example/queries/gasstation.csv
new file mode 100644
index 0000000000000000000000000000000000000000..e0eab29be90dfcd179f5096540ab88b1f5af22ad
--- /dev/null
+++ b/evaluation/results/example/queries/gasstation.csv
@@ -0,0 +1 @@
+start_node,target_node,query_time,trip_time,nodes,edges,charging_stations,time_contracted_graph,time_state_graph
diff --git a/evaluation/results/gasstation.log b/evaluation/results/gasstation.log
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/evaluation/run.py b/evaluation/run.py
index 16fa7c3bafcee09a5f1593e59f526bb509e6608f..3d7b4a6207577c73c36ae2014e5af45057e6843c 100644
--- a/evaluation/run.py
+++ b/evaluation/run.py
@@ -1,70 +1,78 @@
-import logging.config
 import argparse
+import json
 from pathlib import Path
 
 import yaml
 
-from evrouting import gasstation, charge
-
-
-def get_logging_config(gasstation_results: str, charging_results: str):
-    gasstation_path = str(Path(__file__).parent.joinpath('results/' + gasstation_results))
-    charging_path = str(Path(__file__).parent.joinpath('results/' + charging_results))
-    return {
-        'version': 1,
-        'formatters': {
-            'query': {
-                'fmt': '{s},{t},{time}',
-                'style': '{'
-            }
-        },
-        'handlers': {
-            'gasstation': {
-                'class': 'logging.handlers.RotatingFileHandler',
-                'formatter': 'query',
-                'filename': gasstation_path
-            },
-            'charge': {
-                'class': 'logging.handlers.RotatingFileHandler',
-                'formatter': 'query',
-                'filename': charging_path
-            }
-        },
-        'loggers': {
-            'benchmark.gasstation': {
-                'handlers': ['gasstation'],
-                'level': 'INFO'
-            },
-            'benchmark.charge': {
-                'handlers': ['charge'],
-                'level': 'INFO'
-            }
-        }
-    }
+from evrouting.osm.imports import read_osm
+
+from evaluation.T import *
+from evaluation.export import write_head
+from evaluation.queries import *
+
+
+def query_benchmark(graphs,
+                    conf,
+                    result_dir):
+    QUERIES = [
+        Query(query_function=gasstation_query,
+              filename='gasstation.csv',
+              row_dataclass=GasstationQueryRow),
+        Query(charge_query, 'charge.csv', ChargeQueryRow),
+        Query(classic_query, 'classic.csv', ClassicQueryRow),
+        Query(astar_query, 'astar.csv', AStarQueryRow)
+    ]
+
+    for G in graphs:
+        for func, filename, row_class in QUERIES:
+            with result_dir.joinpath(filename).open('w') as f:
+                write_head(f, row_class)
+                func(G, conf, f)
+
+
+def get_map(osm_path: Path, cs_path: Path):
+    graph = read_osm(str(osm_path))
+
+    with cs_path.open() as f:
+        cs = json.load(f)
+    graph.insert_charging_stations(cs)
+
+    return graph
 
 
 if __name__ == '__main__':
     base = Path(__file__).parent
-    static = base.joinpath('static')
+    results_dir = base.joinpath('results')
+    static_dir = base.joinpath('static')
+    maps_dir = static_dir.joinpath('maps')
 
-    # Setup File Streams
-    logging.config.dictConfig(
-        get_logging_config('gasstation.log', 'charge.log')
-    )
+    # Charging Stations
+    cs_path = static_dir.joinpath('charging_stations.json')
 
     parser = argparse.ArgumentParser(description='Run Benchmark Scripts.')
     parser.add_argument(
         '--configs',
         help='List of filenames to benchmark YAML configs in ./configs.',
+        type=Path,
         nargs='+'
     )
 
     args = parser.parse_args()
-    path: str
+    path: Path
     for path in args.configs:
-        if not path.endswith('.yaml'):
-            path += '.yaml'
+        benchmark_dir = results_dir.joinpath(path.with_suffix(''))
+        benchmark_dir.mkdir(exist_ok=True)
 
-        with open(base.joinpath('configs/' + path)) as f:
+        path = path.with_suffix('.yaml')
+
+        with base.joinpath('configs/', path).open() as f:
             conf = yaml.load(f, Loader=yaml.Loader)
-        print(conf)
+
+        graphs = [get_map(maps_dir.joinpath(m), cs_path) for m in conf['maps']]
+
+        if conf['type'] == 'query':
+            query_dir = benchmark_dir.joinpath('queries')
+            query_dir.mkdir(exist_ok=True)
+            query_benchmark(graphs=graphs,
+                            conf=conf,
+                            result_dir=query_dir)
diff --git a/evrouting/graph_tools.py b/evrouting/graph_tools.py
index 69b7523b22406824ee7b7134be1b7508fb0eaeba..81bb8f24dcce07e141ebb789996c6c73fc5aed0f 100644
--- a/evrouting/graph_tools.py
+++ b/evrouting/graph_tools.py
@@ -1,5 +1,4 @@
 from collections import namedtuple
-from typing import Union
 
 import networkx as nx
 from evrouting.T import (
diff --git a/evrouting/osm/imports.py b/evrouting/osm/imports.py
index 3878db55451d826c0e182375328736edd910f17c..effbbc1670cfe3dcfc21143123b4571c13daeb03 100644
--- a/evrouting/osm/imports.py
+++ b/evrouting/osm/imports.py
@@ -21,7 +21,7 @@ import rtree
 
 from evrouting.graph_tools import CHARGING_COEFFICIENT_KEY, DISTANCE_KEY, HAVERSINE_KEY
 from evrouting.osm.const import ms_to_kmh
-from evrouting.osm.profiles import speed
+from evrouting.osm.profiles import speed, car
 from evrouting.osm.routing import point, haversine_distance
 
 logger = logging.getLogger(__name__)
@@ -101,7 +101,7 @@ class OSMGraph(nx.DiGraph):
         return n
 
 
-def read_osm(osm_xml_data, profile) -> OSMGraph:
+def read_osm(osm_xml_data, profile=car) -> OSMGraph:
     """
     Read graph in OSM format from file specified by name or by stream object.
     Create Graph containing all highways as edges.