diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
index b726043e4a5bb38ad864f3c5e5b64b423738e493..c895dc9a4752e8a02ee48d4cec10bbc9cd026860 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
@@ -6,6 +6,7 @@ import it.unibz.inf.isochrone.network.Location;
 import it.unibz.inf.isochrone.network.MemoryOutput;
 import it.unibz.inf.isochrone.network.Node;
 import it.unibz.inf.isochrone.network.Output;
+import it.unibz.inf.isochrone.util.Config;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Query;
@@ -32,7 +33,7 @@ public abstract class Isochrone {
 	private final PriorityQueue<Node> queue;
 	private Set<Integer> codes;
 
-	protected Database db;
+	protected Database<Config> db;
 
 	/**
 	 * Instantiates a new isochrone object.
diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java b/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java
index e2987fe1ca227f85d698b87277562d8e1c3dddce..0182255e0ba36e2f1d4a319a6b9a3b5048130275 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java
@@ -3,6 +3,7 @@ package it.unibz.inf.isochrone.algorithm;
 import it.unibz.inf.isochrone.db.Database;
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Node;
+import it.unibz.inf.isochrone.util.Config;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Query;
 
@@ -11,6 +12,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * The Dijkstra isochrone algorithm.  Loads all data at the beginning,
@@ -19,16 +21,16 @@ import java.util.List;
  * that is in the database.
  */
 public class MDijkstra extends Isochrone {
-
-	private HashMap<Integer, Node> nodes;
-	private LinkedHashMap<Integer, Link> links;
+	private Map<Integer, Node> nodes;
+	private Map<Integer, Link> links;
 
 	public MDijkstra(final Query query) {
 		super(query);
 		nodes = new HashMap<Integer, Node>();
 		links = new LinkedHashMap<Integer, Link>();
 
-		db = new Database(query.getDs(), query.getMode(), query.getDir());
+		final Config config = new Config(query.getDs());
+		db = new Database<Config>(config, query.getMode(), query.getDir());
 		db.readNetwork(nodes, links);
 		initDateCodes();
 	}
diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java b/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java
index cd17a135b6e45c0af59df9c9eeacc74fc8d6f625..036e016fcdcce892bf7acc39610d8d41d0fcd8e3 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java
@@ -3,26 +3,28 @@ package it.unibz.inf.isochrone.algorithm;
 import it.unibz.inf.isochrone.db.Database;
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Node;
-import it.unibz.inf.isochrone.util.Query;
+import it.unibz.inf.isochrone.util.Config;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
+import it.unibz.inf.isochrone.util.Query;
 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * The MineX isochrone algorithm.  Loads the nodes and links from the
  * database as soon as they are needed.
  */
 public class MineX extends Isochrone {
-
-	private final HashMap<Integer, Node> nodes;
+	private final Map<Integer, Node> nodes;
 
 	public MineX(final Query query) {
 		super(query);
-
 		nodes = new HashMap<Integer, Node>();
-		db = new Database(query.getDs(), query.getMode(), query.getDir());
+
+		final Config config = new Config(query.getDs());
+		db = new Database<Config>(config, query.getMode(), query.getDir());
 		initDateCodes();
 	}
 
diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java b/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
index ae06c1be7e367bbb14aa2d0d1026f7b656ff0715..40efd5ecaee4fb3268592abb8ef146129ea98436 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
@@ -3,6 +3,7 @@ package it.unibz.inf.isochrone.algorithm;
 import it.unibz.inf.isochrone.db.Database;
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Node;
+import it.unibz.inf.isochrone.util.Config;
 import it.unibz.inf.isochrone.util.DistanceAlgorithm;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Query;
@@ -12,16 +13,17 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * The MrneX isochrone algorithm.  Loads the data in circles
  * surrounding the currently explored node.
  */
 public class MrneX extends Isochrone {
-	private HashMap<Integer, Node> nodes;
-	private HashMap<Integer, Node> loadedIERNodes = new HashMap<Integer, Node>();
+	private Map<Integer, Node> nodes;
+	private Map<Integer, Node> loadedIERNodes = new HashMap<Integer, Node>();
 
-	private final HashMap<Integer, List<Link>> adjList = new HashMap<Integer, List<Link>>();
+	private final Map<Integer, List<Link>> adjList = new HashMap<Integer, List<Link>>();
 	private final int maxDuration, maxMemorySize;
 	private final double walkingSpeed;
 
@@ -33,7 +35,9 @@ public class MrneX extends Isochrone {
 
 	public MrneX(final Query query, final int maxMemorySize) {
 		super(query);
-		db = new Database(query.getDs(), query.getMode(), query.getDir());
+
+		final Config config = new Config(query.getDs());
+		db = new Database<Config>(config, query.getMode(), query.getDir());
 		initDateCodes();
 		nodes = new HashMap<Integer, Node>();
 
diff --git a/src/main/java/it/unibz/inf/isochrone/db/Database.java b/src/main/java/it/unibz/inf/isochrone/db/Database.java
index 363088bb9500999bb7b976c5717d3da451320015..b7fad147cfeaa0596e1faefc49f084fbaf7c163c 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/Database.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java
@@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.db;
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Node;
 import it.unibz.inf.isochrone.util.Config;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Point;
@@ -42,7 +41,7 @@ import org.apache.commons.dbutils.DbUtils;
  * @author <a href="mailto:markus.innerebner@inf.unibz.it">Markus Innerebner</a>.
  * @version 2.2
  */
-public class Database {
+public class Database<T extends Config> {
 	protected static final byte NW_MODE_CONTINUOUS = 0;
 	protected static final byte NW_MODE_DISCRETE = 1;
 
@@ -62,17 +61,17 @@ public class Database {
 	private final String queryGetLinksInRange;
 	private final String queryGetRange;
 	private final String queryLoadLinksFromIER;
-	protected final Config config;
+	protected final T config;
 	protected Mode mode;
 	protected boolean isIncoming;
 	protected Connection connection;
 
-	public Database(final Dataset dataset, final Mode mode, final Direction direction) {
-		this(new Config(dataset), direction);
+	public Database(final T config, final Mode mode, final Direction direction) {
+		this(config, direction);
 		setMode(mode);
 	}
 
-	protected Database(final Config config, final Direction direction) {
+	protected Database(final T config, final Direction direction) {
 		this.config = config;
 		this.isIncoming = (direction == Direction.INCOMING);
 
@@ -96,7 +95,7 @@ public class Database {
 
 		queryGetDateCodes = "SELECT DISTINCT SERVICE_ID "
 				+ " FROM "
-				+ config.getDaymarkerTable()
+				+ config.getTableDaymarker()
 				+ " WHERE (((MONDAY::int::bit || TUESDAY::int::bit || WEDNESDAY::int::bit || THURSDAY::int::bit"
 				+ " || FRIDAY::int::bit || SATURDAY::int::bit || SUNDAY::int::bit) & ?::bit(7))::int) > 0"
 				+ " AND START_DATE <= ? AND END_DATE >= ? "
diff --git a/src/main/java/it/unibz/inf/isochrone/util/Config.java b/src/main/java/it/unibz/inf/isochrone/util/Config.java
index bd6922a408be996a85b37a794744c450574f1270..cbf7938798e3cab727407cddc60f9d0c749a27d4 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/Config.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/Config.java
@@ -77,10 +77,6 @@ public class Config {
 
 	// Public methods
 
-	public int getClientSRID() {
-		return Integer.parseInt(getProperty("cfg.clientSRID"));
-	}
-
 	public Connection getConnection() {
 		try {
 			return factory.getConnection();
@@ -106,10 +102,6 @@ public class Config {
 		return resultList;
 	}
 
-	public String getDaymarkerTable() {
-		return getProperty("tbl.dateCodes");
-	}
-
 	public String getDBName() {
 		return getProperty("org.postgresql.database");
 	}
@@ -138,6 +130,10 @@ public class Config {
 		return Integer.parseInt(getProperty("sql.spatial.srid"));
 	}
 
+	public String getTableDaymarker() {
+		return getProperty("tbl.dateCodes");
+	}
+
 	public String getTableEdges() {
 		return getProperty("tbl.links");
 	}
diff --git a/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java b/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java
index e300c73e0d39a7f0771a50807004d35ca71c6548..968cbeea968e154bc363d235ddb7972378aad2af 100644
--- a/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java
+++ b/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java
@@ -42,7 +42,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
  * interface. (Mostly inserting vertices and links into the tables
  * used for the GeoServer)
  */
-public class IsogaDatabase extends Database {
+public class IsogaDatabase extends Database<ConfigWeb> {
 	private final String queryGetIsoEdges;
 	private final String queryStoreLinks;
 	private final String queryStorePartialLinks;
@@ -165,7 +165,7 @@ public class IsogaDatabase extends Database {
 				}
 
 				final IsoEdge edge = new IsoEdge(edgeId, sourceId, targetId, length, adjNodeDistance, geometry);
-				if (((ConfigWeb) config).isIncoming()) {
+				if (config.isIncoming()) {
 					edge.setStartOffset(adjNodeOffset);
 					edge.setEndOffset(length);
 					edge.setRemainingDistance(adjNodeOffset > 0 ? 0 : dMax - edge.getAdjNodeDistance() * speed);
@@ -210,7 +210,7 @@ public class IsogaDatabase extends Database {
 		geometryString = polygon.getTypeString() + polygon.getValue();
 
 		final StringBuilder b = new StringBuilder();
-		b.append("INSERT INTO ").append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName());
+		b.append("INSERT INTO ").append(config.getDestinationAreaBufferTableEntry().getTableName());
 		b.append("(\"ID\",\"GEOMETRY\") VALUES(?,ST_MULTI(ST_Buffer(ST_MakeValid(ST_GeomFromText(?," + config.getServerSRID() + ")),?,'endcap=round join=round')))");
 		PreparedStatement statement = null;
 		try {
@@ -233,8 +233,8 @@ public class IsogaDatabase extends Database {
 		final List<Integer> edges = new ArrayList<Integer>();
 		final StringBuilder b1 = new StringBuilder();
 		b1.append("SELECT L.\"ID\" FROM ");
-		b1.append(((ConfigWeb) config).getDestinationEdgeTableEntry().getTableName()).append(" L, ");
-		b1.append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName()).append(" A ");
+		b1.append(config.getDestinationEdgeTableEntry().getTableName()).append(" L, ");
+		b1.append(config.getDestinationAreaBufferTableEntry().getTableName()).append(" A ");
 		b1.append("WHERE A.\"ID\"=? AND ST_Within(L.\"GEOMETRY\",A.\"GEOMETRY\")=TRUE");
 
 		PreparedStatement statement = null;
@@ -260,8 +260,8 @@ public class IsogaDatabase extends Database {
 		int reachedInhabitants = 0;
 		final StringBuilder b = new StringBuilder();
 		b.append("SELECT SUM(I.INHABITANTS) FROM (SELECT DISTINCT B.ID, B.INHABITANTS FROM ");
-		b.append(((ConfigWeb) config).getTableBuilding()).append(" B, ");
-		b.append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName()).append(" A ");
+		b.append(config.getTableBuilding()).append(" B, ");
+		b.append(config.getDestinationAreaBufferTableEntry().getTableName()).append(" A ");
 		b.append("WHERE ST_Within(B.GEOMETRY, A.GEOMETRY)='TRUE') I");
 
 		PreparedStatement statement = null;
@@ -283,7 +283,7 @@ public class IsogaDatabase extends Database {
 	}
 
 	public int totalInhabitants() {
-		final String query = "SELECT SUM(INHABITANTS) FROM " + ((ConfigWeb) config).getTableBuilding();
+		final String query = "SELECT SUM(INHABITANTS) FROM " + config.getTableBuilding();
 		int totalInhabitants = 0;
 
 		PreparedStatement statement = null;
@@ -382,7 +382,7 @@ public class IsogaDatabase extends Database {
 			statement.setInt(2, config.getClientSRID());
 
 			// CHECKSTYLE:OFF MagicNumber
-			final int tolerance = ((ConfigWeb) config).getDistanceTolerance();
+			final int tolerance = config.getDistanceTolerance();
 			if (config.getClientSRID() != config.getServerSRID()) {
 				statement.setInt(3, config.getServerSRID());
 				statement.setInt(4, tolerance);
diff --git a/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java b/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java
index a1080fe0aa6ecbb4008d93972cf6b81c7257ba83..760c75aa4fefdfb5cebd9bdcdd773a502e6453f7 100644
--- a/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java
+++ b/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java
@@ -73,6 +73,10 @@ public class ConfigWeb extends Config {
 		return new Point(Double.valueOf(poiProperty[0]), Double.valueOf(poiProperty[1]));
 	}
 
+	public int getClientSRID() {
+		return Integer.parseInt(getProperty("cfg.clientSRID"));
+	}
+
 	public TableEntry getDestinationAreaBufferTableEntry() {
 		return destinationAreaBufferTableEntry;
 	}
diff --git a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
index abd86205fde9aec9ef051ce14c8095b1b81c9840..604715530275a66034667cdd8b622578737142c7 100644
--- a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
@@ -2,6 +2,7 @@ package it.unibz.inf.isochrone.db;
 
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Node;
+import it.unibz.inf.isochrone.util.Config;
 import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
@@ -42,7 +43,8 @@ public class DatabaseTest {
 
 	@Test
 	public void testCreateDatabaseObject() {
-		final Database db = new Database(Dataset.BZ, Mode.MULTIMODAL, Direction.INCOMING);
+		final Config bzConfig = new Config(Dataset.BZ);
+		final Database<Config> db = new Database<Config>(bzConfig, Mode.MULTIMODAL, Direction.INCOMING);
 		Assert.assertNotNull(db, "Database object could not be created!");
 	}
 
@@ -71,8 +73,9 @@ public class DatabaseTest {
 
 	// Private methods
 
-	private Database initDb() {
-		final Database db = new Database(Dataset.BZ, Mode.MULTIMODAL, Direction.INCOMING);
+	private Database<Config> initDb() {
+		final Config config = new Config(Dataset.BZ);
+		final Database<Config> db = new Database<Config>(config, Mode.MULTIMODAL, Direction.INCOMING);
 		db.readNetwork(nodes, links);
 
 		return db;