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 8ad6304dce4227f5e4babc2a8e84c8acbebf95c3..7825d9f4a01801a59248dd30277c5a24b8f2928a 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
@@ -96,10 +96,10 @@ public abstract class Isochrone {
 	public <T extends Output> T compute(final T output) {
 		output.beforeCalculation();
 
-		if (!query.getNodes().isEmpty()) {
-			initializeStartNodes(query.getNodes());
+		if (!query.getStartNodes().isEmpty()) {
+			initializeStartNodes(query.getStartNodes());
 		} else {
-			initializeStartLocations(output, query.getLocations());
+			initializeStartLocations(output, query.getStartLocations());
 		}
 
 		Node node = null;
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 ea14afac4a1daa3450d212b63be4489d4051955c..b35773ba187db519faf3f9c0e57563bc50fad49a 100644
--- a/src/main/java/it/unibz/inf/isochrone/util/Query.java
+++ b/src/main/java/it/unibz/inf/isochrone/util/Query.java
@@ -20,83 +20,100 @@ public class Query {
 	private final Direction dir;
 	private final Mode mode;
 	private final Double walkingSpeed;
-	private Collection<Integer> nodes = new HashSet<Integer>();
-	private Collection<Location> locations = new HashSet<Location>();
+	private Collection<Integer> startNodes;
+	private Collection<Location> startLocations;
 	private Long duration;
 	private Calendar time;
 	private Long toTime;
 	private Long fromTime;
 	private Boolean expireNodes;
 
+	// Constructor
+
 	/**
 	 * Construct a query object with every field except the nodes and
 	 * locations.  Remember to set them afterward!!
 	 */
 	public Query(final Direction dir, final double walkingSpeed, final long duration, final Calendar time, final boolean expireNodes, final Mode mode) {
+		startNodes = new HashSet<Integer>();
+		startLocations = new HashSet<Location>();
+
 		this.dir = dir;
 		this.walkingSpeed = walkingSpeed;
 		this.duration = duration;
-		if (time != null) {
-			setTime(time);
-		}
 		this.expireNodes = expireNodes;
 		this.mode = mode;
+
+		setTime(time);
 	}
 
-	public Collection<Integer> getNodes() {
-		return nodes;
+	// Public methods
+
+	public Direction getDir() {
+		return dir;
 	}
 
-	public Collection<Location> getLocations() {
-		return locations;
+	public Long getDuration() {
+		return duration;
 	}
 
-	public void setNodes(final Integer... ids) {
-		setNodes(Arrays.asList(ids));
+	public Long getFromTime() {
+		return fromTime;
 	}
 
-	public void setNodes(final Collection<Integer> nodes) {
-		this.nodes = nodes;
+	public Mode getMode() {
+		return mode;
 	}
 
-	public void setLocations(final Collection<Location> locations) {
-		this.locations = locations;
+	public Collection<Location> getStartLocations() {
+		return startLocations;
 	}
 
-	public Direction getDir() {
-		return dir;
+	public Collection<Integer> getStartNodes() {
+		return startNodes;
 	}
 
-	public Mode getMode() {
-		return mode;
+	public Calendar getTime() {
+		return time;
 	}
 
-	public Long getDuration() {
-		return duration;
+	public Long getToTime() {
+		return toTime;
+	}
+
+	public Double getWalkingSpeed() {
+		return walkingSpeed;
+	}
+
+	public Boolean isExpireNodes() {
+		return expireNodes;
 	}
 
 	public void setDuration(final Long duration) {
 		this.duration = duration;
 	}
 
-	public Double getWalkingSpeed() {
-		return walkingSpeed;
+	public void setExpireNodes(final Boolean shouldExpireNodes) {
+		expireNodes = shouldExpireNodes;
 	}
 
-	public Calendar getTime() {
-		return time;
+	public void setStartLocations(final Collection<Location> startLocations) {
+		this.startLocations = startLocations;
 	}
 
-	public Long getFromTime() {
-		return fromTime;
+	public void setStartNodeIds(final Integer... startId) {
+		setStartNodes(Arrays.asList(startId));
 	}
 
-	public Long getToTime() {
-		return toTime;
+	public void setStartNodes(final Collection<Integer> startNodes) {
+		this.startNodes = startNodes;
 	}
 
 	public void setTime(final Calendar time) {
 		this.time = time;
+		if (time == null) {
+			return;
+		}
 
 		final Calendar calendar = new GregorianCalendar();
 		calendar.setTimeInMillis(time.getTimeInMillis());
@@ -117,12 +134,4 @@ public class Query {
 		}
 	}
 
-	public Boolean isExpireNodes() {
-		return expireNodes;
-	}
-
-	public void setExpireNodes(final Boolean shouldExpireNodes) {
-		expireNodes = shouldExpireNodes;
-	}
-
 }
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 aac24fe8908f8809139b1b44bb3cee2e2ff6c905..0de841822e0059d65037c7fdc88e09b9d9d06855 100644
--- a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
+++ b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java
@@ -67,7 +67,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response
 		final DatabaseWeb db = new DatabaseWeb(config, request.getMode(), direction);
 		truncateTables(config);
 		final Query query = new Query(direction, request.getSpeed(), request.getDmax(), request.getDate(), true, request.getMode());
-		query.setLocations(locationsFromQueryNodes(request.getQueryNodes(), db));
+		query.setStartLocations(locationsFromQueryNodes(request.getQueryNodes(), db));
 		final Isochrone isochrone = getAlgorithm(request.getAlgorithm(), config, query);
 		final BBoxOutput output = isochrone.compute(new BBoxOutput(config, db, direction));
 		final long timeIsochrone = System.currentTimeMillis() - startComputationTiming;
diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
index 3f92e77edc037bc5152452d445259b39003391e3..41d03a38036d5acd9985b45af662dd545c07def4 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
@@ -24,7 +24,7 @@ final class AlgorithmHelper {
 	public static void run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) {
 		ConfigDataset c = ConfigDataset.getInstance(params.getDataset());
 		Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getRuntime(), params.getDate(), expireNodes, params.getMode());
-		query.setNodes(params.getNodeId());
+		query.setStartNodeIds(params.getStartNodeId());
 
 		Isochrone algorithm = null;
 		try {
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 54e2feb2d98a4ebbccd9ec1c5c99af17d66d1af2..03c1ef8ae6487f55c9bd17c109557cf0b335f6d9 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
@@ -12,11 +12,15 @@ import java.util.GregorianCalendar;
 import org.testng.annotations.Test;
 
 public class AlgorithmTest {
-	private static final String TEST_DATASET = "bz";
+	private static final String 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);
-	private static final int NODE_ID = 5015;
+	private static final int STARTNODE_ID = 5015;
+	private static final Mode MODE = Mode.MULTIMODAL;
+	private static final Direction DIRECTION = Direction.INCOMING;
+
+	// Public methodd
 
 	@Test
 	public void testMDijkstra() {
@@ -36,7 +40,7 @@ public class AlgorithmTest {
 	// Private methods
 
 	private static TestParameters getParams() {
-		return new TestParameters(WALKING_SPEED, DURATION, TIME, Mode.MULTIMODAL, NODE_ID, TEST_DATASET, Integer.MAX_VALUE, Direction.INCOMING);
+		return new TestParameters(WALKING_SPEED, DURATION, TIME, MODE, STARTNODE_ID, DATASET, DIRECTION);
 	}
 
 }
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 02398ced1f9e373bc595cd098dfe184f70687688..215f47b5b8d5381bec9824bf45f44e14927be7f9 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
@@ -28,11 +28,11 @@ public class ComparisonTest {
 		final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET);
 
 		final Query queryDijkstra = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, false, Mode.MULTIMODAL);
-		queryDijkstra.setNodes(NODE_ID);
+		queryDijkstra.setStartNodeIds(NODE_ID);
 		final Isochrone mDijkstra = new MDijkstra(config, queryDijkstra);
 
 		final Query queryMinex = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL);
-		queryMinex.setNodes(NODE_ID);
+		queryMinex.setStartNodeIds(NODE_ID);
 		final Isochrone mineX = new MineX(config, queryMinex);
 
 		Assert.assertEquals(mDijkstra.compute().getLinks(), mineX.compute().getLinks(), "Dijkstra != MineX");
@@ -43,11 +43,11 @@ public class ComparisonTest {
 		final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET);
 
 		final Query queryDijkstra = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, false, Mode.MULTIMODAL);
-		queryDijkstra.setNodes(NODE_ID);
+		queryDijkstra.setStartNodeIds(NODE_ID);
 		final Isochrone mDijkstra = new MDijkstra(config, queryDijkstra);
 
 		final Query queryMrneX = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL);
-		queryMrneX.setNodes(NODE_ID);
+		queryMrneX.setStartNodeIds(NODE_ID);
 		final Isochrone mrneX = new MrneX(config, queryMrneX);
 
 		Assert.assertEquals(mDijkstra.compute().getLinks(), mrneX.compute().getLinks(), "Dijkstra != MrneX");
@@ -57,7 +57,7 @@ public class ComparisonTest {
 	public void testMineXMrneX() throws AlgorithmException  {
 		final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET);
 		final Query query = new Query(Direction.INCOMING, WALKING_SPEED, DURATION, TIME, true, Mode.MULTIMODAL);
-		query.setNodes(NODE_ID);
+		query.setStartNodeIds(NODE_ID);
 
 		final Isochrone mineX = new MineX(config, query);
 		final Isochrone mrneX = new MrneX(config, query);
diff --git a/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java b/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java
index 6a298b76996b121419c4eebe0ea3ddf404a343d6..cc3a2d8d675b57b9930ee3d9899e355613859a21 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/QueryTest.java
@@ -6,6 +6,7 @@ import it.unibz.inf.isochrone.util.Query;
 
 import java.util.Arrays;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.GregorianCalendar;
 import java.util.List;
 
@@ -15,23 +16,26 @@ import org.testng.annotations.Test;
 public class QueryTest {
 	private static final Calendar TIME = new GregorianCalendar(2013, 1, 1, 15, 30);
 	private static final double SPEED =  1.5;
+	private static final Direction DIRECTION = Direction.INCOMING;
 	private static final long DURATION = 50;
-	private static final int NODE_1 = 123;
-	private static final int NODE_2 = 456;
-	private static final int NODE_3 = 789;
-	private static final int NODE_4 = 666;
+	private static final Mode MODE = Mode.MULTIMODAL;
+	private static final boolean NODE_EXPIRES = true;
+	private static final Integer[] NODES_ADDED = {123, 456, 789};
+	private static final Integer NODE_NOT_ADDED = 666;
 
 	@Test
 	public void checkQueryInterface() {
-		final List<Integer> nodeList = Arrays.asList(NODE_1, NODE_2, NODE_3);
-		final Query query = new Query(Direction.INCOMING, SPEED, DURATION, TIME, true, Mode.MULTIMODAL);
-		query.setNodes(nodeList);
-
-		Assert.assertEquals(query.getNodes().size(), nodeList.size(), "Number of added nodes unexpected");
-		Assert.assertTrue(query.getNodes().contains(NODE_1), "Added node #1 not available");
-		Assert.assertTrue(query.getNodes().contains(NODE_2), "Added node #2 not available");
-		Assert.assertTrue(query.getNodes().contains(NODE_3), "Added node #3 not available");
-		Assert.assertFalse(query.getNodes().contains(NODE_4), "Not added node available");
+		final List<Integer> nodeList = Arrays.asList(NODES_ADDED);
+		final Query query = new Query(DIRECTION, SPEED, DURATION, TIME, NODE_EXPIRES, MODE);
+		query.setStartNodes(nodeList);
+
+		final Collection<Integer> resultNodes = query.getStartNodes();
+		Assert.assertEquals(resultNodes.size(), nodeList.size(), "Number of added nodes unexpected");
+		for (Integer i : NODES_ADDED) {
+			Assert.assertTrue(resultNodes.contains(i), "Added node #" + i + " not available");
+		}
+		Assert.assertFalse(resultNodes.contains(NODE_NOT_ADDED), "Not added node available");
+
 		Assert.assertEquals(query.getDuration(), (Long) DURATION, "Duration unexpected");
 		Assert.assertEquals(query.getTime(), TIME, "Time unexpected");
 		Assert.assertEquals(query.getWalkingSpeed(), SPEED, "WalkingSpeed unexpected");
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 35194a0cb4ec43d6ba0778116ad43bc9b29caa94..1c025a39748fffff912894e16e0ca33ed593319f 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java
@@ -46,6 +46,9 @@ public final class RuntimeComplex {
 	private static final int IT_NODE_ID = 21;
 	private static final Calendar IT_TIME = new GregorianCalendar(2011, 9, 20, 15, 0, 0);
 	private static final String RESULTFILE_XML_RUNTIME = "build/reports/tests/algorithm-runtimes.xml";
+	private static final Direction DIRECTION = Direction.INCOMING;
+	private static final Mode MODE = Mode.MULTIMODAL;
+	private static final double WALKING_SPEED = 1.0;
 	private static final int MAX_RUNTIME = 18000; // 5 hours;
 	private static final int RUNTIME_POINTS_PER_OFFSET = 12;
 	private static final int[] RUNTIME_OFFSETS = {
@@ -56,7 +59,8 @@ public final class RuntimeComplex {
 	private static Map<Integer, TestParameters> datasets = new TreeMap<>();
 	private static Map<String, Map<String, Long>> runtimes = new HashMap<>();
 
-	// launcher for visualVM
+	// Launcher method (main method) for visualVM
+
 	public static void main(final String[] args) {
 		final RuntimeComplex o = new RuntimeComplex();
 //		addAllDatasets();
@@ -81,6 +85,8 @@ public final class RuntimeComplex {
 		System.out.println("Overall Time (in msec): " + runTimeOverall);
 	}
 
+	// Public static methods
+
 	@AfterClass
 	public static void writeRuntimeXML() {
 		final Set<Entry<String, Map<String, Long>>> resultSet = runtimes.entrySet();
@@ -96,6 +102,8 @@ public final class RuntimeComplex {
 //		addDatasetST(times);
 	}
 
+	// Public methods
+
 	@Test(invocationCount = REPEAT_COUNT)
 	public void testRuntimeDijkstra() {
 		runForAllDatasets(MDijkstra.class);
@@ -116,7 +124,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, "bz", Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(WALKING_SPEED, time, BZ_TIME, MODE, BZ_NODE_ID, "bz", DIRECTION));
 		}
 	}
 
@@ -124,7 +132,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, "it", Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(WALKING_SPEED, time, IT_TIME, MODE, IT_NODE_ID, "it", DIRECTION));
 		}
 	}
 
@@ -132,7 +140,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, "sf", Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(WALKING_SPEED, time, SF_TIME, MODE, SF_NODE_ID, "sf", DIRECTION));
 		}
 	}
 
@@ -140,7 +148,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, "st", Integer.MAX_VALUE, Direction.INCOMING));
+			datasets.put(i++, new TestParameters(WALKING_SPEED, time, ST_TIME, MODE, ST_NODE_ID, "st", DIRECTION));
 		}
 	}
 
diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java b/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java
index 5a2a9b4bc4c684fc75a097603799ff653688e665..408d11c8b263fbe51fa6b84edd6c5b01475577d1 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/RuntimeSimple.java
@@ -22,6 +22,8 @@ import org.testng.annotations.Test;
 public final class RuntimeSimple {
 	private static final Logger LOGGER = LoggerFactory.getLogger(RuntimeSimple.class);
 
+	// Public methods
+
 	@Test
 	public void runMDijkstra() {
 		run(MDijkstra.class);
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 42a3fa4c0ccb480f2232c02520a0c832e94fb843..415b7d74c73de387fb120ee8dce3badad396b91d 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
@@ -17,16 +17,14 @@ final class TestParameters {
 	private static final Mode DEFAULT_MODE = Mode.MULTIMODAL;
 	private static final int DEFAULT_NODE_ID = 2000500;
 	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;
 
 	private final double walkingSpeed;
 	private final int runtime;
 	private final Calendar date;
 	private final Mode mode;
-	private final int nodeId;
+	private final int startNodeId;
 	private final String dataset;
-	private final int maxMemory;
 	private final Direction direction;
 
 	public TestParameters() {
@@ -34,21 +32,19 @@ final class TestParameters {
 		runtime = DEFAULT_RUNTIME;
 		date = DEFAULT_DATE;
 		mode = DEFAULT_MODE;
-		nodeId = DEFAULT_NODE_ID;
+		startNodeId = DEFAULT_NODE_ID;
 		dataset = DEFAULT_DATASET;
-		maxMemory = DEFAULT_MAX_MEMORY;
 		direction = DEFAULT_DIRECTION;
 	}
 
 	// CHECKSTYLE:OFF ParameterNumber
-	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) {
+	public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int startNodeId, final String dataset, final Direction direction) {
 		this.walkingSpeed = walkingSpeed;
 		this.runtime = runtime;
 		this.date = date;
 		this.mode = mode;
-		this.nodeId = nodeId;
+		this.startNodeId = startNodeId;
 		this.dataset = dataset;
-		this.maxMemory = maxMemory;
 		this.direction = direction;
 	}
 	// CHECKSTYLE:ON ParameterNumber
@@ -65,16 +61,12 @@ final class TestParameters {
 		return direction;
 	}
 
-	public int getMaxMemory() {
-		return maxMemory;
-	}
-
 	public Mode getMode() {
 		return mode;
 	}
 
-	public int getNodeId() {
-		return nodeId;
+	public int getStartNodeId() {
+		return startNodeId;
 	}
 
 	public int getRuntime() {