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 d98b28b60b42accaaced24825eec84cf8c1f44a6..02e6102dd76c72226dccff1bf98b543b693d18c1 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java
@@ -131,7 +131,7 @@ public class MrneX extends Isochrone {
 		final Point p = node.getCoordinates();
 		final double r = node.getRadius();
 
-		final Collection<Node> intersectionNodes = new ArrayList<>();
+		final Collection<Node> intersectionNodes = new ArrayList<>(loadedNodes.size());
 		for (final Node loadedNode : loadedNodes) {
 			final double distance = DistanceAlgorithm.euclideanDistance(p, loadedNode.getCoordinates());
 			if (distance < r + loadedNode.getRadius()) {
@@ -183,7 +183,7 @@ public class MrneX extends Isochrone {
 
 		// CHECKSTYLE:OFF MagicNumber
 		if (maxMemory * 0.95d < getNodeSize()) {
-			final double perc = 100.0d - ((double) getNodeSize() / maxMemory) * 100.0d;
+			final double perc = 100.0d - (double) getNodeSize() / maxMemory * 100.0d;
 			throw new RuntimeException("Free memory size is " + NumberFormat.getInstance().format(perc) + "%");
 		}
 		// CHECKSTYLE:ON MagicNumber
diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
index 1599c41575f9d7ec65c7035b80115261f30b7e3c..ce22faebe73c443eef2f78eaa4cf6b01d270cc0e 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
@@ -352,11 +352,9 @@ public class ConfigDataset {
 
 			// find resources on webapp resources (in tomcat lib folder, in WEB-INF...)  and add to available ones
 			final Enumeration<URL> e = cLoader.getResources("../lib");
-			if (e != null) {
-				final Collection<URL> webappResources = Collections.list(e);
-				final Collection<String> files = ResourceHelper.findFilesInResources(webappResources, dsConfigPattern);
-				resources.addAll(files);
-			}
+			final Collection<URL> webappResources = Collections.list(e);
+			final Collection<String> files = ResourceHelper.findFilesInResources(webappResources, dsConfigPattern);
+			resources.addAll(files);
 		} catch (final IOException e) {
 			LOGGER.warn("Datasets could not be read. There might be no configured datasets available!");
 		}
diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
index 69816331ca4bc9149d72f881b1f7d439c86288d7..5b0721f86f6917b6647d3ffc0fe16b11ee6a1aa5 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
@@ -71,10 +71,12 @@ public final class ConfigIsochrone {
 
 	public static ConfigIsochrone getInstance() {
 		if (instance == null) {
-			final ConfigIsochrone config = new ConfigBuilder<>(ConfigIsochrone.class).build();
-			config.initConnectionFactory();
+			synchronized (ConfigIsochrone.class) {
+				final ConfigIsochrone config = new ConfigBuilder<>(ConfigIsochrone.class).build();
+				config.initConnectionFactory();
 
-			instance = config;
+				instance = config;
+			}
 		}
 
 		return instance;
@@ -145,7 +147,7 @@ public final class ConfigIsochrone {
 		LOGGER.debug(" - dbName: " + database);
 		LOGGER.debug(" - dbPort: " + port);
 		LOGGER.debug(" - dbUser: " + user);
-		LOGGER.debug(" - dbPassword: " + ((password == null) ? "without password" : "with password"));
+		LOGGER.debug(" - dbPassword: " + (password == null ? "without password" : "with password"));
 		LOGGER.debug(" - isPooling: " + pooling);
 
 		try {
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 4a33c06545ad376314a59be3e7c92f8a5b93388b..1973e88af644c947d6718abf479086ffe48e283e 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/Database.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java
@@ -1,5 +1,6 @@
 package it.unibz.inf.isochrone.db;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import it.unibz.inf.isochrone.config.ConfigDataset;
 import it.unibz.inf.isochrone.config.ConfigIsochrone;
 import it.unibz.inf.isochrone.network.Link;
@@ -64,7 +65,7 @@ public class Database {
 
 	public Database(final ConfigDataset config, final Mode mode, final Direction direction) {
 		this.config = config;
-		this.isIncoming = (direction == Direction.INCOMING);
+		this.isIncoming = direction == Direction.INCOMING;
 		this.mode = mode;
 
 		final String configDatecodes = config.getTableDatecodes();
@@ -194,7 +195,7 @@ public class Database {
 	 * @return a list of links adjacent to the given nodeId
 	 */
 	public Collection<Link> getAdjLinks(final int nodeId, final Map<Integer, Node> nodes) {
-		final PreparedStatement stmt = getPstmt((mode == Mode.UNIMODAL) ? queryGetAdjContinuousLinks : queryGetAdjLinks);
+		final PreparedStatement stmt = getPstmt(mode == Mode.UNIMODAL ? queryGetAdjContinuousLinks : queryGetAdjLinks);
 		final Collection<Link> adjLinks = new ArrayList<>();
 
 		ResultSet rs = null;
@@ -395,7 +396,7 @@ public class Database {
 	 * @return the link with id linkId
 	 */
 	public Link getLink(final int linkId, final Map<Integer, Node> nodes) {
-		final PreparedStatement stmt = getPstmt((mode == Mode.UNIMODAL) ? queryGetContinuousLink : queryGetLink);
+		final PreparedStatement stmt = getPstmt(mode == Mode.UNIMODAL ? queryGetContinuousLink : queryGetLink);
 
 		Link link = null;
 		ResultSet rs = null;
@@ -431,7 +432,7 @@ public class Database {
 	 * @return the node from the database
 	 */
 	public Node getNode(final int nodeId) {
-		final PreparedStatement stmt = getPstmt((mode == Mode.UNIMODAL) ? queryGetContinuousNode : queryGetMrneXNode);
+		final PreparedStatement stmt = getPstmt(mode == Mode.UNIMODAL ? queryGetContinuousNode : queryGetMrneXNode);
 
 		Node node = null;
 		ResultSet rs = null;
@@ -509,7 +510,7 @@ public class Database {
 				stmt.setDouble(3, node.getRadius());
 				// CHECKSTYLE:ON MagicNumber
 			} else {
-				final Node[] loadedAreas = intersections.toArray(new Node[0]);
+				final Node[] loadedAreas = intersections.toArray(new Node[intersections.size()]);
 				final String disjunctAreaString = "st_difference(st_buffer(st_pointfromtext('" + pointString + "',"
 						+ config.getServerSRID() + ")," + node.getRadius() + ")," + subQuery(loadedAreas, loadedAreas.length - 1, config.getServerSRID()) + ")";
 				stmt = getPstmt(String.format(queryGetLinksInRange, disjunctAreaString));
@@ -549,7 +550,7 @@ public class Database {
 	 * @param links A map in which all the links should be stored.
 	 */
 	public void readNetwork(final Map<Integer, Node> nodes, final Map<Integer, Link> links) {
-		final PreparedStatement stmt = getPstmt((mode == Mode.UNIMODAL) ? queryGetContinuousEdges : queryGetAllEdges);
+		final PreparedStatement stmt = getPstmt(mode == Mode.UNIMODAL ? queryGetContinuousEdges : queryGetAllEdges);
 
 		ResultSet rs = null;
 		try {
@@ -629,6 +630,10 @@ public class Database {
 	 */
 	// FIXME: Find a fix for prepared statements with parameters
 	// (we should NOT set strings in preparedStatemens just because we want to cache something)
+	@SuppressFBWarnings(
+		value = "SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING",
+		justification = "Since table names can not be filled with parameters, but we have variable table names we somewhere need to do this"
+	)
 	protected PreparedStatement getPstmt(final String query) {
 		if (pstmtsCacheMap == null) {
 			pstmtsCacheMap = new HashMap<>();
@@ -661,7 +666,7 @@ public class Database {
 				if (connection.isClosed()) {
 					connection = ConfigIsochrone.getInstance().getConnection();
 				}
-			} catch (SQLException e) {
+			} catch (final SQLException e) {
 				e.printStackTrace();
 				connection = null;
 			}
@@ -725,7 +730,7 @@ public class Database {
 		final StringBuilder builder = new StringBuilder();
 		for (int i = 0; i < length; ++i) {
 			builder.append("?");
-			if ((i + 1) < length) {
+			if (i + 1 < length) {
 				builder.append(",");
 			}
 		}
diff --git a/src/main/java/it/unibz/inf/isochrone/db/TableEntry.java b/src/main/java/it/unibz/inf/isochrone/db/TableEntry.java
index ad197e66a332617d114c2b5dda7984102152b8cd..4db89ae486cf6d34fc091a45e1af69782cafc2db 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/TableEntry.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/TableEntry.java
@@ -1,10 +1,12 @@
 package it.unibz.inf.isochrone.db;
 
-import it.unibz.inf.isochrone.util.EnumContainer.TableType;
-
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
+import it.unibz.inf.isochrone.util.EnumContainer.TableType;
+
+import java.util.Locale;
+
 /**
  * Describes a database table for the web interface.
  */
@@ -16,7 +18,7 @@ public class TableEntry {
 	// Constructors
 
 	public TableEntry(final String tableName) {
-		this.tableName = tableName.toLowerCase();
+		this.tableName = tableName.toLowerCase(Locale.ENGLISH);
 	}
 
 	public TableEntry(final String tableName, final String indexName, final TableType type) {
diff --git a/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
index 07cde781cd9d1436c55df4e1bc1cc00a66888805..440001bd888d895732e88958dc2befcc1e9059e9 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
@@ -1,5 +1,7 @@
 package it.unibz.inf.isochrone.util;
 
+import java.util.Locale;
+
 /**
  * Stores all the enums used in the project in one place.
  */
@@ -73,8 +75,8 @@ public final class EnumContainer {
 	public static <T extends Enum<T>> T getByName(final Class<T> enumType, final String str) {
 		T result = null;
 		try {
-			result = Enum.valueOf(enumType, str.toUpperCase());
-		} catch (IllegalArgumentException e) {
+			result = Enum.valueOf(enumType, str.toUpperCase(Locale.ENGLISH));
+		} catch (final IllegalArgumentException e) {
 			result = null;
 		}
 
diff --git a/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java b/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java
index 27ba9016d799bfef596b73db04468835a9ecd6a7..e15b3bd5058302556857a0136f12f1c4d6decf42 100644
--- a/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java
@@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.config;
 import java.util.Collection;
 
 import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 public class ConfigDatasetTest {
@@ -11,35 +10,31 @@ public class ConfigDatasetTest {
 	private static final int EXPECTED_NUM_DATASETS_FILTERED = 3;
 	private static final String[] EXPECTED_DATASETS = new String[] {"bz", "it", "sf", "st"};
 	private static final String[] EXPECTED_DATASETS_FILTERED = new String[] {"bz"};
-	private Collection<String> datasetCollection;
-	private Collection<String> datasetCollectionFiltered;
-
-	@BeforeClass
-	public void initDatasets() {
-		datasetCollection = ConfigDataset.getAvailableDatasets(false);
-		datasetCollectionFiltered = ConfigDataset.getAvailableDatasets(true);
-	}
 
 	@Test
 	public void testDatasetCount() {
+		final Collection<String> datasetCollection = ConfigDataset.getAvailableDatasets(false);
 		Assert.assertEquals(datasetCollection.size(), EXPECTED_NUM_DATASETS, "Unexpected number of configured datasets");
 	}
 
 	@Test
 	public void testDatasetNames() {
-		for (String dsName : EXPECTED_DATASETS) {
+		final Collection<String> datasetCollection = ConfigDataset.getAvailableDatasets(false);
+		for (final String dsName : EXPECTED_DATASETS) {
 			Assert.assertTrue(datasetCollection.contains(dsName), "Dataset of " + dsName + " unconfigured");
 		}
 	}
 
 	@Test
 	public void testDatasetCountFiltered() {
+		final Collection<String> datasetCollectionFiltered = ConfigDataset.getAvailableDatasets(true);
 		Assert.assertEquals(datasetCollectionFiltered.size(), EXPECTED_NUM_DATASETS_FILTERED, "Unexpected number of configured datasets");
 	}
 
 	@Test
 	public void testDatasetNamesFiltered() {
-		for (String dsName : EXPECTED_DATASETS_FILTERED) {
+		final Collection<String> datasetCollectionFiltered = ConfigDataset.getAvailableDatasets(true);
+		for (final String dsName : EXPECTED_DATASETS_FILTERED) {
 			Assert.assertTrue(datasetCollectionFiltered.contains(dsName), "Dataset of " + dsName + " unconfigured");
 		}
 	}
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 873f84d9fb8507ce0ae456f37823de12a8d28478..74df28e692664fae9d99ccf4a8100bcd4ed8b859 100644
--- a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
@@ -13,7 +13,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
 public class DatabaseTest {
@@ -22,13 +21,27 @@ public class DatabaseTest {
 	private static final int LINK_ID = 1846;
 	private static final int NODE_ID = 5013;
 	private static final String TEST_DATASET = "bz";
-	private Map<Integer, Node> nodes;
-	private Map<Integer, Link> links;
 
-	@BeforeTest
-	public void setUp() {
-		nodes = new HashMap<>();
-		links = new LinkedHashMap<>();
+	/**
+	 * Private inner class that reads the network on initialization and encapsulated the database object for easier use.
+	 */
+	private static class InitializedDatabase {
+		private final Map<Integer, Node> nodes;
+		private final Map<Integer, Link> links;
+		private final Database db;
+
+		public InitializedDatabase(final Database db) {
+			this.db = db;
+
+			nodes = new HashMap<>();
+			links = new LinkedHashMap<>();
+
+			db.readNetwork(nodes, links);
+		}
+
+		public void close() {
+			db.close();
+		}
 	}
 
 	@Test
@@ -45,8 +58,8 @@ public class DatabaseTest {
 		final Map<Integer, Link> compareLinks = new LinkedHashMap<>();
 		fillHashMaps(compareNodes, compareLinks);
 
-		final Database db = initDb();
-		Assert.assertEquals(links.get(LINK_ID), compareLinks.get(LINK_ID), "Links comparison");
+		final InitializedDatabase db = initDb();
+		Assert.assertEquals(db.links.get(LINK_ID), compareLinks.get(LINK_ID), "Links comparison");
 		db.close();
 	}
 
@@ -56,37 +69,34 @@ public class DatabaseTest {
 		final Map<Integer, Link> compareLinks = new LinkedHashMap<>();
 		fillHashMaps(compareNodes, compareLinks);
 
-		final Database db = initDb();
-		Assert.assertEquals(nodes.get(NODE_ID), compareNodes.get(NODE_ID), "Nodes comparison");
+		final InitializedDatabase db = initDb();
+		Assert.assertEquals(db.nodes.get(NODE_ID), compareNodes.get(NODE_ID), "Nodes comparison");
 		db.close();
 	}
 
 	@Test
 	public void testCountLinkEdges() {
-		final Database db = initDb();
-		Assert.assertEquals(links.size(), EXPECTED_LINK_COUNT, "Link count was unexpected");
+		final InitializedDatabase db = initDb();
+		Assert.assertEquals(db.links.size(), EXPECTED_LINK_COUNT, "Link count was unexpected");
 		db.close();
 	}
 
 	@Test
 	public void testCountNodeEdges() {
-		final Database db = initDb();
+		final InitializedDatabase db = initDb();
 
 		// 2687 Doesn't correspond to the number of nodes in
 		// the nodes table, but the number of distinct
 		// target/source node in the edges table
-		Assert.assertEquals(nodes.size(), EXPECTED_NODE_COUNT, "Node count was unexpected");
+		Assert.assertEquals(db.nodes.size(), EXPECTED_NODE_COUNT, "Node count was unexpected");
 		db.close();
 	}
 
 	// Private methods
 
-	private Database initDb() {
+	private InitializedDatabase initDb() {
 		final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET);
-		final Database db = new Database(config, Mode.MULTIMODAL, Direction.INCOMING);
-		db.readNetwork(nodes, links);
-
-		return db;
+		return new InitializedDatabase(new Database(config, Mode.MULTIMODAL, Direction.INCOMING));
 	}
 
 	private void fillHashMaps(final Map<Integer, Node> nodeHashMap, final Map<Integer, Link> linkHashMap) {