diff --git a/build.gradle b/build.gradle
index 9a9c205f92736a4df905f285bb501e23f4c94b15..a4e4b0ec236d20ad5caeb4d2d74bc27841fe03f1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -128,7 +128,6 @@ buildscript {
 }
 
 dependencies {
-	compile group: 'commons-dbutils', name: 'commons-dbutils', version: '+'
 	compile group: 'commons-io', name: 'commons-io', version: '+'
 	compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '+'
 	compile group: 'com.jolbox', name: 'bonecp', version: '+'
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 97b7c298ed7848ef82924baefa854c4e0c486e98..6dc27633b253faa118215d979384acf58b63ff9e 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
@@ -10,6 +10,7 @@ import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformer;
 import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformers;
 import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue;
 
+import it.unibz.inf.isochrone.db.DbUtils;
 import it.unibz.inf.isochrone.db.TableEntry;
 import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 import it.unibz.inf.isochrone.util.ResourceHelper;
@@ -17,6 +18,7 @@ import it.unibz.inf.isochrone.util.ResourceHelper;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.sql.SQLException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -426,10 +428,17 @@ public class ConfigDataset {
 
 	private static Collection<String> filterInvalidDatasets(final Collection<String> datasets) {
 		LOGGER.info("Filtering invalid datasets (e.g. which have no database tables)");
-
 		final ConfigIsochrone config = ConfigIsochrone.getInstance();
+
+		final Collection<String> allTables;
+		try {
+			allTables = DbUtils.getAllTables(config.getConnection());
+		} catch (SQLException e) {
+			LOGGER.warn("Could not get tables from database... datasets will not be filtered at all");
+			return datasets;
+		}
+
 		final Collection<String> filteredList = new ArrayList<>(datasets.size());
-		final Collection<String> allTables = config.getAllTables();
 		for (final String ds : datasets) {
 			final ConfigDataset c = ConfigDataset.createInstance(ds);
 			if (c.hasValidDatabase(allTables)) {
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 ae992b1c76b9b450db9d88f82997762ee1a01e83..69816331ca4bc9149d72f881b1f7d439c86288d7 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
@@ -10,16 +10,11 @@ import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue;
 
 import it.unibz.inf.isochrone.db.ConnectionFactory;
 
-import java.sql.CallableStatement;
 import java.sql.Connection;
-import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collection;
 
 import javax.validation.constraints.NotNull;
 
-import org.apache.commons.dbutils.DbUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -163,32 +158,4 @@ public final class ConfigIsochrone {
 		}
 	}
 
-	public Collection<String> getAllTables() {
-		final Connection connection = getConnection();
-		if (connection == null) {
-			throw new NullPointerException("Connection to database could not be initialized");
-		}
-
-		final Collection<String> result = new ArrayList<>();
-		final String query = "SELECT tablename FROM pg_tables WHERE schemaname='public'";
-
-		ResultSet rs = null;
-		CallableStatement stmt = null;
-		try {
-			stmt = connection.prepareCall(query);
-			rs = stmt.executeQuery();
-			while (rs.next()) {
-				result.add(rs.getString("tablename"));
-			}
-		} catch (SQLException e) {
-			LOGGER.warn("Could not get tables from database");
-		} finally {
-			DbUtils.closeQuietly(rs);
-			DbUtils.closeQuietly(stmt);
-			DbUtils.closeQuietly(connection);
-		}
-
-		return result;
-	}
-
 }
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 eb976e8f7cabbf6613cc00924984e29aa2069f3f..4a33c06545ad376314a59be3e7c92f8a5b93388b 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/Database.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java
@@ -21,8 +21,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.dbutils.DbUtils;
-
 /**
  * <p>
  * Database layer.  Contains all database queries for the different
diff --git a/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java b/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba476d595bf4ad53ca3736192c5a9d35fc729416
--- /dev/null
+++ b/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java
@@ -0,0 +1,145 @@
+package it.unibz.inf.isochrone.db;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * A collection of JDBC helper methods. This class is thread safe.
+ */
+
+public final class DbUtils {
+	// CHECKSTYLE:OFF EmptyBlock
+
+	private DbUtils() { }
+
+	/**
+	 * Close a <code>Connection</code>, avoid closing if null.
+	 *
+	 * @param conn Connection to close.
+	 * @throws SQLException if a database access error occurs
+	 */
+	public static void close(final Connection conn) throws SQLException {
+		if (conn != null) {
+			conn.close();
+		}
+	}
+
+	/**
+	 * Close a <code>ResultSet</code>, avoid closing if null.
+	 *
+	 * @param rs ResultSet to close.
+	 * @throws SQLException if a database access error occurs
+	 */
+	public static void close(final ResultSet rs) throws SQLException {
+		if (rs != null) {
+			rs.close();
+		}
+	}
+
+	/**
+	 * Close a <code>Statement</code>, avoid closing if null.
+	 *
+	 * @param stmt Statement to close.
+	 * @throws SQLException if a database access error occurs
+	 */
+	public static void close(final Statement stmt) throws SQLException {
+		if (stmt != null) {
+			stmt.close();
+		}
+	}
+
+	/**
+	 * Close a <code>Connection</code>, avoid closing if null and hide
+	 * any SQLExceptions that occur.
+	 *
+	 * @param conn Connection to close.
+	 */
+	public static void closeQuietly(final Connection conn) {
+		try {
+			close(conn);
+		} catch (SQLException e) {
+			// quiet
+		}
+	}
+
+	/**
+	 * Close a <code>Connection</code>, <code>Statement</code> and <code>ResultSet</code>. Avoid closing if null and hide any
+	 * SQLExceptions that occur.
+	 *
+	 * @param conn Connection to close.
+	 * @param stmt Statement to close.
+	 * @param rs ResultSet to close.
+	 */
+	public static void closeQuietly(final Connection conn, final Statement stmt, final ResultSet rs) {
+		try {
+			closeQuietly(rs);
+		} finally {
+			try {
+				closeQuietly(stmt);
+			} finally {
+				closeQuietly(conn);
+			}
+		}
+	}
+
+	/**
+	 * Close a <code>ResultSet</code>, avoid closing if null and hide any
+	 * SQLExceptions that occur.
+	 *
+	 * @param rs ResultSet to close.
+	 */
+	public static void closeQuietly(final ResultSet rs) {
+		try {
+			close(rs);
+		} catch (SQLException e) {
+			// quiet
+		}
+	}
+
+	/**
+	 * Close a <code>Statement</code>, avoid closing if null and hide
+	 * any SQLExceptions that occur.
+	 *
+	 * @param stmt Statement to close.
+	 */
+	public static void closeQuietly(final Statement stmt) {
+		try {
+			close(stmt);
+		} catch (SQLException e) {
+			// quiet
+		}
+	}
+
+	// CHECKSTYLE:ON EmptyBlock
+
+	public static Collection<String> getAllTables(final Connection connection) throws SQLException {
+		if (connection == null) {
+			throw new NullPointerException("Connection to database could not be initialized");
+		}
+
+		final Collection<String> result = new ArrayList<>();
+		final String query = "SELECT tablename FROM pg_tables WHERE schemaname='public'";
+
+		ResultSet rs = null;
+		CallableStatement stmt = null;
+		try {
+			stmt = connection.prepareCall(query);
+			rs = stmt.executeQuery();
+			while (rs.next()) {
+				result.add(rs.getString("tablename"));
+			}
+		} finally {
+			DbUtils.closeQuietly(rs);
+			DbUtils.closeQuietly(stmt);
+			DbUtils.closeQuietly(connection);
+		}
+
+		return result;
+	}
+
+}