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 dc4e4760cb7c56e7775da70ece04f706382d99d9..49c4dfa99bce5f743aaad254f2bac70f93d8bddf 100644
--- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
+++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java
@@ -5,6 +5,7 @@ import it.unibz.inf.isochrone.db.Database;
 import it.unibz.inf.isochrone.network.AbstractOutput;
 import it.unibz.inf.isochrone.network.IOutput;
 import it.unibz.inf.isochrone.network.Link;
+import it.unibz.inf.isochrone.network.LinkCollection;
 import it.unibz.inf.isochrone.network.Location;
 import it.unibz.inf.isochrone.network.MemoryOutput;
 import it.unibz.inf.isochrone.network.Node;
@@ -161,19 +162,18 @@ public abstract class Isochrone {
 		NodeConnection dConnections = null;
 		while ((node = nodeQueue.poll()) != null) {
 			final int nodeId = node.getId();
-			new NodeConnection(node);
 
-			final Collection<Link> targets = calcAdjLinks(nodeId);
+			final LinkCollection links = new LinkCollection(calcAdjLinks(nodeId));
 			output.addNode(node);
 			node.close();
 
-			cConnections = prepareContinuousLinks(node, targets);
+			cConnections = prepareContinuousLinks(node, links);
 			updateNodeQueue(expandContinuousLinks(cConnections));
 
-			dConnections = prepareDiscreteLinks(node, targets);
+			dConnections = prepareDiscreteLinks(node, links);
 			updateNodeQueue(expandDiscreteLinks(dConnections));
 
-			addLinks(output, targets);
+			output.addLinks(links.getContinuousTargets());
 			if (qIsExpiring && node.isExpired()) {
 				removeNode(nodeId);
 			}
@@ -223,7 +223,7 @@ public abstract class Isochrone {
 			}
 		} else {
 			nConnection.addLink(targetNode, link);
-		}
+	}
 	}
 
 	/**
@@ -359,26 +359,25 @@ public abstract class Isochrone {
 		}
 	}
 
-	private NodeConnection prepareContinuousLinks(final Node node, final Collection<Link> links) {
+	private NodeConnection prepareContinuousLinks(final Node node, final LinkCollection links) {
 		final NodeConnection nConnection = new NodeConnection(node);
 		final double nodeDistance = node.getDistance();
 
-		for (final Link link : links) {
-			if (link.isContinuous()) {
-				prepareLinkOffsets(link, nodeDistance);
-				addTargetNode(nConnection, node, link);
-			}
+		final Collection<Link> cLinks = links.getContinuousTargets();
+		for (final Link link : cLinks) {
+			prepareLinkOffsets(link, nodeDistance);
+			addTargetNode(nConnection, node, link);
 		}
 
 		return nConnection;
 	}
 
-	private NodeConnection prepareDiscreteLinks(final Node node, final Collection<Link> links) {
+	private NodeConnection prepareDiscreteLinks(final Node node, final LinkCollection links) {
 		final NodeConnection nConnection = new NodeConnection(node);
-		for (final Link link : links) {
-			if (!link.isContinuous()) {
-				addTargetNode(nConnection, node, link);
-			}
+
+		final Collection<Link> dLinks = links.getDiscreteTargets();
+		for (final Link link : dLinks) {
+			addTargetNode(nConnection, node, link);
 		}
 
 		return nConnection;
@@ -427,14 +426,4 @@ public abstract class Isochrone {
 		}
 	}
 
-	// Private static methods
-
-	private static <T extends IOutput> void addLinks(final T output, final Collection<Link> links) {
-		final Double min = Double.MIN_VALUE;
-		for (final Link link : links) {
-			if (link.isContinuous() && !min.equals(link.getStartOffset())) {
-				output.addLink(link);
-			}
-		}
-	}
 }
diff --git a/src/main/java/it/unibz/inf/isochrone/network/LinkCollection.java b/src/main/java/it/unibz/inf/isochrone/network/LinkCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8a6f79e344a388b827b9c628af4b9bfc20d2690
--- /dev/null
+++ b/src/main/java/it/unibz/inf/isochrone/network/LinkCollection.java
@@ -0,0 +1,31 @@
+package it.unibz.inf.isochrone.network;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class LinkCollection {
+	private final Collection<Link> cTargets;
+	private final Collection<Link> dTargets;
+
+	public LinkCollection(final Collection<Link> links) {
+		cTargets = new ArrayList<>();
+		dTargets = new ArrayList<>();
+
+		for (final Link l : links) {
+			if (l.isContinuous()) {
+				cTargets.add(l);
+			} else {
+				dTargets.add(l);
+			}
+		}
+	}
+
+	public Collection<Link> getContinuousTargets() {
+		return cTargets;
+	}
+
+	public Collection<Link> getDiscreteTargets() {
+		return dTargets;
+	}
+
+}