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 aeccfacde78b234a07c1757cc2734924fbc23cf0..2a9085a65ca199158a94fb64835d601f67b822a9 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java
@@ -10,18 +10,21 @@ 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.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 import it.unibz.inf.isochrone.util.Point;
 import it.unibz.inf.isoga.db.DatabaseWeb;
 import it.unibz.inf.isoga.db.TableEntry;
 import it.unibz.inf.isoga.geometry.BBox;
 
+import java.io.File;
+import java.net.URISyntaxException;
 import java.text.DateFormat;
 import java.text.ParseException;
 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;
@@ -29,6 +32,10 @@ import java.util.Set;
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * Configuration for individual datasets.
  *
@@ -42,10 +49,10 @@ public class ConfigDataset {
 	public static class CalendarTransformer extends TypeTransformer<String, Calendar> {
 		public static final String DATE_FORMAT = "MM/dd/yyyy HH:mm";
 
-        @Override
-        public Calendar transform(final String str) {
-        	DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
-        	Calendar targetTime = Calendar.getInstance();
+		@Override
+		public Calendar transform(final String str) {
+			DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
+			Calendar targetTime = Calendar.getInstance();
 			try {
 				targetTime.setTimeInMillis(dateFormat.parse(str).getTime());
 			} catch (ParseException e) {
@@ -54,15 +61,22 @@ public class ConfigDataset {
 			}
 
 			return targetTime;
-        }
-    }
+		}
+	}
+
 	public static class PointTransformer extends TypeTransformer<String, Point> {
-        @Override
-        public Point transform(final String str) {
-    		final String[] strProperty = str.split(",");
-    		return new Point(Double.valueOf(strProperty[0]), Double.valueOf(strProperty[1]));
-        }
-    }
+		@Override
+		public Point transform(final String str) {
+			final String[] strProperty = str.split(",");
+			return new Point(Double.valueOf(strProperty[0]), Double.valueOf(strProperty[1]));
+		}
+	}
+
+	private static Map<String, ConfigDataset> instanceMap = new HashMap<>();
+	private static final Logger LOGGER = LoggerFactory.getLogger(ConfigDataset.class);
+	private static final Collection<String> ALL_DATASETS = initDatasets();
+	private static final String[] DS_CONFIG_EXT_ARR = new String[] {"xml"};
+	private static final String DS_CONFIG_PREFIX = "config_";
 
 	@PropertyValue("client.tArrival")
 	@TypeTransformers(CalendarTransformer.class)
