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 455004593115dca78e2a7109175c0921536114a9..8ba1d4f31eb5064e67086773395bab8396df3d8f 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
@@ -9,6 +9,27 @@ import java.lang.reflect.InvocationTargetException;
 import org.testng.Assert;
 
 final class AlgorithmHelper {
+	public static final class AlgorithmResult {
+		private final Isochrone algorithm;
+		private final MemoryOutput output;
+
+		private AlgorithmResult(final Isochrone algorithm) {
+			super();
+			this.algorithm = algorithm;
+			output = algorithm.compute();
+
+			// output created from output -> we can savely close it here
+			algorithm.close();
+		}
+
+		public Isochrone getAlgorithm() {
+			return algorithm;
+		}
+
+		public MemoryOutput getOutput() {
+			return output;
+		}
+	}
 
 	// Constructor
 
@@ -16,13 +37,13 @@ final class AlgorithmHelper {
 
 	// Public static methods
 
-	public static MemoryOutput run(final Class<? extends Isochrone> algorithmClass, final TestParameters params) {
+	public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params) {
 		return run(algorithmClass, params, true);
 	}
 
-	public static MemoryOutput 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());
+	public static AlgorithmResult run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) {
+		final ConfigDataset c = ConfigDataset.getInstance(params.getDataset());
+		final Query query = new Query(params.getDirection(), params.getWalkingSpeed(), params.getDuration(), params.getDate(), expireNodes, params.getMode());
 		query.setStartNodeIds(params.getStartNodeId());
 
 		Isochrone algorithm = null;
@@ -32,10 +53,7 @@ final class AlgorithmHelper {
 			Assert.fail(e.getMessage());
 		}
 
-		final MemoryOutput o = algorithm.compute();
-		algorithm.close();
-
-		return o;
+		return new AlgorithmResult(algorithm);
 	}
 
 }
diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
index 5abb7219288ac58237f3ee8507272477eeb0e1a6..37f2467cd89cb1b84d426b145f0b451798597e0a 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
@@ -195,13 +195,13 @@ public final class AlgorithmRuntimeTest {
 
 			final Collection<TestParameters> dsParams = datasets.get(dsName);
 			for (final TestParameters params : dsParams) {
-				LOGGER.debug(" - executing for isochrone duration: " + params.getRuntime());
+				LOGGER.debug(" - executing for isochrone duration: " + params.getDuration());
 				final long startTime = Calendar.getInstance().getTimeInMillis();
 				AlgorithmHelper.run(clazz, params);
 
 				final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
-				LOGGER.debug(" - runtime \"" + params.getRuntime() + "\": " + runTime + "msec");
-				addRuntimeEntry(String.valueOf(params.getRuntime()), clazz.getSimpleName(), runTime);
+				LOGGER.debug(" - runtime \"" + params.getDuration() + "\": " + runTime + "msec");
+				addRuntimeEntry(String.valueOf(params.getDuration()), clazz.getSimpleName(), runTime);
 				runTimeOverall += runTime;
 			}
 
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 02d72cffd8c9b0da6eda0d91b48fbe53339eb6bc..6f9c69ec1c709409b60c66025d5be40f1fe9dc0c 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java
@@ -84,11 +84,11 @@ public class AlgorithmTest {
 	}
 
 	private static void run(final Class<? extends Isochrone> algorithmClass, final TestParameters params, final boolean expireNodes) {
-		LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"");
-		long startTime = Calendar.getInstance().getTimeInMillis();
+		LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : ""));
+		final long startTime = Calendar.getInstance().getTimeInMillis();
 		AlgorithmHelper.run(algorithmClass, params, expireNodes);
