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 d34e73a9aa72c0771708eb4b8cecfc3a9717c612..1478d901caf49fabd0681452aa87e2723491defe 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmHelper.java
@@ -6,12 +6,15 @@ import it.unibz.inf.isochrone.util.Query;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
 import org.testng.Assert;
 
 final class AlgorithmHelper {
+	private static Map<AlgorithmConfiguration, AlgorithmResult> cache = new HashMap<>();
 	public static final class AlgorithmResult {
 		private final Isochrone algorithm;
 		private final MemoryOutput output;
@@ -49,7 +52,25 @@ final class AlgorithmHelper {
 		return i1;
 	}
 
+	public static AlgorithmResult run(final AlgorithmConfiguration config, final boolean useCache) {
+		if (!useCache) {
+			return AlgorithmHelper.compute(config);
+		}
+
+		AlgorithmResult result = cache.get(config);
+		if (result == null) {
+			result = run(config, false);
+			cache.put(config, result);
+		}
+
+		return result;
+	}
+
 	public static AlgorithmResult run(final AlgorithmConfiguration config) {
+		return run(config, true);
+	}
+
+	private static AlgorithmResult compute(final AlgorithmConfiguration config) {
 		final TestParameters params = config.getTestParameter();
 		final ConfigDataset c = ConfigDataset.getInstance(params.getDataset());
 		if (c == null) {
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 c6100e99c0d6ec9da77375fe6547f12ffdd155e3..2018a9cecd35941b8488c6c8e6dc2b389b0b37f3 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmRuntimeTest.java
@@ -203,7 +203,7 @@ public final class AlgorithmRuntimeTest {
 			for (final TestParameters params : dsParams) {
 				LOGGER.debug(" - executing for isochrone duration: " + params.getDuration());
 				final long startTime = Calendar.getInstance().getTimeInMillis();
-				AlgorithmHelper.run(new AlgorithmConfiguration(clazz, params));
+				AlgorithmHelper.run(new AlgorithmConfiguration(clazz, params), false);
 
 				final long runTime = Calendar.getInstance().getTimeInMillis() - startTime;
 				LOGGER.debug(" - runtime \"" + params.getDuration() + "\": " + runTime + "msec");
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 814fc838bdec43d15162f4eecd88437d42547962..73f147e798f1f1be17d3ed7079ac86326734c507 100644
--- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
+++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java
@@ -42,7 +42,6 @@ public final class ComparisonTest {
 		2, 		// every 2 hours
 		1		// every day
 	};
-	private static Map<AlgorithmConfiguration, Collection<Integer>> cache = new HashMap<>();
 	private static Map<String, List<TestParameters>> datasets = new HashMap<>();
 	private static Map<String, InitParams> datasetParams;
 	private static Set<Integer> times;
@@ -119,18 +118,6 @@ public final class ComparisonTest {
 		datasets.put(datasetName, dsParams);
 	}
 
-	private static Collection<Integer> getResult(final AlgorithmConfiguration key) {
-		Collection<Integer> result = cache.get(key);
-		if (result == null) {
-			final MemoryOutput o1 = AlgorithmHelper.run(key).getOutput();
-			result = AlgorithmHelper.getDistinctIds(o1.getLinks());
-
-			cache.put(key, result);
-		}
-
-		return result;
-	}
-
 	private static synchronized void initDatasets() {
 		if (datasetParams != null) {
 			return;
@@ -184,8 +171,10 @@ public final class ComparisonTest {
 			final Collection<TestParameters> dsParams = datasets.get(dsName);
 			for (final TestParameters params : dsParams) {
 				LOGGER.debug(" - comparing for isochrone duration: " + params.getDuration());
-				final Collection<Integer> l1 = getResult(new AlgorithmConfiguration(clazz1, params, expireNodes));
-				final Collection<Integer> l2 = getResult(new AlgorithmConfiguration(clazz2, params, expireNodes));
+				final MemoryOutput o1 = AlgorithmHelper.run(new AlgorithmConfiguration(clazz1, params, expireNodes)).getOutput();
+				final MemoryOutput o2 = AlgorithmHelper.run(new AlgorithmConfiguration(clazz2, params, expireNodes)).getOutput();
+				final Collection<Integer> l1 = AlgorithmHelper.getDistinctIds(o1.getLinks());
+				final Collection<Integer> l2 = AlgorithmHelper.getDistinctIds(o2.getLinks());
 				Assert.assertEquals(l1, l2,  "Links from algorithm \"" + n1 + "\"" + " are not equal to links from algorithm \"" + n2 + "\"");
 			}
 			LOGGER.info("-----------------------------");