@@ -153,31 +167,33 @@ public class ConfigDataset {
 	@PropertyValue("tbl.vertex.density")
 	private String tableVertexDensity;
 
-	// Non-configurable fields
-	private Dataset dataset;
-	private static Map<Dataset, ConfigDataset> instanceMap = new HashMap<>();
+	private String datasetName;
 	protected TableEntry areaBufferTableEntry;
 	protected TableEntry edgeTableEntry;
 	protected TableEntry vertexAnnotatedTableEntry;
 	protected TableEntry vertexTableEntry;
 
-	public static ConfigDataset getInstance(final Dataset dataset) {
+	public static ConfigDataset getInstance(final String datasetName) {
 		final List<String> propertyFiles = new ArrayList<>(1);
-		propertyFiles.add("config_" + dataset.toString().toLowerCase());
+		propertyFiles.add("config_" + datasetName);
 
-		if (!instanceMap.containsKey(dataset)) {
+		if (!instanceMap.containsKey(datasetName)) {
 			final ConfigDataset config = new ConfigBuilder<>(ConfigDataset.class).overridePropertiesFiles(propertyFiles).build();
-			config.dataset = dataset;
+			config.datasetName = datasetName;
 			config.initTableEntries();
 
-			instanceMap.put(dataset, config);
+			instanceMap.put(datasetName, config);
 			return config;
 		}
 
-		return instanceMap.get(dataset);
+		return instanceMap.get(datasetName);
+	}
+
+	public static Collection<String> getAllDatasets() {
+		return ALL_DATASETS;
 	}
 
-	public static Set<Dataset> getInstantiatedDatasets() {
+	public static Set<String> getInstantiatedDatasets() {
 		return instanceMap.keySet();
 	}
 
@@ -208,7 +224,7 @@ public class ConfigDataset {
 		tableSchedules = o.tableSchedules;
 		tableVertex = o.tableVertex;
 		tableVertexDensity = o.tableVertexDensity;
-		dataset = o.dataset;
+		datasetName = o.datasetName;
 		areaBufferTableEntry = o.areaBufferTableEntry;
 		edgeTableEntry = o.edgeTableEntry;
 		vertexAnnotatedTableEntry = o.vertexAnnotatedTableEntry;
@@ -241,8 +257,8 @@ public class ConfigDataset {
 	}
 
 	@JsonProperty(value = "name")
-	public Dataset getDataset() {
-		return dataset;
+	public String getDatasetName() {
+		return datasetName;
 	}
 
 	@JsonIgnore
@@ -378,4 +394,34 @@ public class ConfigDataset {
 
 		return new TableEntry(tblName.trim(), idxName.trim(), type);
 	}
+
+	private static Collection<String> initDatasets() {
+		File resourceDir = null;
+		try {
+			resourceDir = new File(ConfigDataset.class.getResource("/").toURI());
+		} catch (URISyntaxException e) {
+			LOGGER.warn("Datasets could not be read. There might be no configured datasets available!");
+		}
+
+		if (resourceDir == null) {
+			return Collections.emptyList();
+		}
+
+		final Collection<File> fileCollection = FileUtils.listFiles(resourceDir, DS_CONFIG_EXT_ARR, false);
+		final List<String> dsConfigCollection = new ArrayList<>(fileCollection.size());
+
+		// TODO: Only add datasets that are also configured in the db
+		final int prefixLength = DS_CONFIG_PREFIX.length();
+		for (File file : fileCollection) {
+			final String fileName = file.getName();
+			if (fileName.startsWith(DS_CONFIG_PREFIX)) {
+				String datasetName = fileName.substring(prefixLength);
+				datasetName = datasetName.substring(0, datasetName.lastIndexOf("."));
+				dsConfigCollection.add(datasetName);
+			}
+		}
+
+		Collections.sort(dsConfigCollection);
+		return dsConfigCollection;
+	}
 }
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 f6605e3292ac06dab9c90b7ce05ece6ca86c5c2f..a20536aac0f265c5b2d610dea990ce1edf348003 100644
--- a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java
@@ -12,7 +12,6 @@ import it.unibz.inf.isochrone.db.ConnectionFactory;
 
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Collection;
 
 import javax.validation.constraints.NotNull;
 
@@ -42,10 +41,6 @@ public final class ConfigIsochrone {
 	@PropertyValue("cfg.clientSRID")
 	private int clientSRID;
 
-	@NotNull
-	@PropertyValue("cfg.datasets")
-	private Collection<String> datasets;
-
 	@NotNull
 	@PropertyValue("org.postgresql.database")
 	private String database;
@@ -116,10 +111,6 @@ public final class ConfigIsochrone {
 		return null;
 	}
 
-	public Collection<String> getDatasets() {
-		return datasets;
-	}
-
 	public String getDBName() {
 		return database;
 	}
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 8e4ebe8d03e19258241a4b9a057e2e3d49feb845..07cde781cd9d1436c55df4e1bc1cc00a66888805 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java
@@ -14,13 +14,6 @@ public final class EnumContainer {
 		MDIJKSTRA, MINEX, MRNEX
 	}
 
-	/**
-	 * Lists of all datasets available in the database.
-	 */
-	public enum Dataset {
-		BZ, SF, ST, IT
-	}
-
 	/**
 	 * The network can either be unimodal continuous links only or
 	 * multimodal and include discrete links.
diff --git a/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java b/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java
index 2564aacedcfd5336f859b3437ef235ba52c44a91..89b18d09f2de48d1ab2bb1e10d7aa0bc1ba80351 100644
--- a/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java
+++ b/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java
@@ -1,8 +1,10 @@
 package it.unibz.inf.isoga.config;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import it.unibz.inf.isochrone.config.ConfigDataset;
 import it.unibz.inf.isochrone.config.ConfigIsochrone;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.TableType;
 import it.unibz.inf.isoga.db.TableEntry;
 
@@ -13,15 +15,12 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 /**
  * Configuration for individual datasets.
  */
 public class ConfigClient extends ConfigDataset {
 	private static final int NAME_MAX_LENGTH = 32;
-	private static final Map<String, Map<Dataset, ConfigClient>> ALL_CONFIGS;
+	private static final Map<String, Map<String, ConfigClient>> ALL_CONFIGS;
 	private boolean registered = false;
 
 	static {
@@ -36,20 +35,20 @@ public class ConfigClient extends ConfigDataset {
 		return Collections.emptyList();
 	}
 
-	public static ConfigClient getInstance(final String clientId, final Dataset ds) {
-		if (getAllConfigMap(clientId).containsKey(ds)) {
-			return ALL_CONFIGS.get(clientId).get(ds);
+	public static ConfigClient getInstance(final String clientId, final String datasetName) {
+		if (getAllConfigMap(clientId).containsKey(datasetName)) {
+			return ALL_CONFIGS.get(clientId).get(datasetName);
 		}
 
-		final ConfigClient createdConfig = new ConfigClient(ConfigDataset.getInstance(ds), clientId);
+		final ConfigClient createdConfig = new ConfigClient(ConfigDataset.getInstance(datasetName), clientId);
 		// configuration for client created ... now add it to the all_configs map
 		if (!ALL_CONFIGS.containsKey(clientId)) {
 			// client had no configuration before... init empty map
-			ALL_CONFIGS.put(clientId, new HashMap<Dataset, ConfigClient>());
+			ALL_CONFIGS.put(clientId, new HashMap<String, ConfigClient>());
 		}
 
 		// add created clientConfig to existing client configs (with different dataset)
-		ALL_CONFIGS.get(clientId).put(ds, createdConfig);
+		ALL_CONFIGS.get(clientId).put(datasetName, createdConfig);
 		return createdConfig;
 	}
 
@@ -114,7 +113,7 @@ public class ConfigClient extends ConfigDataset {
 
 	// Private static methods
 
-	private static Map<Dataset, ConfigClient> getAllConfigMap(final String clientId) {
+	private static Map<String, ConfigClient> getAllConfigMap(final String clientId) {
 		if (ALL_CONFIGS.containsKey(clientId)) {
 			return ALL_CONFIGS.get(clientId);
 		}
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 56a98569d66fa3de21a111e44d5537a7bacd33d0..1b3542e0278e7480d9b574b2d198ec879fc9205f 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java
@@ -3,7 +3,6 @@ package it.unibz.inf.isoga.service;
 
 import it.unibz.inf.isochrone.config.ConfigDataset;
 import it.unibz.inf.isochrone.config.ConfigIsochrone;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isoga.config.ConfigClient;
 import it.unibz.inf.isoga.service.dto.RequestConfiguration;
 import it.unibz.inf.isoga.service.dto.ResponseConfiguration;
@@ -19,7 +18,7 @@ import javax.websocket.Session;
  * @author Nikolaus Krismer
  */
 public class ServiceConfiguration extends AbstractService<RequestConfiguration, ResponseConfiguration> {
-	private static final Dataset[] PREREGISTERING_DATASETS = new Dataset[] {Dataset.BZ};
+	private static final String[] PREREGISTERING_DATASETS = new String[] {"bz"};
 
 	// Constructor
 
@@ -50,9 +49,9 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration,
 	// Private methods
 
 	private Collection<ConfigDataset> initClientConfigurations(final String clientId) {
-		final Set<Dataset> instantiatedDatasets = ConfigDataset.getInstantiatedDatasets();
+		final Set<String> instantiatedDatasets = ConfigDataset.getInstantiatedDatasets();
 		final Collection<ConfigDataset> createConfigs = new ArrayList<ConfigDataset>(instantiatedDatasets.size());
-		for (final Dataset dataset : instantiatedDatasets) {
+		for (final String dataset : instantiatedDatasets) {
 			final ConfigClient configClient = ConfigClient.getInstance(clientId, dataset);
 			createConfigs.add(configClient);
 		}
@@ -63,7 +62,7 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration,
 	private void preregisterClients(final String clientId) {
 		final Connection connection = ConfigIsochrone.getInstance().getConnection();
 
-		for (Dataset dataset : PREREGISTERING_DATASETS) {
+		for (String dataset : PREREGISTERING_DATASETS) {
 			final ConfigClient configClient = ConfigClient.getInstance(clientId, dataset);
 			registerTableAndLayers(connection, configClient);
 		}
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 d74542e2c559b2b6ab5bbb153dfed934139f39a5..b98c0297c1382472175e96b7091ff4d1f616a6ec 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java
@@ -1,7 +1,6 @@
 package it.unibz.inf.isoga.service;
 
 
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isoga.config.ConfigClient;
 import it.unibz.inf.isoga.db.DbUtility;
@@ -29,7 +28,7 @@ public class ServiceFeatureInfo extends AbstractService<RequestFeatureInfo, Resp
 	@Override
 	public ResponseFeatureInfo onJsonMessage(final Session session, final RequestFeatureInfo request) {
 		final int stopId = request.getStopId();
-		final Dataset ds = request.getDataset();
+		final String ds = request.getDataset();
 		final Direction direction = request.getDirection();
 
 		final String clientId = session.getId();
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 650be3e843fa8be33d2b63a4ad94d03eccdf6ed2..fabbefdc73aa16eae321a8734a2d918da4002cec 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
@@ -11,7 +11,6 @@ import it.unibz.inf.isochrone.config.ConfigIsochrone;
 import it.unibz.inf.isochrone.network.Location;
 import it.unibz.inf.isochrone.util.EnumContainer.Algorithm;
 import it.unibz.inf.isochrone.util.EnumContainer.CoverageMode;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.Query;
 import it.unibz.inf.isoga.config.ConfigClient;
@@ -50,7 +49,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response
 		final long startRequestTiming = System.currentTimeMillis();
 		final String clientId = session.getId();
 		final Direction direction = request.getDirection();
-		final Dataset dataset = request.getDataset();
+		final String dataset = request.getDataset();
 		if (dataset == null) {
 			throw new IllegalArgumentException("Invalid dataset specified!");
 		}
diff --git a/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java b/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java
index 74e3b02d03da8a095d0cbfc4984f0d360e5ef95d..06701581161b156fb53964ac6160cda681a5a76f 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java
@@ -2,7 +2,6 @@ package it.unibz.inf.isoga.service;
 
 
 import it.unibz.inf.isochrone.config.ConfigIsochrone;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isoga.config.ConfigClient;
 import it.unibz.inf.isoga.db.DbUtility;
 import it.unibz.inf.isoga.service.dto.RequestPoiFeature;
@@ -25,8 +24,7 @@ public class ServicePoiFeature extends AbstractService<RequestPoiFeature, Respon
 
 	@Override
 	public ResponsePoiFeature onJsonMessage(final Session session, final RequestPoiFeature request) {
-		final Dataset ds = request.getDataset();
-
+		final String ds = request.getDataset();
 		final String clientId = session.getId();
 		final ConfigClient config = ConfigClient.getInstance(clientId, ds);
 		final int clientSRID = ConfigIsochrone.getInstance().getClientSRID();
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 eb463f34419039f3bd01ae5d0757046aa728bd24..f2d7b08ead6d4594d85c90967bd6b30087e72b69 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java
@@ -1,7 +1,6 @@
 package it.unibz.inf.isoga.service;
 
 
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.QueryType;
 import it.unibz.inf.isoga.config.ConfigClient;
 import it.unibz.inf.isoga.db.DbUtility;
@@ -22,7 +21,7 @@ public class ServiceWps extends AbstractService<RequestWps, ResponseWps> {
 
 	@Override
 	public ResponseWps onJsonMessage(final Session session, final RequestWps request) {
-		final Dataset ds = request.getDataset();
+		final String ds = request.getDataset();
 		final String sqlMessage = request.getSqlQuery();
 		final String coverageTable = request.getCoverageTable();
 		final String spatialPredicate = request.getSpatialPredicate();
diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java
index 34bb583a3ce8f6d5e438222c604e311696ace9c1..2aba349ae45358c80dbfbf981209738e2976405a 100644
--- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java
+++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java
@@ -1,14 +1,13 @@
 package it.unibz.inf.isoga.service.dto;
 
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 
 import javax.validation.constraints.NotNull;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class RequestFeatureInfo implements IRequest {
-	private String datasetString;
+	private String dataset;
 	private String directionString;
 	private int stopId;
 
@@ -19,12 +18,8 @@ public class RequestFeatureInfo implements IRequest {
 	// Getter
 
 	@NotNull
-	public Dataset getDataset() {
-		if (datasetString == null) {
-			return null;
-		}
-
-		return Dataset.valueOf(datasetString.toUpperCase());
+	public String getDataset() {
+		return dataset;
 	}
 
 	@NotNull
@@ -51,9 +46,9 @@ public class RequestFeatureInfo implements IRequest {
 		}
 	}
 
-	@JsonProperty(value = "dataset")
-	public void setDatasetString(final String datasetString) {
-		this.datasetString = datasetString;
+	@JsonProperty
+	public void setDataset(final String dataset) {
+		this.dataset = dataset;
 	}
 
 	@JsonProperty(value = "direction")
diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java
index 1cb3e831fa70f9530713d63d4ed770d731b6d29c..6816767e6c0ee3b69924ca779b20a7c54123c79f 100644
--- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java
+++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java
@@ -1,9 +1,10 @@
 package it.unibz.inf.isoga.service.dto;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import it.unibz.inf.isochrone.util.EnumContainer;
 import it.unibz.inf.isochrone.util.EnumContainer.Algorithm;
 import it.unibz.inf.isochrone.util.EnumContainer.CoverageMode;
-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.isoga.network.QueryNode;
@@ -13,12 +14,10 @@ import java.util.Collection;
 
 import javax.validation.constraints.NotNull;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class RequestIsochrone implements IRequest {
 	private Algorithm algorithm;
 	private CoverageMode coverageMode;
-	private Dataset dataset;
+	private String dataset;
 	private Calendar date;
 	private Direction direction;
 	private Long dmax;
@@ -46,7 +45,7 @@ public class RequestIsochrone implements IRequest {
 	}
 
 	@NotNull
-	public Dataset getDataset() {
+	public String getDataset() {
 		return dataset;
 	}
 
@@ -111,7 +110,7 @@ public class RequestIsochrone implements IRequest {
 
 	@JsonProperty
 	public void setDataset(final String dataset) {
-		this.dataset = EnumContainer.getByName(Dataset.class, dataset);
+		this.dataset = dataset;
 	}
 
 	@JsonProperty
diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java
index a5c39545d3dd815988516feab5d0382b7598dac6..1c188cfdf5abdf0e79b46d2983386e786a819592 100644
--- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java
+++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java
@@ -1,14 +1,12 @@
 package it.unibz.inf.isoga.service.dto;
 
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 import javax.validation.constraints.NotNull;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 
 public class RequestPoiFeature implements IRequest {
-	private String datasetString;
+	private String dataset;
 	private String query;
 
 	// Constructors
@@ -18,12 +16,8 @@ public class RequestPoiFeature implements IRequest {
 	// Getter
 
 	@NotNull
-	public Dataset getDataset() {
-		if (datasetString == null) {
-			return null;
-		}
-
-		return Dataset.valueOf(datasetString.toUpperCase());
+	public String getDataset() {
+		return dataset;
 	}
 
 	@NotNull
@@ -45,9 +39,9 @@ public class RequestPoiFeature implements IRequest {
 		}
 	}
 
-	@JsonProperty(value = "dataset")
-	public void setDatasetString(final String datasetString) {
-		this.datasetString = datasetString;
+	@JsonProperty
+	public void setDataset(final String dataset) {
+		this.dataset = dataset;
 	}
 
 	@JsonProperty
diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java
index 1e31ab5200afec100c32643c9c618ee8e36dda65..9b888ec0503d6846b190e1f868a1520f9fca67de 100644
--- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java
+++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java
@@ -1,14 +1,12 @@
 package it.unibz.inf.isoga.service.dto;
 
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 import javax.validation.constraints.NotNull;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class RequestWps implements IRequest {
 	private String coverageTable;
-	private String datasetString;
+	private String dataset;
 	private String spatialPredicate;
 	private String sqlQuery;
 
@@ -28,12 +26,8 @@ public class RequestWps implements IRequest {
 	}
 
 	@NotNull
-	public Dataset getDataset() {
-		if (datasetString == null) {
-			return null;
-		}
-
-		return Dataset.valueOf(datasetString.toUpperCase());
+	public String getDataset() {
+		return dataset;
 	}
 
 	@NotNull
@@ -69,9 +63,9 @@ public class RequestWps implements IRequest {
 		this.coverageTable = coverageTable;
 	}
 
-	@JsonProperty(value = "dataset")
-	public void setDatasetString(final String datasetString) {
-		this.datasetString = datasetString;
+	@JsonProperty
+	public void setDataset(final String dataset) {
+		this.dataset = dataset;
 	}
 
 	@JsonProperty
diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java b/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java
index 81291f8e44e6949befee43b19658760a640f8b98..963e50694a665128d1e2c9fd40fc256159b388b6 100644
--- a/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java
+++ b/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java
@@ -1,5 +1,7 @@
 package it.unibz.inf.isoga.service.dto;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import it.unibz.inf.isochrone.config.ConfigDataset;
 import it.unibz.inf.isoga.config.ConfigGeoserver;
 import it.unibz.inf.isoga.service.ServiceConfiguration;
@@ -12,8 +14,6 @@ import java.util.List;
 
 import org.apache.commons.httpclient.HttpStatus;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class ResponseConfiguration implements IResponse {
 	private final String mapserverUrl;
 	private final List<ConfigDataset> defaultDatasets;
@@ -44,7 +44,7 @@ public class ResponseConfiguration implements IResponse {
 		Collections.sort(defaultDatasets, new Comparator<ConfigDataset>() {
 			@Override
 			public int compare(final ConfigDataset o1, final ConfigDataset o2) {
-				return o1.getDataset().toString().compareTo(o2.getDataset().toString());
+				return o1.getDatasetName().compareTo(o2.getDatasetName());
 			}
 		});
 
diff --git a/src/main/java/it/unibz/inf/isoga/web/StartupListener.java b/src/main/java/it/unibz/inf/isoga/web/StartupListener.java
index bf4507e525f95b2b3975ff64c4c8ae8d03864af3..ba660cc14cf60b7733f9e2f42bd10b3f5dd21b87 100644
--- a/src/main/java/it/unibz/inf/isoga/web/StartupListener.java
+++ b/src/main/java/it/unibz/inf/isoga/web/StartupListener.java
@@ -2,10 +2,10 @@ package it.unibz.inf.isoga.web;
 
 import it.unibz.inf.isochrone.config.ConfigDataset;
 import it.unibz.inf.isochrone.config.ConfigIsochrone;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isoga.db.DbUtility;
 
 import java.sql.Connection;
+import java.util.Collection;
 
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
@@ -40,8 +40,8 @@ public class StartupListener implements ServletContextListener {
 	private void initializeDatasetConfigs() {
 		LOGGER.info("Initializing dataset configuration files");
 
-		final Dataset[] allDatasets = Dataset.values();
-		for (final Dataset dataset : allDatasets) {
+		final Collection<String> allDatasets = ConfigDataset.getAllDatasets();
+		for (final String dataset : allDatasets) {
 			ConfigDataset.getInstance(dataset);
 		}
 	}
diff --git a/src/main/resources/config.xml b/src/main/resources/config.xml
index 25626cc48bb5dce1ba8c554866dcaf1c400f56d6..9acb4d33471082929f2f78c07246d8724552e5d7 100644
--- a/src/main/resources/config.xml
+++ b/src/main/resources/config.xml
@@ -21,6 +21,5 @@
 
 	<!-- Configuration parameters -->
 	<entry key="cfg.clientSRID">3857</entry>
-	<entry key="cfg.datasets">bz,it,sf,st</entry>
 	<entry key="cfg.clientPrefix"></entry>
 </properties>
diff --git a/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java b/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d381af52dd19ef12ec559e17ed2f7a5092640a0
--- /dev/null
+++ b/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java
@@ -0,0 +1,27 @@
+package it.unibz.inf.isochrone.config;
+
+import java.net.URISyntaxException;
+import java.util.Collection;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class ConfigDatasetTest {
+	private static final int EXPECTED_NUM_DATASETS = 4;
+	private static final String[] EXPECTED_DATASETS = new String[] {"bz", "it", "sf", "st"};
+
+	@Test
+	public void testDatasetCount() throws URISyntaxException {
+		final Collection<String> datasetCollection = ConfigDataset.getAllDatasets();
+		Assert.assertEquals(datasetCollection.size(), EXPECTED_NUM_DATASETS, "Unexpected number of configured datasets");
+	}
+
+	@Test
+	public void testDatasetNames() throws URISyntaxException {
+		final Collection<String> datasetCollection = ConfigDataset.getAllDatasets();
+
+		for (String dsName : EXPECTED_DATASETS) {
+			Assert.assertTrue(datasetCollection.contains(dsName), "Dataset of " + dsName + " unconfigured");
+		}
+	}
+}
diff --git a/src/test/java/it/unibz/inf/isochrone/config/ConfigTest.java b/src/test/java/it/unibz/inf/isochrone/config/ConfigIsochroneTest.java
similarity index 96%
rename from src/test/java/it/unibz/inf/isochrone/config/ConfigTest.java
rename to src/test/java/it/unibz/inf/isochrone/config/ConfigIsochroneTest.java
index 58a6001cb10f5ccdcfebe4ae0eb0d0fa71558741..3561f984014ce1753b0c27061b15c25eb837017a 100644
--- a/src/test/java/it/unibz/inf/isochrone/config/ConfigTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/config/ConfigIsochroneTest.java
@@ -7,11 +7,17 @@ import org.testng.annotations.Test;
  * @author Nikolaus Krismer
  * @version 3
  */
-public class ConfigTest {
+public class ConfigIsochroneTest {
 	private static final int EXPECTED_MAX_CONNECTION = 50;
 	private static final int EXPECTED_BACTH_SIZE = 250;
 	private static final int EXPECTED_PORT = 5432;
 
+	@Test
+	public void testDbName() {
+		final ConfigIsochrone config = ConfigIsochrone.getInstance();
+		Assert.assertEquals(config.getDBName(), "isochrone", "Property database name");
+	}
+
 	@Test
 	public void testGetMaxConnection() {
 		final ConfigIsochrone config = ConfigIsochrone.getInstance();
@@ -29,10 +35,4 @@ public class ConfigTest {
 		final ConfigIsochrone config = ConfigIsochrone.getInstance();
 		Assert.assertEquals(config.getDBPort(), EXPECTED_PORT, "Property org.postgresql.servername");
 	}
-
-	@Test
-	public void testDbName() {
-		final ConfigIsochrone config = ConfigIsochrone.getInstance();
-		Assert.assertEquals(config.getDBName(), "isochrone", "Property database name");
-	}
 }
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 313df499f63c7d6882dbf313d856a06aee6ac50c..971b77f73b94ab12f3c5339a7fd57d51046fec6e 100644
--- a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java
@@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.db;
 import it.unibz.inf.isochrone.config.ConfigDataset;
 import it.unibz.inf.isochrone.network.Link;
 import it.unibz.inf.isochrone.network.Node;
-import it.unibz.inf.isochrone.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 
@@ -23,6 +22,7 @@ public class DatabaseTest {
 	private static final int EXPECTED_NODE_COUNT = 2687;
 	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;
 
@@ -43,7 +43,7 @@ public class DatabaseTest {
 
 	@Test
 	public void testCreateDatabaseObject() {
-		final ConfigDataset config = ConfigDataset.getInstance(Dataset.BZ);
+		final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET);
 		final Database<ConfigDataset> db = new Database<>(config, Mode.MULTIMODAL, Direction.INCOMING);
 		Assert.assertNotNull(db, "Database object could not be created!");
 	}
@@ -74,7 +74,7 @@ public class DatabaseTest {
 	// Private methods
 
 	private Database<ConfigDataset> initDb() {
-		final ConfigDataset config = ConfigDataset.getInstance(Dataset.BZ);
+		final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET);
 		final Database<ConfigDataset> db = new Database<>(config, Mode.MULTIMODAL, Direction.INCOMING);
 		db.readNetwork(nodes, links);
 
diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
index 563dfc5ccc113a22f56a8b0d13ffb78cc63ad8d3..54e2feb2d98a4ebbccd9ec1c5c99af17d66d1af2 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
@@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.network;
 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.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 
@@ -13,7 +12,7 @@ import java.util.GregorianCalendar;
 import org.testng.annotations.Test;
 
 public class AlgorithmTest {
-	private static final Dataset TEST_DATASET = Dataset.BZ;
+	private static final String TEST_DATASET = "bz";
 	private static final Double WALKING_SPEED = 1.0;
 	private static final int DURATION = 50;
 	private static final Calendar TIME = new GregorianCalendar(2011, 6, 1, 12, 0, 0);
diff --git a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
index 1f971e61b36212511352f0c0365c8f051c6671c2..02398ced1f9e373bc595cd098dfe184f70687688 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
@@ -6,7 +6,6 @@ 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.config.ConfigDataset;
-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;
@@ -18,7 +17,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 public class ComparisonTest {
-	private static final Dataset TEST_DATASET = Dataset.BZ;
+	private static final String TEST_DATASET = "bz";
 	private static final Double WALKING_SPEED = 1.0;
 	private static final int DURATION = 50;
 	private static final Calendar TIME = new GregorianCalendar(2011, 6, 1, 12, 0, 0);
diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
index 4cd07e7c380d97933c4e90f355ab3e5b4f615c80..6027fc9c28b37a807a834b17a0ca9a049f011cee 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
@@ -4,7 +4,6 @@ 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.util.EnumContainer.Dataset;
 import it.unibz.inf.isochrone.util.EnumContainer.Direction;
 import it.unibz.inf.isochrone.util.EnumContainer.Mode;
 
@@ -112,7 +111,7 @@ public final class RuntimeComplex {
 	private static void addDatasetBZ(final Set<Integer> times) {
 		int i = 0;
 		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(1.0, time, BZ_TIME, Mode.MULTIMODAL, BZ_NODE_ID, Dataset.BZ, Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(1.0, time, BZ_TIME, Mode.MULTIMODAL, BZ_NODE_ID, "bz", Integer.MAX_VALUE, Direction.INCOMING));
 		}
 	}
 
@@ -120,7 +119,7 @@ public final class RuntimeComplex {
 	private static void addDatasetIT(final Set<Integer> times) {
 		int i = 0;
 		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(1.0, time, IT_TIME, Mode.MULTIMODAL, IT_NODE_ID, Dataset.IT, Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(1.0, time, IT_TIME, Mode.MULTIMODAL, IT_NODE_ID, "it", Integer.MAX_VALUE, Direction.INCOMING));
 		}
 	}
 
@@ -128,7 +127,7 @@ public final class RuntimeComplex {
 	private static void addDatasetSF(final Set<Integer> times) {
 		int i = 0;
 		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(1.0, time, SF_TIME, Mode.MULTIMODAL, SF_NODE_ID, Dataset.SF, Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(1.0, time, SF_TIME, Mode.MULTIMODAL, SF_NODE_ID, "sf", Integer.MAX_VALUE, Direction.INCOMING));
 		}
 	}
 
@@ -136,7 +135,7 @@ public final class RuntimeComplex {
 	private static void addDatasetST(final Set<Integer> times) {
 		int i = 0;
 		for (final Integer time : times) {
-			datasets.put(i++, new TestParameters(1.0, time, ST_TIME, Mode.MULTIMODAL, ST_NODE_ID, Dataset.ST, Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(1.0, time, ST_TIME, Mode.MULTIMODAL, ST_NODE_ID, "st", Integer.MAX_VALUE, Direction.INCOMING));
 		}
 	}
 
diff --git a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
index 6b928f2a1a23af2a38fc0b75a9b11d86ed3081a8..42a3fa4c0ccb480f2232c02520a0c832e94fb843 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
@@ -1,6 +1,5 @@
 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;
 
@@ -17,7 +16,7 @@ final class TestParameters {
 	private static final Calendar DEFAULT_DATE = new GregorianCalendar(2011, 9, 20, 15, 0, 0);
 	private static final Mode DEFAULT_MODE = Mode.MULTIMODAL;
 	private static final int DEFAULT_NODE_ID = 2000500;
-	private static final Dataset DEFAULT_DATASET = Dataset.BZ;
+	private static final String DEFAULT_DATASET = "bz";
 	private static final int DEFAULT_MAX_MEMORY = Integer.MAX_VALUE;
 	private static final Direction DEFAULT_DIRECTION = Direction.INCOMING;
 
@@ -26,7 +25,7 @@ final class TestParameters {
 	private final Calendar date;
 	private final Mode mode;
 	private final int nodeId;
-	private final Dataset dataset;
+	private final String dataset;
 	private final int maxMemory;
 	private final Direction direction;
 
@@ -42,7 +41,7 @@ final class TestParameters {
 	}
 
 	// CHECKSTYLE:OFF ParameterNumber
-	public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int nodeId, final Dataset dataset, final int maxMemory, final Direction direction) {
+	public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int nodeId, final String dataset, final int maxMemory, final Direction direction) {
 		this.walkingSpeed = walkingSpeed;
 		this.runtime = runtime;
 		this.date = date;
@@ -54,7 +53,7 @@ final class TestParameters {
 	}
 	// CHECKSTYLE:ON ParameterNumber
 
-	public Dataset getDataset() {
+	public String getDataset() {
 		return dataset;
 	}