-		long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
-		LOGGER.info(" - runtime: \"" + params.getRuntime() + "\": " + runTime + "msec");
+		final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
+		LOGGER.info(" - runtime: \"" + params.getDuration() + "\": " + runTime + "msec");
 		LOGGER.info("-----------------------------");
 	}
 
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 6ecff85b0a45bea943a25425c7c7482f9fa06dc6..d02a8da31a6361ce4ebefae21996e65d85c15f12 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
@@ -115,7 +115,7 @@ public final class ComparisonTest {
 		// CHECKSTYLE:ON MagicNumber
 
 		final Collection<String> datasetNames = datasetParams.keySet();
-		for (String dsName : datasetNames) {
+		for (final String dsName : datasetNames) {
 			addDataset(dsName);
 		}
 	}
@@ -127,10 +127,10 @@ public final class ComparisonTest {
 
 		times = new TreeSet<>();
 		for (int i = 0; i < RUNTIME_OFFSETS.length; ++i) {
-			int offset = RUNTIME_OFFSETS[i];
-			int stepWidth = RUNTIME_POINTS_PER_OFFSET[i];
+			final int offset = RUNTIME_OFFSETS[i];
+			final int stepWidth = RUNTIME_POINTS_PER_OFFSET[i];
 			for (int j = 0; j < offset; j += stepWidth) {
-				int runtime = Math.max(offset, offset * j);
+				final int runtime = Math.max(offset, offset * j);
 				if (runtime > MAX_RUNTIME) {
 					return;
 				}
@@ -144,14 +144,14 @@ public final class ComparisonTest {
 		final String n1 = clazz1.getSimpleName();
 		final String n2 = clazz2.getSimpleName();
 		final Set<String> datasetNames = datasets.keySet();
-		for (String dsName : datasetNames) {
+		for (final String dsName : datasetNames) {
 			LOGGER.info("Comparing results for " + n1 + " and " + n2 + " on dataset \"" + dsName + "\"");
 
 			final Collection<TestParameters> dsParams = datasets.get(dsName);
 			for (final TestParameters params : dsParams) {
-				LOGGER.debug(" - comparing for isochrone duration: " + params.getRuntime());
-				final MemoryOutput o1 = AlgorithmHelper.run(clazz1, params);
-				final MemoryOutput o2 = AlgorithmHelper.run(clazz2, params);
+				LOGGER.debug(" - comparing for isochrone duration: " + params.getDuration());
+				final MemoryOutput o1 = AlgorithmHelper.run(clazz1, params).getOutput();
+				final MemoryOutput o2 = AlgorithmHelper.run(clazz2, params).getOutput();
 				final Map<Integer, Link> l1 = o1.getLinks();
 				final Map<Integer, Link> l2 = o2.getLinks();
 
diff --git a/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java b/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..87aa0fb94f0e81cc47db444be26c41005e7287da
--- /dev/null
+++ b/src/test/java/it/unibz/inf/isochrone/network/ExpirationTest.java
@@ -0,0 +1,63 @@
+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.AlgorithmHelper.AlgorithmResult;
+
+import java.util.Calendar;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class ExpirationTest {
+	private static final Logger LOGGER = LoggerFactory.getLogger(ExpirationTest.class);
+
+	// Public methods
+
+	@Test
+	public void testMDijkstraDefault() {
+		final int nrNodesAll = run(MDijkstra.class, false);
+		final int nrNodesExpired = run(MDijkstra.class, true);
+
+		Assert.assertEquals(nrNodesAll, nrNodesExpired, "It seems like nodes expired when setting expire to true for MDijkstra, but this algorithm does not support expiration");
+	}
+
+	@Test
+	public void testMineXDefault() {
+		final int nrNodesAll = run(MineX.class, false);
+		final int nrNodesExpired = run(MineX.class, true);
+
+		Assert.assertTrue(nrNodesAll > nrNodesExpired, "It seems like no nodes were expired when setting expire to true for MineX");
+	}
+
+	@Test
+	public void testMrneXDefault() {
+		final int nrNodesAll = run(MrneX.class, false);
+		final int nrNodesExpired = run(MrneX.class, true);
+
+		Assert.assertTrue(nrNodesAll > nrNodesExpired, "It seems like no nodes were expired when setting expire to true for MrneX");
+	}
+
+	// Private static methods
+
+	private static int run(final Class<? extends Isochrone> algorithmClass, final boolean expireNodes) {
+		LOGGER.info("Executing \"" + algorithmClass.getSimpleName() + "\"" + ((expireNodes) ? " (with node expiration)" : ""));
+		final TestParameters params = new TestParameters();
+		final long startTime = Calendar.getInstance().getTimeInMillis();
+		final AlgorithmResult result = AlgorithmHelper.run(algorithmClass, params, expireNodes);
+		final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
+		final int nrNodesMemory = result.getAlgorithm().getNodes().size();
+		final int nrNodesOutput = result.getOutput().getNodes().size();
+		LOGGER.info(" - runtime: \"" + params.getDuration() + "\": " + runTime + "msec");
+		LOGGER.info(" - nodes (in memory): \"" + nrNodesMemory + "");
+		LOGGER.info(" - nodes (in output): \"" + nrNodesOutput + "");
+		LOGGER.info("-----------------------------");
+
+		return nrNodesMemory;
+	}
+
+}
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 415b7d74c73de387fb120ee8dce3badad396b91d..b000858da45da91db3222875e596bec9d04c13be 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java
@@ -12,15 +12,15 @@ import java.util.GregorianCalendar;
  */
 final class TestParameters {
 	private static final double DEFAULT_WALKING_SPEED = 1.0d;
-	private static final int DEFAULT_RUNTIME = 3660;
+	private static final int DEFAULT_DURATION = 3660;
 	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 int DEFAULT_STARTNODE_ID = 2000500;
 	private static final String DEFAULT_DATASET = "bz";
 	private static final Direction DEFAULT_DIRECTION = Direction.INCOMING;
 
 	private final double walkingSpeed;
-	private final int runtime;
+	private final int duration;
 	private final Calendar date;
 	private final Mode mode;
 	private final int startNodeId;
@@ -29,18 +29,18 @@ final class TestParameters {
 
 	public TestParameters() {
 		walkingSpeed = DEFAULT_WALKING_SPEED;
-		runtime = DEFAULT_RUNTIME;
+		duration = DEFAULT_DURATION;
 		date = DEFAULT_DATE;
 		mode = DEFAULT_MODE;
-		startNodeId = DEFAULT_NODE_ID;
+		startNodeId = DEFAULT_STARTNODE_ID;
 		dataset = DEFAULT_DATASET;
 		direction = DEFAULT_DIRECTION;
 	}
 
 	// CHECKSTYLE:OFF ParameterNumber
-	public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int startNodeId, final String dataset, final Direction direction) {
+	public TestParameters(final double walkingSpeed, final int duration, final Calendar date, final Mode mode, final int startNodeId, final String dataset, final Direction direction) {
 		this.walkingSpeed = walkingSpeed;
-		this.runtime = runtime;
+		this.duration = duration;
 		this.date = date;
 		this.mode = mode;
 		this.startNodeId = startNodeId;
@@ -69,8 +69,8 @@ final class TestParameters {
 		return startNodeId;
 	}
 
-	public int getRuntime() {
-		return runtime;
+	public int getDuration() {
+		return duration;
 	}
 
 	public double getWalkingSpeed() {