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 fb940a772105f609c5c2b64f678d5900b192b42c..5078ea1cb007d1817ad62b259ee3d8931d5c9059 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
@@ -5,8 +5,8 @@ import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Location;
 import it.unibz.inf.isochrone.network.Node;
 import it.unibz.inf.isochrone.network.Output;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+import it.unibz.inf.isochrone.util.EnumContainer.Direction;
+import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Query;
 
 import java.util.Calendar;
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 bd2f6152d6af539fedb07cb214082f2239998045..31ea0046b7f40a01acfcb85b9f9590ce27813b1f 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java
@@ -4,7 +4,7 @@ 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.Enums.Mode;
+import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 
 import java.util.ArrayList;
 import java.util.Collection;
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 bc8e961d8fedd124d7f4cf54afe31946395add4a..cd17a135b6e45c0af59df9c9eeacc74fc8d6f625 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java
@@ -4,7 +4,7 @@ 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.Enums.Mode;
+import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 
 import java.util.Collection;
 import java.util.HashMap;
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 621e6417231539919496abc96a41df101e103aaf..7b287f6187a3732c2dc6224b7a15be9464ee4743 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
@@ -3,9 +3,9 @@ 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.Enums.Mode;
+import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Query;
-import it.unibz.inf.isochrone.util.RangeUtil;
+import it.unibz.inf.isochrone.util.DistanceAlgorithm;
 
 import java.text.NumberFormat;
 import java.util.ArrayList;
@@ -80,7 +80,7 @@ public class MrneX extends Isochrone {
 
 		final List<Node> intersections = new ArrayList<Node>();
 		for (final Node loadedNode : loadedIERNodes.values()) {
-			if (RangeUtil.euclideanDistance(node.getCoordinates(), loadedNode.getCoordinates())
+			if (DistanceAlgorithm.euclideanDistance(node.getCoordinates(), loadedNode.getCoordinates())
 					< node.getRadius() + loadedNode.getRadius()) {
 				intersections.add(loadedNode);
 			}
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 dd121d47c43683f64b2e44d46037c55877e33611..55de89e30f2ac3f8a24fdf22cacd46664417a79f 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/Database.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java
@@ -3,9 +3,9 @@ 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.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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;
 
 import java.sql.Connection;
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 780ea88f2f443e42acebacc7c5157d0c8353f39d..43b157aeb2796a75e60a16f1a7455653f54bc843 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/Config.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/Config.java
@@ -1,7 +1,7 @@
 package it.unibz.inf.isochrone.util;
 
 import it.unibz.inf.isochrone.db.ConnectionFactory;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
+import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -31,47 +31,52 @@ import java.util.Properties;
 //TODO: Shouldn't Config be a singleton class
 public class Config {
 	protected Properties internalProperties;
-	protected ConnectionFactory factory;
+	protected final ConnectionFactory factory;
 	protected short densityLimit = Short.MIN_VALUE;
 
 	public Config() {
-		this(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.xml"));
+		this(null);
 	}
 
 	public Config(final Dataset dataset) {
-		this(Thread.currentThread().getContextClassLoader().getResourceAsStream("config.xml"));
-		final String fileName = "config_" + dataset.toString().toLowerCase() + ".xml";
-		final InputStream dSetProps = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
-		appendPropertyFile(dSetProps);
-		setupConnection();
-	}
-
-	public Config(final InputStream inputStream) {
 		internalProperties = new Properties();
-		try {
-			internalProperties.loadFromXML(inputStream);
-			internalProperties.putAll(System.getProperties());
-		} catch (final IOException e) {
-			throw new RuntimeException("Unable to load the config file: " + e);
+
+		final String fileName = "config.xml";
+		final InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
+		appendPropertyFile(in);
+
+		if (dataset != null) {
+			final String fileName2 = "config_" + dataset.toString().toLowerCase() + ".xml";
+			final InputStream in2 = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName2);
+			appendPropertyFile(in2);
 		}
 
-		setupConnection();
+		factory = initConnectionFactory();
 	}
 
 	protected Properties getInternalProperties() {
 		return internalProperties;
 	}
 
-	protected void setupConnection() {
-		factory = new ConnectionFactory(getDBPooling());
+	protected ConnectionFactory initConnectionFactory() {
+		final String serverName = getDBServerName();
+		final String dbName = getDBName();
+		final int dbPort = getDBPort();
+		final String dbUser = getDBUser();
+		final String dbPassword = getDBPassword();
+		final boolean isPooling = getDBPooling();
 
+		ConnectionFactory f = null;
 		try {
-			factory.register(getDBServerName(), getDBName(), getDBPort(), getDBUser(), getDBPassword());
+			f = new ConnectionFactory(isPooling);
+			f.register(serverName, dbName, dbPort, dbUser, dbPassword);
 		} catch (final SQLException e) {
 			throw new RuntimeException("Unable to connect to the database: " + e);
 		} catch (final ClassNotFoundException e) {
 			throw new RuntimeException("Class not found: " + e);
 		}
+
+		return f;
 	}
 
 	public Connection getConnection() {
@@ -130,7 +135,7 @@ public class Config {
 	 *
 	 * @param inputStream
 	 */
-	public void appendPropertyFile(final InputStream inputStream) {
+	protected void appendPropertyFile(final InputStream inputStream) {
 		try {
 			internalProperties.loadFromXML(inputStream);
 			internalProperties.putAll(System.getProperties());
@@ -139,7 +144,6 @@ public class Config {
 			if (densityLimit == Short.MIN_VALUE && density != null) {
 				densityLimit = Short.parseShort(density);
 			}
-
 		} catch (final InvalidPropertiesFormatException e) {
 			throw new RuntimeException(e);
 		} catch (final IOException e) {
diff --git a/src/main/java/it/unibz/inf/isochrone/util/RangeUtil.java b/src/main/java/it/unibz/inf/isochrone/util/DistanceAlgorithm.java
similarity index 83%
rename from src/main/java/it/unibz/inf/isochrone/util/RangeUtil.java
rename to src/main/java/it/unibz/inf/isochrone/util/DistanceAlgorithm.java
index 06a8caede2b82afef6b8e88a75d4b50cc85ed201..1f2f46f716bc20b3b662647eda8d682d5d03d32c 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/RangeUtil.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/DistanceAlgorithm.java
@@ -4,8 +4,9 @@ package it.unibz.inf.isochrone.util;
  * The RangeUtil is used to calculate the euclidean distance between
  * two points for the MrneX algorithm.
  */
-public final class RangeUtil {
-	private RangeUtil() { }
+public final class DistanceAlgorithm {
+
+	private DistanceAlgorithm() { }
 
 	public static double euclideanDistance(final Point p1, final Point p2) {
 		final double value = Math.pow(p1.getX() - p2.getX(), 2) + Math.pow(p1.getY() - p2.getY(), 2);
diff --git a/src/main/java/it/unibz/inf/isochrone/util/Enums.java b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
similarity index 97%
rename from src/main/java/it/unibz/inf/isochrone/util/Enums.java
rename to src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
index 8a8aac0b1089fb8a194f2c62ffa4627e5f7e0594..ac9d4e011c318338409aaaace9e373e6e3616679 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/Enums.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
@@ -3,7 +3,7 @@ package it.unibz.inf.isochrone.util;
 /**
  * Stores all the enums used in the project in one place.
  */
-public class Enums {
+public class EnumContainer {
 
 	/**
 	 * Lists of all datasets available in the database.
diff --git a/src/main/java/it/unibz/inf/isochrone/util/Query.java b/src/main/java/it/unibz/inf/isochrone/util/Query.java
index 3e5b012c8b12dbaf1699f3b356b18da1d6931cd1..98c5508441288d2f060fff62c361cd0139e21b11 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/Query.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/Query.java
@@ -1,9 +1,9 @@
 package it.unibz.inf.isochrone.util;
 
 import it.unibz.inf.isochrone.network.Location;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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 java.util.Arrays;
 import java.util.Calendar;
diff --git a/src/main/java/it/unibz/inf/isoga/comet/IsochronesCometdServlet.java b/src/main/java/it/unibz/inf/isoga/comet/IsochronesCometdServlet.java
deleted file mode 100644
index a597e4ca7d223703d283950ad3a5e5b174f7b7d9..0000000000000000000000000000000000000000
--- a/src/main/java/it/unibz/inf/isoga/comet/IsochronesCometdServlet.java
+++ /dev/null
@@ -1,31 +0,0 @@
-//package it.unibz.inf.isoga.comet;
-//
-//import it.unibz.inf.isoga.services.IsochroneService;
-//
-//import java.io.IOException;
-//
-//import javax.servlet.ServletException;
-//import javax.servlet.ServletRequest;
-//import javax.servlet.ServletResponse;
-//
-//import org.cometd.bayeux.server.BayeuxServer;
-//import org.cometd.server.CometdServlet;
-//
-///**
-// * Servlet used to start the Isochrone web service.
-// */
-//public class IsochronesCometdServlet extends CometdServlet {
-//	private static final long serialVersionUID = -5572756263870946647L;
-//
-//	@Override
-//	public void init() throws ServletException {
-//		super.init();
-//		final BayeuxServer bayeux = (BayeuxServer) getServletContext().getAttribute(BayeuxServer.ATTRIBUTE);
-//		new IsochroneService(bayeux);
-//	}
-//
-//	@Override
-//	public void service(final ServletRequest request, final ServletResponse response) throws ServletException, IOException {
-//		throw new ServletException();
-//	}
-//}
diff --git a/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java b/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java
index 40031b8c375ba165afbc4a586fc7ee0d9445307a..3acad22936af61f414d0e03981a79c121fd88fbc 100644
--- a/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java
+++ b/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java
@@ -1,9 +1,9 @@
 package it.unibz.inf.isoga.coverage;
 
-import it.unibz.inf.isochrone.util.Enums.Mode;
+import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isoga.db.IsogaDatabase;
 import it.unibz.inf.isoga.util.IsogaConfig;
-import it.unibz.inf.isoga.util.SBAUtil;
+import it.unibz.inf.isoga.util.MathHelper;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -110,7 +110,7 @@ public class CoverageBuilder {
 
 		if (!rEdge.equals(rootEdge) && rEdge.isPartial()) {
 			final IsoEdge invertedEdge = island.getInvertedLink(rEdge);
-			if (!SBAUtil.reachedFromBothSides(rEdge, invertedEdge, config.isIncoming())) {
+			if (!MathHelper.reachedFromBothSides(rEdge, invertedEdge, config.isIncoming())) {
 				island.addEdgeOrdinates(rEdge, config.isIncoming());
 				return false;
 			}
@@ -162,13 +162,13 @@ public class CoverageBuilder {
 			final Set<IsoEdge> adjEdges, final boolean useLastPoint) {
 		final TreeMap<Double, IsoEdge> angleLinks = new TreeMap<Double, IsoEdge>();
 		final TreeMap<Double, List<IsoEdge>> duplicates = new TreeMap<Double, List<IsoEdge>>();
-		final double referenceAngle = SBAUtil.calculateAngle(useLastPointRef, referenceEdge);
+		final double referenceAngle = MathHelper.calculateAngle(useLastPointRef, referenceEdge);
 		for (final IsoEdge currentLink : adjEdges) {
 			if (!currentLink.equals(referenceEdge)) {
 				if (currentLink.inverted(referenceEdge)) {
 					angleLinks.put((double) FULL_CIRCLE_DEGREE, currentLink);
 				} else {
-					final double angle = SBAUtil.calcultateRelativeAngle(SBAUtil.calculateAngle(useLastPoint, currentLink),
+					final double angle = MathHelper.calcultateRelativeAngle(MathHelper.calculateAngle(useLastPoint, currentLink),
 							referenceAngle);
 					final IsoEdge previous = angleLinks.put(angle, currentLink);
 					if (previous != null) {
@@ -185,7 +185,7 @@ public class CoverageBuilder {
 
 		for (final List<IsoEdge> links : duplicates.values()) {
 			for (final IsoEdge pLink : links) {
-				final double currentAngle = SBAUtil.calculateAngleFiner(referenceEdge, pLink);
+				final double currentAngle = MathHelper.calculateAngleFiner(referenceEdge, pLink);
 				angleLinks.put(currentAngle, pLink);
 			}
 		}
diff --git a/src/main/java/it/unibz/inf/isoga/coverage/GeoIsochrone.java b/src/main/java/it/unibz/inf/isoga/coverage/GeoIsochrone.java
index 29c5138c087a961c285a6b96bc60c2922a304913..fc5d705998a6c10fc957985c8603902257d8bbb2 100644
--- a/src/main/java/it/unibz/inf/isoga/coverage/GeoIsochrone.java
+++ b/src/main/java/it/unibz/inf/isoga/coverage/GeoIsochrone.java
@@ -2,7 +2,7 @@ package it.unibz.inf.isoga.coverage;
 
 import it.unibz.inf.isochrone.util.Point;
 import it.unibz.inf.isoga.geometry.AbstractLineString;
-import it.unibz.inf.isoga.util.SBAUtil;
+import it.unibz.inf.isoga.util.MathHelper;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -31,7 +31,7 @@ public class GeoIsochrone {
 
 	public void addEdge(final IsoEdge edge, final boolean incoming) {
 		if (sourceEdge == null
-				|| (SBAUtil.reachedFromBothSides(edge, invertedEdges.get(edge.getID()), incoming) && sourceEdge.getGeometry().compareTo(
+				|| (MathHelper.reachedFromBothSides(edge, invertedEdges.get(edge.getID()), incoming) && sourceEdge.getGeometry().compareTo(
 						edge.getGeometry()) > -1)) {
 			sourceEdge = edge;
 		}
@@ -84,7 +84,7 @@ public class GeoIsochrone {
 				if (srcEdge == null) {
 					srcEdge = edge;
 				} else {
-					if (!SBAUtil.reachedFromBothSides(edge, edge.getInvertedEdge(), incoming)) {
+					if (!MathHelper.reachedFromBothSides(edge, edge.getInvertedEdge(), incoming)) {
 						if (srcEdge.getGeometry().compareTo(edge.getGeometry()) > -1) {
 							srcEdge = edge;
 						}
diff --git a/src/main/java/it/unibz/inf/isoga/db/DbUtility.java b/src/main/java/it/unibz/inf/isoga/db/DbUtility.java
index 9419bae62bd966d860419264c877b98d0c248925..c91efc62a1edd0000dea0c7bb4437a912e4b0fb6 100644
--- a/src/main/java/it/unibz/inf/isoga/db/DbUtility.java
+++ b/src/main/java/it/unibz/inf/isoga/db/DbUtility.java
@@ -2,7 +2,7 @@ package it.unibz.inf.isoga.db;
 
 import it.unibz.inf.isoga.network.RouteEntity;
 import it.unibz.inf.isoga.util.IsogaConfig;
-import it.unibz.inf.isoga.util.JSONConstants;
+import it.unibz.inf.isoga.util.JsonConstants;
 
 import java.sql.CallableStatement;
 import java.sql.Connection;
@@ -89,11 +89,10 @@ public final class DbUtility {
 				+ " USING GIST(\"GEOMETRY\")");
 	}
 
-	public static void dropAllResultTables(final Connection connection, final String regex) {
+	public static void dropTablesByRegexp(final Connection connection, final String regex) {
 		CallableStatement prepareCall = null;
 		try {
-			prepareCall = connection.prepareCall("{call dropTables('public', '%"
-					+ regex + "%')}");
+			prepareCall = connection.prepareCall("{call dropTables('public', '" + regex + "')}");
 			prepareCall.executeUpdate();
 			connection.commit();
 		} catch (final SQLException e) {
@@ -108,8 +107,7 @@ public final class DbUtility {
 		}
 	}
 
-	public static void deleteGeometryMetadata(final Connection connection,
-			final TableEntry tableEntry) {
+	public static void deleteGeometryMetadata(final Connection connection, final TableEntry tableEntry) {
 		CallableStatement prepareCall = null;
 		try {
 			prepareCall = connection.prepareCall("{call DropGeometryTable(?)}");
@@ -144,154 +142,159 @@ public final class DbUtility {
 				+ " PRIMARY KEY (\"ID\"))");
 	}
 
-	public static JSONObject getPoiFeatures(final String sqlExpr, final IsogaConfig config)
-			throws JSONException {
+	public static JSONObject getPoiFeatures(final String sqlExpr, final IsogaConfig config) throws JSONException {
 		final JSONObject jsonObj = new JSONObject();
 		if (sqlExpr.equals("noResult")) {
-			jsonObj.put(JSONConstants.TYPE, "invalid");
-		} else {
-			Statement stmt = null;
-			ResultSet rSet = null;
-			final Connection connection = config.getConnection();
+			jsonObj.put(JsonConstants.TYPE, "invalid");
+			return jsonObj;
+		}
+
+		final Connection connection = config.getConnection();
+
+		Statement stmt = null;
+		ResultSet rSet = null;
+		try {
+			stmt = connection.createStatement();
+			rSet = stmt.executeQuery(sqlExpr);
+
+			final JSONObject jsonResult = new JSONObject();
+			jsonResult.put(JsonConstants.TYPE, JsonConstants.FEATURECOLLECTION);
+			final JSONArray features = new JSONArray();
+			while (rSet.next()) {
+				final JSONObject feature = new JSONObject();
+				feature.put(JsonConstants.TYPE, JsonConstants.FEATURE_TYPE_VALUE);
+				final JSONObject properties = new JSONObject();
+				properties.put("category", rSet.getString("category"));
+				properties.put("cat_type", rSet.getString("category"));
+				feature.put(JsonConstants.PROPERTIES, properties);
+				final JSONObject geoJSON = new JSONObject(rSet.getString("GEOMETRY"));
+				feature.put(JsonConstants.TYPE_GEOMETRY, geoJSON);
+				features.put(feature);
+			}
+			jsonResult.put(JsonConstants.FEATURES, features);
+			jsonObj.put(JsonConstants.TYPE, "FeatureCollection");
+			jsonObj.put("featureCollection", jsonResult);
+			jsonObj.put("featureSize", features.length());
+		} catch (final SQLException e) {
+			e.printStackTrace();
 			try {
-				stmt = connection.createStatement();
-				rSet = stmt.executeQuery(sqlExpr);
-
-				final JSONObject jsonResult = new JSONObject();
-				jsonResult.put(JSONConstants.TYPE, JSONConstants.FEATURECOLLECTION);
-				final JSONArray features = new JSONArray();
-				while (rSet.next()) {
-					final JSONObject feature = new JSONObject();
-					feature.put(JSONConstants.TYPE, JSONConstants.FEATURE_TYPE_VALUE);
-					final JSONObject properties = new JSONObject();
-					properties.put("category", rSet.getString("category"));
-					properties.put("cat_type", rSet.getString("category"));
-					feature.put(JSONConstants.PROPERTIES, properties);
-					final JSONObject geoJSON = new JSONObject(rSet.getString("GEOMETRY"));
-					feature.put(JSONConstants.TYPE_GEOMETRY, geoJSON);
-					features.put(feature);
-				}
-				jsonResult.put(JSONConstants.FEATURES, features);
-				jsonObj.put(JSONConstants.TYPE, "FeatureCollection");
-				jsonObj.put("featureCollection", jsonResult);
-				jsonObj.put("featureSize", features.length());
-			} catch (final SQLException e) {
-				e.printStackTrace();
-				try {
-					connection.rollback();
-				} catch (final SQLException e1) {
-					e1.printStackTrace();
-				}
-			} catch (final JSONException e) {
-				e.printStackTrace();
-			} finally {
-				DbUtils.closeQuietly(rSet);
-				DbUtils.closeQuietly(stmt);
+				connection.rollback();
+			} catch (final SQLException e1) {
+				e1.printStackTrace();
 			}
+		} catch (final JSONException e) {
+			e.printStackTrace();
+		} finally {
+			DbUtils.closeQuietly(rSet);
+			DbUtils.closeQuietly(stmt);
 		}
+
 		return jsonObj;
 	}
 
 	public static JSONObject spatialIntersection2JSON(final String sqlExpr, final boolean isSum, final IsogaConfig config) throws JSONException {
 		final JSONObject jsonObj = new JSONObject();
-		final Connection connection = config.getConnection();
 		if (sqlExpr.equals("noResult")) {
-			jsonObj.put(JSONConstants.TYPE, "invalid");
-		} else {
-			Statement stmt = null;
-			ResultSet rSet = null;
-			try {
-				stmt = connection.createStatement();
-
-				rSet = stmt.executeQuery(sqlExpr);
-				final ResultSetMetaData rSetMeta = rSet.getMetaData();
-
-				final JSONArray columnLabels = new JSONArray();
-				for (short i = 1; i <= rSetMeta.getColumnCount(); i++) {
-					final String columnLabel = rSetMeta.getColumnLabel(i);
-					if (!columnLabel.equalsIgnoreCase("geometry")) {
-						final JSONObject meta = new JSONObject();
-						meta.put(JSONConstants.LABEL, rSetMeta.getColumnLabel(i));
-						meta.put(JSONConstants.TYPE, DbHelper.getType(rSetMeta.getColumnType(i)));
-						columnLabels.put(meta);
-					}
+			jsonObj.put(JsonConstants.TYPE, "invalid");
+			return jsonObj;
+		}
+
+		final Connection connection = config.getConnection();
+
+		Statement stmt = null;
+		ResultSet rSet = null;
+		try {
+			stmt = connection.createStatement();
+
+			rSet = stmt.executeQuery(sqlExpr);
+			final ResultSetMetaData rSetMeta = rSet.getMetaData();
+
+			final JSONArray columnLabels = new JSONArray();
+			for (short i = 1; i <= rSetMeta.getColumnCount(); i++) {
+				final String columnLabel = rSetMeta.getColumnLabel(i);
+				if (!columnLabel.equalsIgnoreCase("geometry")) {
+					final JSONObject meta = new JSONObject();
+					meta.put(JsonConstants.LABEL, rSetMeta.getColumnLabel(i));
+					meta.put(JsonConstants.TYPE, DbHelper.getType(rSetMeta.getColumnType(i)));
+					columnLabels.put(meta);
 				}
-				jsonObj.put("columnLabels", columnLabels);
-
-				final JSONObject jsonResult = new JSONObject();
-				jsonResult.put(JSONConstants.TYPE, JSONConstants.FEATURECOLLECTION);
-				final JSONArray features = new JSONArray();
-				int sum = isSum ? 0 : -1;
-				while (rSet.next()) {
-					final JSONObject feature = new JSONObject();
-					feature.put(JSONConstants.TYPE, JSONConstants.FEATURE_TYPE_VALUE);
-					final JSONObject properties = new JSONObject();
-					for (int i = 1; i <= rSetMeta.getColumnCount(); i++) {
-						if (rSetMeta.getColumnLabel(i).equals("geometry")) {
-							final String geo = rSet.getString(i);
-							final JSONObject geoJSON = new JSONObject(geo);
-							feature.put(JSONConstants.TYPE_GEOMETRY, geoJSON);
-						} else {
-							switch (rSetMeta.getColumnType(i)) {
-							case Types.INTEGER:
-							case Types.SMALLINT:
-							case Types.NUMERIC:
-								properties.put(rSetMeta.getColumnLabel(i), rSet.getInt(i));
-								if (isSum) {
-									sum += rSet.getInt(i);
-								}
-								break;
-							case Types.BIGINT:
-								properties.put(rSetMeta.getColumnLabel(i), rSet.getLong(i));
-								if (isSum) {
-									sum += rSet.getInt(i);
-								}
-								break;
-							case Types.FLOAT:
-								properties.put(rSetMeta.getColumnLabel(i), rSet.getFloat(i));
-								if (isSum) {
-									sum += rSet.getInt(i);
-								}
-								break;
-							case Types.DOUBLE:
-								properties.put(rSetMeta.getColumnLabel(i), rSet.getDouble(i));
-								if (isSum) {
-									sum += rSet.getInt(i);
-								}
-								break;
-							case Types.VARCHAR:
-								properties.put(rSetMeta.getColumnLabel(i), rSet.getString(i));
-								break;
-							default:
-								System.out.println("Ignoring column with label + "
-										+ rSetMeta.getColumnLabel(i));
+			}
+			jsonObj.put("columnLabels", columnLabels);
+
+			final JSONObject jsonResult = new JSONObject();
+			jsonResult.put(JsonConstants.TYPE, JsonConstants.FEATURECOLLECTION);
+			final JSONArray features = new JSONArray();
+			int sum = isSum ? 0 : -1;
+			while (rSet.next()) {
+				final JSONObject feature = new JSONObject();
+				feature.put(JsonConstants.TYPE, JsonConstants.FEATURE_TYPE_VALUE);
+				final JSONObject properties = new JSONObject();
+				for (int i = 1; i <= rSetMeta.getColumnCount(); i++) {
+					if (rSetMeta.getColumnLabel(i).equals("geometry")) {
+						final String geo = rSet.getString(i);
+						final JSONObject geoJSON = new JSONObject(geo);
+						feature.put(JsonConstants.TYPE_GEOMETRY, geoJSON);
+					} else {
+						switch (rSetMeta.getColumnType(i)) {
+						case Types.INTEGER:
+						case Types.SMALLINT:
+						case Types.NUMERIC:
+							properties.put(rSetMeta.getColumnLabel(i), rSet.getInt(i));
+							if (isSum) {
+								sum += rSet.getInt(i);
+							}
+							break;
+						case Types.BIGINT:
+							properties.put(rSetMeta.getColumnLabel(i), rSet.getLong(i));
+							if (isSum) {
+								sum += rSet.getInt(i);
+							}
+							break;
+						case Types.FLOAT:
+							properties.put(rSetMeta.getColumnLabel(i), rSet.getFloat(i));
+							if (isSum) {
+								sum += rSet.getInt(i);
 							}
+							break;
+						case Types.DOUBLE:
+							properties.put(rSetMeta.getColumnLabel(i), rSet.getDouble(i));
+							if (isSum) {
+								sum += rSet.getInt(i);
+							}
+							break;
+						case Types.VARCHAR:
+							properties.put(rSetMeta.getColumnLabel(i), rSet.getString(i));
+							break;
+						default:
+							System.out.println("Ignoring column with label + "
+									+ rSetMeta.getColumnLabel(i));
 						}
 					}
-					feature.put(JSONConstants.PROPERTIES, properties);
-					features.put(feature);
-				}
-				jsonResult.put(JSONConstants.FEATURES, features);
-				jsonObj.put("type", "FeatureCollection");
-				jsonObj.put("featureCollection", jsonResult);
-				if (sum == -1) {
-					jsonObj.put("joinedCount", features.length());
-				}
-				jsonObj.put("joinedSum", sum);
-			} catch (final SQLException e) {
-				e.printStackTrace();
-				try {
-					connection.rollback();
-				} catch (final SQLException e1) {
-					e1.printStackTrace();
 				}
-			} catch (final JSONException e) {
-				e.printStackTrace();
-			} finally {
-				DbUtils.closeQuietly(rSet);
-				DbUtils.closeQuietly(stmt);
+				feature.put(JsonConstants.PROPERTIES, properties);
+				features.put(feature);
 			}
+			jsonResult.put(JsonConstants.FEATURES, features);
+			jsonObj.put("type", "FeatureCollection");
+			jsonObj.put("featureCollection", jsonResult);
+			if (sum == -1) {
+				jsonObj.put("joinedCount", features.length());
+			}
+			jsonObj.put("joinedSum", sum);
+		} catch (final SQLException e) {
+			e.printStackTrace();
+			try {
+				connection.rollback();
+			} catch (final SQLException e1) {
+				e1.printStackTrace();
+			}
+		} catch (final JSONException e) {
+			e.printStackTrace();
+		} finally {
+			DbUtils.closeQuietly(rSet);
+			DbUtils.closeQuietly(stmt);
 		}
+
 		return jsonObj;
 	}
 
@@ -323,6 +326,7 @@ public final class DbUtility {
 			DbUtils.closeQuietly(rSet);
 			DbUtils.closeQuietly(stmt);
 		}
+
 		return statistics;
 	}
 
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 bca206d3f3747b615f459f79300e9b60f674e4b0..828ab07948dde8959eec6319f8bb70115eb12279 100644
--- a/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java
+++ b/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java
@@ -4,15 +4,15 @@ import it.unibz.inf.isochrone.db.Database;
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Location;
 import it.unibz.inf.isochrone.network.Node;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 import it.unibz.inf.isochrone.util.Point;
 import it.unibz.inf.isoga.coverage.IsoEdge;
 import it.unibz.inf.isoga.datastructure.QueryPoint;
 import it.unibz.inf.isoga.geometry.AbstractLineString;
-import it.unibz.inf.isoga.geometry.PGLineString;
+import it.unibz.inf.isoga.geometry.PgLineString;
 import it.unibz.inf.isoga.network.Schedule;
 import it.unibz.inf.isoga.util.IsogaConfig;
-import it.unibz.inf.isoga.util.PGUtil;
+import it.unibz.inf.isoga.util.PgHelper;
 import it.unibz.inf.isoga.util.QueryPointCache;
 
 import java.sql.Connection;
@@ -159,7 +159,7 @@ public class IsogaDatabase extends Database {
 				final PGgeometry pgGeometry = (PGgeometry) resultSet.getObject("GEOMETRY");
 				AbstractLineString geometry = null;
 				if (pgGeometry.getGeoType() == Geometry.LINESTRING) {
-					geometry = new PGLineString((LineString) pgGeometry.getGeometry());
+					geometry = new PgLineString((LineString) pgGeometry.getGeometry());
 				}
 
 				final IsoEdge edge = new IsoEdge(edgeId, sourceId, targetId, length, adjNodeDistance, geometry);
@@ -203,7 +203,7 @@ public class IsogaDatabase extends Database {
 	public void storeArea(final int areaId, final List<Point> points, final double bufferSize) {
 		String geometryString;
 
-		final LinearRing linearRing = new LinearRing(PGUtil.asPGPoints(points));
+		final LinearRing linearRing = new LinearRing(PgHelper.asPGPoints(points));
 		final Polygon polygon = new Polygon(new LinearRing[] {linearRing});
 		geometryString = polygon.getTypeString() + polygon.getValue();
 
diff --git a/src/main/java/it/unibz/inf/isoga/db/SQLQuery.java b/src/main/java/it/unibz/inf/isoga/db/SqlQuery.java
similarity index 97%
rename from src/main/java/it/unibz/inf/isoga/db/SQLQuery.java
rename to src/main/java/it/unibz/inf/isoga/db/SqlQuery.java
index c29388ec520b8fb3c3d684c9588fbd5198d611b3..60eed3985d3fb9ed52d4afc0667b2f36fbbcc61e 100644
--- a/src/main/java/it/unibz/inf/isoga/db/SQLQuery.java
+++ b/src/main/java/it/unibz/inf/isoga/db/SqlQuery.java
@@ -1,6 +1,6 @@
 package it.unibz.inf.isoga.db;
 
-import it.unibz.inf.isochrone.util.Enums.QueryType;
+import it.unibz.inf.isochrone.util.EnumContainer.QueryType;
 import it.unibz.inf.isoga.util.IsogaConfig;
 
 import java.util.HashSet;
@@ -10,7 +10,7 @@ import java.util.Set;
 /**
  * Generates SQL Queries.
  */
-public class SQLQuery {
+public class SqlQuery {
 	private static final char ALIAS_COV = 'X';
 	private boolean queryable = false;
 	private final String coverageTable;
@@ -25,7 +25,7 @@ public class SQLQuery {
 	private String fromClause;
 	private String whereClause;
 
-	public SQLQuery(final String sqlExpr, final String coverageTable, final String spatialPredicate) {
+	public SqlQuery(final String sqlExpr, final String coverageTable, final String spatialPredicate) {
 		queryable = sqlExpr.startsWith("select");
 		this.spatialPredicate = spatialPredicate;
 		this.coverageTable = coverageTable;
diff --git a/src/main/java/it/unibz/inf/isoga/db/TableEntry.java b/src/main/java/it/unibz/inf/isoga/db/TableEntry.java
index dc19f640ddce6926f5e6e316c8746381d35f51c0..1421ef723d8d8e06cb049c7d32b90236b96be65e 100644
--- a/src/main/java/it/unibz/inf/isoga/db/TableEntry.java
+++ b/src/main/java/it/unibz/inf/isoga/db/TableEntry.java
@@ -1,6 +1,6 @@
 package it.unibz.inf.isoga.db;
 
-import it.unibz.inf.isochrone.util.Enums.TableType;
+import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 
 /**
  * Describes a database table for the isoga web interface.
diff --git a/src/main/java/it/unibz/inf/isoga/geometry/PGLineString.java b/src/main/java/it/unibz/inf/isoga/geometry/PgLineString.java
similarity index 75%
rename from src/main/java/it/unibz/inf/isoga/geometry/PGLineString.java
rename to src/main/java/it/unibz/inf/isoga/geometry/PgLineString.java
index 320cd6e287b81db1439fa410199dfdba99dc0fd3..59a8f1e09c4fb723a67664c60272f2a81985bb7a 100644
--- a/src/main/java/it/unibz/inf/isoga/geometry/PGLineString.java
+++ b/src/main/java/it/unibz/inf/isoga/geometry/PgLineString.java
@@ -1,8 +1,8 @@
 package it.unibz.inf.isoga.geometry;
 
 import it.unibz.inf.isochrone.util.Point;
-import it.unibz.inf.isoga.util.PGUtil;
-import it.unibz.inf.isoga.util.SBAUtil;
+import it.unibz.inf.isoga.util.PgHelper;
+import it.unibz.inf.isoga.util.MathHelper;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -15,11 +15,11 @@ import org.postgis.LineString;
  * @author <a href="mailto:markus.innerebner@inf.unibz.it">Markus Innerebner</a>.
  * @version 2.2
  */
-public class PGLineString extends AbstractLineString {
+public class PgLineString extends AbstractLineString {
 	private final LineString geometry;
 	private final BBox bbox;
 
-	public PGLineString(final LineString geometry) {
+	public PgLineString(final LineString geometry) {
 		this.geometry = geometry;
 		points = new Point[geometry.getPoints().length];
 		double minX = Double.MAX_VALUE, minY = Double.MAX_VALUE, maxX = Double.MIN_VALUE, maxY = Double.MIN_VALUE;
@@ -36,7 +36,7 @@ public class PGLineString extends AbstractLineString {
 
 	@Override
 	public AbstractLineString reverse() {
-		return new PGLineString(geometry.reverse());
+		return new PgLineString(geometry.reverse());
 	}
 
 	@Override
@@ -54,8 +54,8 @@ public class PGLineString extends AbstractLineString {
 		Point current = other.getFirstPoint();
 		mergedPoints.add(current);
 		for (i = 1; i < sum; i++) {
-			final double thisDist = cThis < numPoints() ? SBAUtil.eucideanDist(current, getPoint(cThis)) : Double.MAX_VALUE;
-			final double otherDist = cOther < other.numPoints() ? SBAUtil.eucideanDist(current, other.getPoint(cOther)) :  Double.MAX_VALUE;
+			final double thisDist = cThis < numPoints() ? MathHelper.eucideanDist(current, getPoint(cThis)) : Double.MAX_VALUE;
+			final double otherDist = cOther < other.numPoints() ? MathHelper.eucideanDist(current, other.getPoint(cOther)) :  Double.MAX_VALUE;
 			if (thisDist < otherDist) {
 				current = getPoint(cThis++);
 			} else if (thisDist > otherDist) {
@@ -67,7 +67,7 @@ public class PGLineString extends AbstractLineString {
 			}
 			mergedPoints.add(current);
 		}
-		return new PGLineString(new LineString(PGUtil.asPGPoints(mergedPoints)));
+		return new PgLineString(new LineString(PgHelper.asPGPoints(mergedPoints)));
 	}
 
 	public LineString getGeometry() {
@@ -76,8 +76,8 @@ public class PGLineString extends AbstractLineString {
 
 	@Override
 	public int compareTo(final AbstractLineString other) {
-		if (other instanceof PGLineString) {
-			return bbox.compareTo(((PGLineString) other).bbox);
+		if (other instanceof PgLineString) {
+			return bbox.compareTo(((PgLineString) other).bbox);
 		}
 
 		return super.compareTo(other);
@@ -99,7 +99,7 @@ public class PGLineString extends AbstractLineString {
 			return false;
 		}
 
-		PGLineString other = (PGLineString) obj;
+		PgLineString other = (PgLineString) obj;
 		if (bbox == null) {
 			return other.bbox == null;
 		}
diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java b/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java
index 4ae20629149f73cf42fc2274d2cd1fc5674ca40b..32c80827bfef80ac88743b493cdc4a6040b176df 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java
@@ -2,7 +2,7 @@ package it.unibz.inf.isoga.service;
 
 
 import it.unibz.inf.isochrone.util.Config;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
+import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isoga.util.DSetConfig;
 import it.unibz.inf.isoga.util.IsogaConfig;
 import it.unibz.inf.isoga.websocket.SocketConfiguration;
@@ -36,33 +36,30 @@ public class ServiceConfiguration extends AbstractService {
 		socketConfig.setClientConfig(clientId, config);
 
 		final JSONArray allClientDatasets = new JSONArray();
-		for (final DSetConfig dsetConfig : socketConfig.getAllClientDatasetConfigs()) {
-			try {
-				final DSetConfig dsetCfg = (DSetConfig) dsetConfig.clone();
-				dsetCfg.appendSessionId(clientId);
-				socketConfig.setClientDataset(clientId, dsetCfg);
-				allClientDatasets.put(dsetCfg.toJSON());
-			} catch (CloneNotSupportedException e) {
-				e.printStackTrace();
-			}
+		for (final DSetConfig defaultDSetConfig : socketConfig.getDatasetConfigurations()) {
+			final DSetConfig clientDSetConfig = (DSetConfig) defaultDSetConfig.clone();
+			clientDSetConfig.appendTableSuffix(clientId);
+			socketConfig.setClientDSetConfig(clientId, clientDSetConfig);
+			allClientDatasets.put(clientDSetConfig.toJSON());
 		}
 
-		final JSONObject jsonConfig = new JSONObject();
-		jsonConfig.put("messageType", "configuration");
-		jsonConfig.put("defaultDatasets", allClientDatasets);
-		jsonConfig.put("mapserverUrl", globalConfig.getProperty("rendering.server.url"));
-		jsonConfig.put("version", globalConfig.getProperty("version"));
-
 		preregisterDatasets(clientId, globalConfig);
 
-		return jsonConfig;
+		final JSONObject resultJson = new JSONObject();
+		resultJson.put("messageType", "configuration");
+		resultJson.put("defaultDatasets", allClientDatasets);
+		resultJson.put("mapserverUrl", globalConfig.getProperty("rendering.server.url"));
+		resultJson.put("version", globalConfig.getProperty("version"));
+
+		return resultJson;
 	}
 
 	private void preregisterDatasets(final String clientId, final Config config) {
 		final Connection connection = config.getConnection();
 
-		for (Dataset dSet : PREREGISTERING_DATASETS) {
-			socketConfig.registerLayers(connection, socketConfig.getClientDataset(clientId).get(dSet));
+		for (Dataset dataset : PREREGISTERING_DATASETS) {
+			final DSetConfig clientDSetConfig = socketConfig.getClientDatasetConfig(clientId, dataset);
+			socketConfig.registerLayers(connection, clientDSetConfig);
 		}
 	}
 
diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java b/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java
index 51dfec74e328611743613fdc3c6b03f109bea5e0..03c33085d241649f37cb7e6cd4313306a4f2071f 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java
@@ -30,13 +30,14 @@ public class ServiceFeatureInfo extends AbstractService {
 
 	@Override
 	public JSONObject onJsonMessage(final Session session, final JSONObject jsonObject) {
+		final int stopId = jsonObject.getInt("stopId");
+
 		final String clientId = session.getId();
 		final IsogaConfig config = socketConfig.getClientConfig(clientId);
-		final long stopId = (Long) jsonObject.get("stopId");
 		final JSONObject result = new JSONObject();
 
 		try {
-			final SortedMap<Calendar, RouteEntity> schedules = DbUtility.getVertexAnnotation(config, (int) stopId);
+			final SortedMap<Calendar, RouteEntity> schedules = DbUtility.getVertexAnnotation(config, stopId);
 			final JSONArray rows = new JSONArray();
 
 			for (final RouteEntity routeEntity : schedules.values()) {
diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
index 6876c2d0276e4f11f2d5372f9121ae60e54ed647..1f85e39bdb2e66520b0c865e630c205f945f6dc9 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
@@ -6,9 +6,9 @@ import it.unibz.inf.isochrone.algorithm.MDijkstra;
 import it.unibz.inf.isochrone.algorithm.MineX;
 import it.unibz.inf.isochrone.algorithm.MrneX;
 import it.unibz.inf.isochrone.network.Location;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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.Query;
 import it.unibz.inf.isoga.coverage.CoverageBuilder;
 import it.unibz.inf.isoga.datastructure.QueryPoint;
@@ -17,7 +17,7 @@ import it.unibz.inf.isoga.db.IsogaDatabase;
 import it.unibz.inf.isoga.network.MemoryBBoxOutput;
 import it.unibz.inf.isoga.util.DSetConfig;
 import it.unibz.inf.isoga.util.IsogaConfig;
-import it.unibz.inf.isoga.util.JSONConstants;
+import it.unibz.inf.isoga.util.JsonConstants;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -115,10 +115,9 @@ public class ServiceIsochrone extends AbstractService {
 		final IsogaConfig config = socketConfig.getClientConfig(clientId);
 		appendProperties(config, cfgFile, session);
 
-		final DSetConfig dSetConfig = socketConfig.getClientDataset(clientId).get(dataset);
+		final DSetConfig dSetConfig = socketConfig.getClientDatasetConfig(clientId, dataset);
 		if (!dSetConfig.isRegistered()) {
-			final Connection connection = config.getConnection();
-			socketConfig.registerLayers(connection, dSetConfig);
+			socketConfig.registerLayers(config.getConnection(), dSetConfig);
 		}
 		config.setDestinationEdgeTableEntry(dSetConfig.getEdgeTableEntry());
 		config.setDestinationVertexTableEntry(dSetConfig.getVertexTableEntry());
@@ -165,15 +164,15 @@ public class ServiceIsochrone extends AbstractService {
 				try {
 					if (expirationMode) {
 						final long totalComputationTime = System.currentTimeMillis() - start;
-						jsonObj.put(JSONConstants.STATUS, "finished");
-						jsonObj.put(JSONConstants.BBOX, output.getBoundingBox(config).toJSON());
+						jsonObj.put(JsonConstants.STATUS, "finished");
+						jsonObj.put(JsonConstants.BBOX, output.getBoundingBox(config).toJSON());
 						final JSONObject log = new JSONObject();
 						log.put("timeComputation", totalComputationTime);
 						log.put("timeMineX", timeMineX);
-						jsonObj.put(JSONConstants.LOGGING, log);
+						jsonObj.put(JsonConstants.LOGGING, log);
 //						deliver(getSession(), client, message.getChannel(), jsonObj, false);
 					} else {
-						jsonObj.put(JSONConstants.STATUS, "coveraging");
+						jsonObj.put(JsonConstants.STATUS, "coveraging");
 //						deliver(getSession(), client, message.getChannel(), jsonObj, false);
 						final long bufferDistance = 20;
 						final long start1 = System.currentTimeMillis();
@@ -187,14 +186,14 @@ public class ServiceIsochrone extends AbstractService {
 						}
 						final long timeCoveraging = System.currentTimeMillis() - start1;
 
-						jsonObj.put(JSONConstants.STATUS, "finished");
-						jsonObj.put(JSONConstants.BBOX, output.getBoundingBox(config).toJSON());
+						jsonObj.put(JsonConstants.STATUS, "finished");
+						jsonObj.put(JsonConstants.BBOX, output.getBoundingBox(config).toJSON());
 						final JSONObject log = new JSONObject();
 						final long totalComputationTime = System.currentTimeMillis() - start;
 						log.put("timeComputation", totalComputationTime);
 						log.put("timeCoveraging", timeCoveraging);
 						log.put("timeMineX", timeMineX);
-						jsonObj.put(JSONConstants.LOGGING, log);
+						jsonObj.put(JsonConstants.LOGGING, log);
 //						deliver(getSession(), client, message.getChannel(), jsonObj, false);
 					}
 				} catch (final JSONException e) {
diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java b/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java
index 49e45edfb8dad3529d654bd1d59646eac3d72eb7..5c9e5962a796b2489b629833374d6ed20d98d7dc 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java
@@ -1,11 +1,11 @@
 package it.unibz.inf.isoga.service;
 
 
-import it.unibz.inf.isochrone.util.Enums.QueryType;
+import it.unibz.inf.isochrone.util.EnumContainer.QueryType;
 import it.unibz.inf.isoga.db.DbUtility;
-import it.unibz.inf.isoga.db.SQLQuery;
+import it.unibz.inf.isoga.db.SqlQuery;
 import it.unibz.inf.isoga.util.IsogaConfig;
-import it.unibz.inf.isoga.util.JSONConstants;
+import it.unibz.inf.isoga.util.JsonConstants;
 
 import java.util.List;
 
@@ -37,13 +37,13 @@ public class ServiceWps extends AbstractService {
 		final String spatialPredicate = ((String) jsonObject.get("spatialPredicate")).trim();
 		final IsogaConfig config = socketConfig.getClientConfig(clientId);
 
-		final SQLQuery query = new SQLQuery(sqlMessage, coverageTable, spatialPredicate);
+		final SqlQuery query = new SqlQuery(sqlMessage, coverageTable, spatialPredicate);
 		JSONObject root = null;
 		try {
 
 			if (query.getQueryType().equals(QueryType.INVALID)) {
 				root = new JSONObject();
-				root.put(JSONConstants.QUERYTYPE, QueryType.INVALID.toString().toLowerCase());
+				root.put(JsonConstants.QUERYTYPE, QueryType.INVALID.toString().toLowerCase());
 			} else {
 				final String spatialQuery = query.getSpatialQueryString(config);
 				JSONObject statistics = null;
@@ -65,7 +65,7 @@ public class ServiceWps extends AbstractService {
 					statistics.put(key, root.get(key));
 				}
 
-				root.put(JSONConstants.STATISTICS, statistics);
+				root.put(JsonConstants.STATISTICS, statistics);
 				root.put("queryType", query.getQueryType());
 			}
 		} catch (final JSONException e) {
diff --git a/src/main/java/it/unibz/inf/isoga/service/SevicePoiFeature.java b/src/main/java/it/unibz/inf/isoga/service/SevicePoiFeature.java
index 42d960f1c93a142836168191b715556be6174f41..330e1c769ce88c4ace0b43a33a16e5acffa89d67 100644
--- a/src/main/java/it/unibz/inf/isoga/service/SevicePoiFeature.java
+++ b/src/main/java/it/unibz/inf/isoga/service/SevicePoiFeature.java
@@ -3,7 +3,7 @@ package it.unibz.inf.isoga.service;
 
 import it.unibz.inf.isoga.db.DbUtility;
 import it.unibz.inf.isoga.util.IsogaConfig;
-import it.unibz.inf.isoga.util.JSONConstants;
+import it.unibz.inf.isoga.util.JsonConstants;
 
 import java.util.List;
 
@@ -37,7 +37,7 @@ public class SevicePoiFeature extends AbstractService {
 		JSONObject poiFeatures = new JSONObject();
 		try {
 			if (!sqlMessage.toUpperCase().startsWith("SELECT")) {
-				poiFeatures.put(JSONConstants.TYPE, "No result");
+				poiFeatures.put(JsonConstants.TYPE, "No result");
 			} else {
 				poiFeatures = DbUtility.getPoiFeatures(sqlMessage, config);
 			}
diff --git a/src/main/java/it/unibz/inf/isoga/util/DSetConfig.java b/src/main/java/it/unibz/inf/isoga/util/DSetConfig.java
index b04f1a1c28c2d8b0322311db924bdc55043327c6..49597e2630386aa6ca633cbdc2fcf5942cfb49d4 100644
--- a/src/main/java/it/unibz/inf/isoga/util/DSetConfig.java
+++ b/src/main/java/it/unibz/inf/isoga/util/DSetConfig.java
@@ -1,7 +1,7 @@
 package it.unibz.inf.isoga.util;
 
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.TableType;
+import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
+import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 import it.unibz.inf.isochrone.util.Point;
 import it.unibz.inf.isoga.db.TableEntry;
 import it.unibz.inf.isoga.geometry.BBox;
@@ -92,7 +92,7 @@ public class DSetConfig implements Cloneable {
 			bboxValArray.put(clientMBR.getMinY());
 			bboxValArray.put(clientMBR.getMaxX());
 			bboxValArray.put(clientMBR.getMaxY());
-			resultObject.put(JSONConstants.BBOX, bboxValArray);
+			resultObject.put(JsonConstants.BBOX, bboxValArray);
 
 			edgeLayerObject.put("name", edgeTableEntry.getDescription());
 			edgeLayerObject.put("layer", edgeTableEntry.getTableName());
@@ -113,23 +113,21 @@ public class DSetConfig implements Cloneable {
 	}
 
 	@Override
-	public Object clone() throws CloneNotSupportedException {
-		super.clone();
+	public Object clone() {
+		final DSetConfig clonedObject = new DSetConfig(dataset, serverMBR, clientMBR, time, queryPoint, serverSRID, workspace);
+		clonedObject.edgeLayer = edgeLayer;
+		clonedObject.vertexLayer = vertexLayer;
+		clonedObject.vertexAnnotatedTableName = vertexAnnotatedTableName;
+		clonedObject.areaBufferLayer = areaBufferLayer;
 
-		final DSetConfig cfg = new DSetConfig(dataset, serverMBR, clientMBR, time, queryPoint, serverSRID, workspace);
-		cfg.edgeLayer = edgeLayer;
-		cfg.vertexLayer = vertexLayer;
-		cfg.vertexAnnotatedTableName = vertexAnnotatedTableName;
-		cfg.areaBufferLayer = areaBufferLayer;
-
-		return cfg;
+		return clonedObject;
 	}
 
-	public void appendSessionId(final String id) {
-		edgeLayer = appendId(edgeLayer, id);
-		vertexLayer = appendId(vertexLayer, id);
-		areaBufferLayer = appendId(areaBufferLayer, id);
-		vertexAnnotatedTableName = appendId(vertexAnnotatedTableName, id);
+	public void appendTableSuffix(final String suffix) {
+		edgeLayer = appendSuffix(edgeLayer, suffix);
+		vertexLayer = appendSuffix(vertexLayer, suffix);
+		areaBufferLayer = appendSuffix(areaBufferLayer, suffix);
+		vertexAnnotatedTableName = appendSuffix(vertexAnnotatedTableName, suffix);
 
 		edgeTableEntry = new TableEntry(edgeLayer, "sidx_" + edgeLayer, TableType.EDGE);
 		vertexTableEntry = new TableEntry(vertexLayer, "sidx_" + vertexLayer, TableType.VERTEX);
@@ -173,7 +171,7 @@ public class DSetConfig implements Cloneable {
 		return registered;
 	}
 
-	private String appendId(final String layerName, final String id) {
+	private String appendSuffix(final String layerName, final String id) {
 		String name = layerName + "_" + id;
 		if (name.length() > NAME_MAX_LENGTH) {
 			// CHECKSTYLE:OFF MagicNumber
diff --git a/src/main/java/it/unibz/inf/isoga/util/IsogaConfig.java b/src/main/java/it/unibz/inf/isoga/util/IsogaConfig.java
index 1cedf4f4ceb70e5a03d8caa7c227291b8231befb..22cab5d88e36bf8d4e961b9fba300ea7e11a0b4b 100644
--- a/src/main/java/it/unibz/inf/isoga/util/IsogaConfig.java
+++ b/src/main/java/it/unibz/inf/isoga/util/IsogaConfig.java
@@ -1,9 +1,9 @@
 package it.unibz.inf.isoga.util;
 
 import it.unibz.inf.isochrone.util.Config;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.TableType;
+import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
+import it.unibz.inf.isochrone.util.EnumContainer.Direction;
+import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 import it.unibz.inf.isoga.db.TableEntry;
 
 import java.io.InputStream;
@@ -18,13 +18,8 @@ public class IsogaConfig extends Config {
 	private TableEntry destinationVertexTableEntry;
 	private TableEntry destinationVertexAnnotatedTableEntry;
 	private TableEntry destinationAreaBufferTableEntry;
-
 	private Direction direction = Direction.INCOMING;
 
-	public IsogaConfig() {
-		super();
-	}
-
 	public IsogaConfig(final Dataset dataset) {
 		super(dataset);
 	}
@@ -37,16 +32,15 @@ public class IsogaConfig extends Config {
 	@Override
 	public void appendPropertyFile(final InputStream inputStream) {
 		super.appendPropertyFile(inputStream);
-		destinationEdgeTableEntry = new TableEntry(getProperty("tbl.isoLinks"), getProperty("idx.isoLinks"),
-				TableType.EDGE);
+
 		if (densityLimit == Short.MIN_VALUE && getProperty("limit.density") != null) {
 			densityLimit = Short.parseShort(getProperty("limit.density"));
 		}
-		destinationAreaBufferTableEntry = new TableEntry(getProperty("tbl.isoAreaBuffer"),
-				getProperty("idx.isoAreaBuffer"), TableType.COVERAGE);
-		destinationVertexTableEntry = new TableEntry(getProperty("tbl.isoNodes"), getProperty("idx.isoNodes"),
-				TableType.VERTEX);
+
+		destinationEdgeTableEntry = new TableEntry(getProperty("tbl.isoLinks"), getProperty("idx.isoLinks"), TableType.EDGE);
+		destinationAreaBufferTableEntry = new TableEntry(getProperty("tbl.isoAreaBuffer"), getProperty("idx.isoAreaBuffer"), TableType.COVERAGE);
 		destinationVertexAnnotatedTableEntry = new TableEntry(getProperty("tbl.isoNodesAnnotations"));
+		destinationVertexTableEntry = new TableEntry(getProperty("tbl.isoNodes"), getProperty("idx.isoNodes"), TableType.VERTEX);
 	}
 
 	public void setDestinationEdgeTableEntry(final TableEntry destinationEdgeTableEntry) {
diff --git a/src/main/java/it/unibz/inf/isoga/util/JSONConstants.java b/src/main/java/it/unibz/inf/isoga/util/JsonConstants.java
similarity index 94%
rename from src/main/java/it/unibz/inf/isoga/util/JSONConstants.java
rename to src/main/java/it/unibz/inf/isoga/util/JsonConstants.java
index 40e61160d218436cadce932809fcdc2c9c2b20e6..6cde0e6a227810b8c4aafd820aaebebd02515b38 100644
--- a/src/main/java/it/unibz/inf/isoga/util/JSONConstants.java
+++ b/src/main/java/it/unibz/inf/isoga/util/JsonConstants.java
@@ -3,9 +3,9 @@ package it.unibz.inf.isoga.util;
 /**
  * Constants that appear in the JSON for the statistics of the data included in the isochrone.
  */
-public final class JSONConstants {
+public final class JsonConstants {
 
-	private JSONConstants() { }
+	private JsonConstants() { }
 
 	public static final String FEATURE_TYPE = "type";
 	public static final String LAYER = "layer";
diff --git a/src/main/java/it/unibz/inf/isoga/util/SBAUtil.java b/src/main/java/it/unibz/inf/isoga/util/MathHelper.java
similarity index 97%
rename from src/main/java/it/unibz/inf/isoga/util/SBAUtil.java
rename to src/main/java/it/unibz/inf/isoga/util/MathHelper.java
index 1d3ca25bd1d03aadd0fc0146e926f919d1d3a1e8..d54ffcb7bce30fb25b96df8d458572c657dd74ad 100644
--- a/src/main/java/it/unibz/inf/isoga/util/SBAUtil.java
+++ b/src/main/java/it/unibz/inf/isoga/util/MathHelper.java
@@ -6,17 +6,19 @@ import it.unibz.inf.isoga.coverage.IsoEdge;
 /**
  * Mathematical helper functions.
  */
-public final class SBAUtil {
+public final class MathHelper {
 	private static final int FULL_CIRCLE_DEGREE = 360;
 
-	private SBAUtil() { }
+	private MathHelper() { }
 
 	/**
 	 * @param toLink
 	 * @return the angle between the last point and the second last one
 	 */
 	public static double calculateAngle(final boolean fromLast, final IsoEdge toLink) {
-		Point toPoint = null, intermediate = null;
+		Point intermediate = null;
+		Point toPoint = null;
+
 		if (fromLast) {
 			intermediate = toLink.getGeometry().getLastPoint();
 			toPoint = toLink.getGeometry().getPoint(toLink.getGeometry().numPoints() - 2);
@@ -24,6 +26,7 @@ public final class SBAUtil {
 			intermediate = toLink.getGeometry().getFirstPoint();
 			toPoint = toLink.getGeometry().getPoint(1);
 		}
+
 		return calculateAngle(intermediate, toPoint);
 	}
 
diff --git a/src/main/java/it/unibz/inf/isoga/util/PGUtil.java b/src/main/java/it/unibz/inf/isoga/util/PgHelper.java
similarity index 90%
rename from src/main/java/it/unibz/inf/isoga/util/PGUtil.java
rename to src/main/java/it/unibz/inf/isoga/util/PgHelper.java
index e78e771653ce7445b0b2edb0cbdef398ab7364cf..87cfed8a88bd1c9dcf588017c85a3fe614f9d3d0 100644
--- a/src/main/java/it/unibz/inf/isoga/util/PGUtil.java
+++ b/src/main/java/it/unibz/inf/isoga/util/PgHelper.java
@@ -10,9 +10,9 @@ import java.util.List;
  * @author <a href="mailto:markus.innerebner@inf.unibz.it">Markus Innerebner</a>.
  * @version 2.2
  */
-public final class PGUtil {
+public final class PgHelper {
 
-	private PGUtil() { }
+	private PgHelper() { }
 
 	public static org.postgis.Point[] asPGPoints(final List<Point> pts) {
 		final org.postgis.Point[] pgPts = new org.postgis.Point[pts.size()];
diff --git a/src/main/java/it/unibz/inf/isoga/websocket/JsonWebsocket.java b/src/main/java/it/unibz/inf/isoga/websocket/JsonWebsocket.java
index 7c6e405b1f72b505bcb1dcd2aa26ddb11c96c98d..167b17ddb3744a501d62778809046fed06e3eb29 100644
--- a/src/main/java/it/unibz/inf/isoga/websocket/JsonWebsocket.java
+++ b/src/main/java/it/unibz/inf/isoga/websocket/JsonWebsocket.java
@@ -1,7 +1,6 @@
 package it.unibz.inf.isoga.websocket;
 
 import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
 import it.unibz.inf.isoga.db.DbUtility;
 import it.unibz.inf.isoga.db.TableEntry;
 import it.unibz.inf.isoga.service.IService;
@@ -13,8 +12,8 @@ import it.unibz.inf.isoga.service.SevicePoiFeature;
 import it.unibz.inf.isoga.util.DSetConfig;
 
 import java.sql.Connection;
+import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 import javax.websocket.CloseReason;
 import javax.websocket.OnClose;
@@ -90,17 +89,17 @@ public class JsonWebsocket {
 		final Connection connection = SocketConfiguration.getGlobalConfig().getConnection();
 		final String ws = SocketConfiguration.getGlobalConfig().getProperty("rendering.server.rest.workspace");
 
-		final Map<Dataset, DSetConfig> datasets = socketConf.getClientDataset(clientId);
 		final GeoServerRESTPublisher publisher = socketConf.getGeoServerPublisher();
-		for (final DSetConfig dsetConfig : datasets.values()) {
-			if (dsetConfig.isRegistered()) {
+		final Collection<DSetConfig> allClientDatasetConfigs = socketConf.getAllClientDatasetConfigs(clientId);
+		for (final DSetConfig clientDSetConfig : allClientDatasetConfigs) {
+			if (clientDSetConfig.isRegistered()) {
 				// unregister layers
-				for (final String layerName : dsetConfig.getLayers()) {
+				for (final String layerName : clientDSetConfig.getLayers()) {
 					publisher.removeLayer(ws, layerName);
 				}
 
 				// drop tables
-				for (final TableEntry tableEntry : dsetConfig.getTableEntries()) {
+				for (final TableEntry tableEntry : clientDSetConfig.getTableEntries()) {
 					DbUtility.dropIndex(connection, tableEntry.getIndexName());
 					DbUtility.dropTable(connection, tableEntry.getTableName(), true);
 				}
diff --git a/src/main/java/it/unibz/inf/isoga/websocket/SocketConfiguration.java b/src/main/java/it/unibz/inf/isoga/websocket/SocketConfiguration.java
index ad70dd10e346e5addf0177111b6199ccd64059f4..37857c23cbe6eca4fe88d74566da25176cffdd8d 100644
--- a/src/main/java/it/unibz/inf/isoga/websocket/SocketConfiguration.java
+++ b/src/main/java/it/unibz/inf/isoga/websocket/SocketConfiguration.java
@@ -7,7 +7,7 @@ import it.geosolutions.geoserver.rest.decoder.RESTLayerList;
 import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
 import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder;
 import it.unibz.inf.isochrone.util.Config;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
+import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.Point;
 import it.unibz.inf.isoga.db.DbUtility;
 import it.unibz.inf.isoga.db.IsogaDatabase;
@@ -26,6 +26,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -84,27 +85,31 @@ public final class SocketConfiguration {
 		return clientConfigMap.get(clientId);
 	}
 
-	public Map<Dataset, DSetConfig> getClientDataset(final String clientId) {
+	public DSetConfig getClientDatasetConfig(final String clientId, final Dataset dataset) {
 		if (!clientDatasets.containsKey(clientId)) {
 			return null;
 		}
 
-		return clientDatasets.get(clientId);
+		return clientDatasets.get(clientId).get(dataset);
 	}
 
-	public Collection<DSetConfig> getAllClientDatasetConfigs() {
-		return datasetConfigs;
+	public Collection<DSetConfig> getAllClientDatasetConfigs(final String clientId) {
+		if (!clientDatasets.containsKey(clientId)) {
+			return Collections.emptyList();
+		}
+
+		return clientDatasets.get(clientId).values();
 	}
 
-	public void removeClientDataset(final String clientId) {
-		clientDatasets.remove(clientId);
+	public Collection<DSetConfig> getDatasetConfigurations() {
+		return datasetConfigs;
 	}
 
 	public void setClientConfig(final String clientId, final IsogaConfig config) {
 		clientConfigMap.put(clientId, config);
 	}
 
-	public void setClientDataset(final String clientId, final DSetConfig datasetConfig) {
+	public void setClientDSetConfig(final String clientId, final DSetConfig datasetConfig) {
 		if (!clientDatasets.containsKey(clientId)) {
 			clientDatasets.put(clientId, new HashMap<Dataset, DSetConfig>());
 		}
@@ -120,15 +125,14 @@ public final class SocketConfiguration {
 		return manager.getReader();
 	}
 
-
 	/**
-	 * Creates the tables and for every session a new datastore via rest.
+	 * Creates the database tables and new layers for every session.
 	 */
 	public void registerLayers(final Connection connection, final DSetConfig dSetConfig) {
+		final Config globalConfig = getGlobalConfig();
 		final GeoServerRESTPublisher publisher = getGeoServerPublisher();
-
-		final String ds = getGlobalConfig().getProperty("rendering.server.rest.datastore");
-		final String ws = getGlobalConfig().getProperty("rendering.server.rest.workspace");
+		final String ds = globalConfig.getProperty("rendering.server.rest.datastore");
+		final String ws = globalConfig.getProperty("rendering.server.rest.workspace");
 		final BBox serverExtend = dSetConfig.getServerExtent();
 		final int serverSrid = dSetConfig.getServerSRID();
 		final String srs = "EPSG:" + serverSrid;
@@ -203,35 +207,41 @@ public final class SocketConfiguration {
 		final Thread t = new Thread() {
 			@Override
 			public void run() {
-				while (!manager.getReader().existGeoserver()) {
+				final GeoServerRESTReader reader = getGeoServerReader();
+				while (!reader.existGeoserver()) {
 					try {
 						sleep(SLEEP_TIME);
 					} catch (final InterruptedException e1) {
 						e1.printStackTrace();
 					}
 				}
-				cleanupLayersAndTables();
+
+				deleteLayers();
+				dropTables();
 			}
 
-			private void cleanupLayersAndTables() {
+			private void dropTables() {
 				final Connection connection = GLOBAL_CONFIG.getConnection();
-				deleteAllLayers();
-				DbUtility.dropAllResultTables(connection, "_iso_edg_");
-				DbUtility.dropAllResultTables(connection, "_iso_nod_");
-				DbUtility.dropAllResultTables(connection, "_iso_nan_");
-				DbUtility.dropAllResultTables(connection, "_iso_are_");
+
+				DbUtility.dropTablesByRegexp(connection, "%_iso_edg_%");
+				DbUtility.dropTablesByRegexp(connection, "%_iso_nod_%");
+				DbUtility.dropTablesByRegexp(connection, "%_iso_nan_%");
+				DbUtility.dropTablesByRegexp(connection, "%_iso_are_%");
 			}
 
-			private void deleteAllLayers() {
-				final RESTLayerList layers = manager.getReader().getLayers();
+			private void deleteLayers() {
+				final GeoServerRESTPublisher publisher = getGeoServerPublisher();
+				final GeoServerRESTReader reader = getGeoServerReader();
+
+				final RESTLayerList layers = reader.getLayers();
 				if (layers != null) {
 					final List<String> layerNames = layers.getNames();
 					for (final String layerName : layerNames) {
-						manager.getPublisher().removeLayer(GLOBAL_CONFIG.getProperty("rendering.server.rest.workspace"), layerName);
+						publisher.removeLayer(GLOBAL_CONFIG.getProperty("rendering.server.rest.workspace"), layerName);
 					}
 				}
 
-				manager.getPublisher().reload();
+				publisher.reload();
 			}
 		};
 		t.start();
diff --git a/src/test/java/it/unibz/inf/isochrones/db/DatabaseTest.java b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
similarity index 90%
rename from src/test/java/it/unibz/inf/isochrones/db/DatabaseTest.java
rename to src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
index e15b681943a065e6d7eff9b6f17cc897abc48da2..4452a91c4a1d8506efc2fbfa4d05210d1274b408 100644
--- a/src/test/java/it/unibz/inf/isochrones/db/DatabaseTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
@@ -1,11 +1,10 @@
-package it.unibz.inf.isochrones.db;
+package it.unibz.inf.isochrone.db;
 
-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.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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 java.util.ArrayList;
 import java.util.HashMap;
diff --git a/src/test/java/it/unibz/inf/isochrones/network/IsochroneComparisonTest.java b/src/test/java/it/unibz/inf/isochrone/network/IsochroneComparisonTest.java
similarity index 86%
rename from src/test/java/it/unibz/inf/isochrones/network/IsochroneComparisonTest.java
rename to src/test/java/it/unibz/inf/isochrone/network/IsochroneComparisonTest.java
index 6f917bb25a4e5abb762313f3b0f0743ebb31cd17..1a4df8945b66919bfcab6dfae0e65b588f7c7840 100644
--- a/src/test/java/it/unibz/inf/isochrones/network/IsochroneComparisonTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/IsochroneComparisonTest.java
@@ -1,13 +1,12 @@
-package it.unibz.inf.isochrones.network;
+package it.unibz.inf.isochrone.network;
 
 import it.unibz.inf.isochrone.algorithm.Isochrone;
 import it.unibz.inf.isochrone.algorithm.MDijkstra;
 import it.unibz.inf.isochrone.algorithm.MineX;
 import it.unibz.inf.isochrone.algorithm.MrneX;
-import it.unibz.inf.isochrone.network.MemoryOutput;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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.Query;
 
 import java.util.GregorianCalendar;
diff --git a/src/test/java/it/unibz/inf/isochrones/network/MineXTest.java b/src/test/java/it/unibz/inf/isochrone/network/MineXTest.java
similarity index 73%
rename from src/test/java/it/unibz/inf/isochrones/network/MineXTest.java
rename to src/test/java/it/unibz/inf/isochrone/network/MineXTest.java
index 38081ebe4716645ddf742aa78a7008e107ee22d8..ff141e7fa92112da9788ddf66c47c007a6fa0501 100644
--- a/src/test/java/it/unibz/inf/isochrones/network/MineXTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/MineXTest.java
@@ -1,11 +1,10 @@
-package it.unibz.inf.isochrones.network;
+package it.unibz.inf.isochrone.network;
 
 import it.unibz.inf.isochrone.algorithm.Isochrone;
 import it.unibz.inf.isochrone.algorithm.MineX;
-import it.unibz.inf.isochrone.network.MemoryOutput;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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.Query;
 
 import java.util.GregorianCalendar;
diff --git a/src/test/java/it/unibz/inf/isochrones/network/MrneXTest.java b/src/test/java/it/unibz/inf/isochrone/network/MrneXTest.java
similarity index 76%
rename from src/test/java/it/unibz/inf/isochrones/network/MrneXTest.java
rename to src/test/java/it/unibz/inf/isochrone/network/MrneXTest.java
index fad32fa45df70fa795a7fbe013f77512554c10a7..fecdbd7f25e589ec84fba72ea0e6ab94a126ea42 100644
--- a/src/test/java/it/unibz/inf/isochrones/network/MrneXTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/MrneXTest.java
@@ -1,11 +1,10 @@
-package it.unibz.inf.isochrones.network;
+package it.unibz.inf.isochrone.network;
 
 import it.unibz.inf.isochrone.algorithm.Isochrone;
 import it.unibz.inf.isochrone.algorithm.MrneX;
-import it.unibz.inf.isochrone.network.MemoryOutput;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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.Query;
 
 import java.util.GregorianCalendar;
diff --git a/src/test/java/it/unibz/inf/isochrones/network/QueryTest.java b/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java
similarity index 84%
rename from src/test/java/it/unibz/inf/isochrones/network/QueryTest.java
rename to src/test/java/it/unibz/inf/isochrone/network/QueryTest.java
index 560dc08f54deca1cb152a64719adcf536de71e32..14065a85167f83b6b9fdc9c57b4bd505b4fc7869 100644
--- a/src/test/java/it/unibz/inf/isochrones/network/QueryTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java
@@ -1,9 +1,9 @@
-package it.unibz.inf.isochrones.network;
+package it.unibz.inf.isochrone.network;
 
+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.Query;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
 
 import java.util.Arrays;
 import java.util.GregorianCalendar;
diff --git a/src/test/java/it/unibz/inf/isochrones/tests/Parameters.java b/src/test/java/it/unibz/inf/isochrone/test/Parameters.java
similarity index 90%
rename from src/test/java/it/unibz/inf/isochrones/tests/Parameters.java
rename to src/test/java/it/unibz/inf/isochrone/test/Parameters.java
index 9eb0e7d467606e1af0806601275e831a42e1823b..1a6fdec119f0a2d569f6952861bbb54424c7ca3f 100644
--- a/src/test/java/it/unibz/inf/isochrones/tests/Parameters.java
+++ b/src/test/java/it/unibz/inf/isochrone/test/Parameters.java
@@ -1,8 +1,8 @@
-package it.unibz.inf.isochrones.tests;
+package it.unibz.inf.isochrone.test;
 
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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 java.util.Calendar;
 import java.util.GregorianCalendar;
diff --git a/src/test/java/it/unibz/inf/isochrones/tests/RunSimple.java b/src/test/java/it/unibz/inf/isochrone/test/RunSimple.java
similarity index 97%
rename from src/test/java/it/unibz/inf/isochrones/tests/RunSimple.java
rename to src/test/java/it/unibz/inf/isochrone/test/RunSimple.java
index 26196560a0da5a4b312c83c8a121823cd1d39a92..8ff6db4bc9e18d85a0b39646907b39e1c1d0361e 100644
--- a/src/test/java/it/unibz/inf/isochrones/tests/RunSimple.java
+++ b/src/test/java/it/unibz/inf/isochrone/test/RunSimple.java
@@ -1,4 +1,4 @@
-package it.unibz.inf.isochrones.tests;
+package it.unibz.inf.isochrone.test;
 
 import it.unibz.inf.isochrone.algorithm.Isochrone;
 import it.unibz.inf.isochrone.algorithm.MrneX;
diff --git a/src/test/java/it/unibz/inf/isochrones/tests/RuntimeTest.java b/src/test/java/it/unibz/inf/isochrone/test/RuntimeTest.java
similarity index 96%
rename from src/test/java/it/unibz/inf/isochrones/tests/RuntimeTest.java
rename to src/test/java/it/unibz/inf/isochrone/test/RuntimeTest.java
index 73ac4fb7296d3749a1b2f579485dc2ba01a19138..d455829dc22ae175b1e913b08180330185aeb3d4 100644
--- a/src/test/java/it/unibz/inf/isochrones/tests/RuntimeTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/test/RuntimeTest.java
@@ -1,13 +1,13 @@
-package it.unibz.inf.isochrones.tests;
+package it.unibz.inf.isochrone.test;
 
 import it.unibz.inf.isochrone.algorithm.Isochrone;
 import it.unibz.inf.isochrone.algorithm.MDijkstra;
 import it.unibz.inf.isochrone.algorithm.MineX;
 import it.unibz.inf.isochrone.algorithm.MrneX;
 import it.unibz.inf.isochrone.network.MemoryOutput;
-import it.unibz.inf.isochrone.util.Enums.Dataset;
-import it.unibz.inf.isochrone.util.Enums.Direction;
-import it.unibz.inf.isochrone.util.Enums.Mode;
+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.Query;
 
 import java.util.ArrayList;
diff --git a/src/test/java/it/unibz/inf/isochrones/utils/ConfigTest.java b/src/test/java/it/unibz/inf/isochrone/util/ConfigTest.java
similarity index 91%
rename from src/test/java/it/unibz/inf/isochrones/utils/ConfigTest.java
rename to src/test/java/it/unibz/inf/isochrone/util/ConfigTest.java
index 59cc719fbc571c63eda5bc79622992c21d26b3a7..e9bc2903c2e9a25521f3262c72cd559afe9f5b44 100644
--- a/src/test/java/it/unibz/inf/isochrones/utils/ConfigTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/util/ConfigTest.java
@@ -1,6 +1,4 @@
-package it.unibz.inf.isochrones.utils;
-
-import it.unibz.inf.isochrone.util.Config;
+package it.unibz.inf.isochrone.util;
 
 import org.testng.Assert;
 import org.testng.annotations.Test;