diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java
index 1ff2fd3..1584a37 100644
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java
+++ b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java
@@ -41,16 +41,20 @@
 
 	/**
 	 * Used to get internal links connected to a selected element.
-	 * @param element 
-	 * 			the selected element
+	 * 
+	 * @param element
+	 *            the selected element
 	 * @param traceModel
-	 * 			the current trace model
+	 *            the current trace model
 	 * @param selectedRelationshipTypes
-	 * 			the selected relationship types from the filter, if the user has selected any
+	 *            the selected relationship types from the filter, if the user
+	 *            has selected any
 	 * @param maximumDepth
-	 * 			The maximum depth the transitivity should go. 0 means show all the links
+	 *            The maximum depth the transitivity should go. 0 means show all
+	 *            the links
 	 * @param existingTraces
-	 * 			The trace links that have been created manually by the user, these are obtained from the trace model
+	 *            The trace links that have been created manually by the user,
+	 *            these are obtained from the trace model
 	 */
 	public List<Connection> getInternalElementsTransitive(EObject element, EObject traceModel,
 			List<String> selectedRelationshipTypes, int maximumDepth, List<Connection> existingTraces) {
@@ -64,7 +68,6 @@
 			List<String> selectedRelationshipTypes, boolean traceLinksTransitive, int transitivityDepth,
 			List<Connection> existingTraces) {
 		List<Connection> allElements = new ArrayList<>();
-		ArrayList<Integer> duplicationCheck = new ArrayList<>();
 		List<Connection> directElements;
 		if (traceLinksTransitive) {
 			directElements = getTransitivelyConnectedElements(element, traceModel, selectedRelationshipTypes,
@@ -98,8 +101,8 @@
 			for (EObject o : conn.getTargets()) {
 				@SuppressWarnings("unchecked")
 				IArtifactHandler<Object> handler = (IArtifactHandler<Object>) artifactHelper.getHandler(o).orElse(null);
-				handler.addInternalLinks(o, allElements, duplicationCheck, selectedRelationshipTypes);
-				
+				allElements.addAll(handler.addInternalLinks(o, selectedRelationshipTypes));
+
 			}
 		}
 
@@ -107,22 +110,22 @@
 			@SuppressWarnings("unchecked")
 			IArtifactHandler<Object> handler = (IArtifactHandler<Object>) artifactHelper.getHandler(element)
 					.orElse(null);
-			handler.addInternalLinks(element, allElements, duplicationCheck, selectedRelationshipTypes);
+			allElements.addAll(handler.addInternalLinks(element, selectedRelationshipTypes));
 		}
 		return allElements;
 	}
 
 	@Override
 	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
-		
-			ResourceSet resourceSet = new ResourceSetImpl();
-			TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-			EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
-			ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
-			IArtifactHandler<?> handlerFirstElement = artifactHelper.getHandler(first).orElse(null);
-			IArtifactHandler<?> handlerSecondElement = artifactHelper.getHandler(second).orElse(null);
 
-			return handlerFirstElement.isThereAnInternalTraceBetween(first, second)
-					|| handlerSecondElement.isThereAnInternalTraceBetween(first, second);
+		ResourceSet resourceSet = new ResourceSetImpl();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		IArtifactHandler<?> handlerFirstElement = artifactHelper.getHandler(first).orElse(null);
+		IArtifactHandler<?> handlerSecondElement = artifactHelper.getHandler(second).orElse(null);
+
+		return handlerFirstElement.isThereAnInternalTraceBetween(first, second)
+				|| handlerSecondElement.isThereAnInternalTraceBetween(first, second);
 	}
 }
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java
index 39a3cad..1f3fd02 100644
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java
+++ b/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.capra.core.handlers;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.function.BiFunction;
@@ -104,7 +103,6 @@
 	 */
 	Class<T> getHandledClass();
 
-
 	/**
 	 * When a change in the resource occurs, it generates the message that is to
 	 * be displayed by the Capra marker.
@@ -113,26 +111,34 @@
 	 *            represents changes in the state of a resource
 	 * @param wrapperUri
 	 *            uri of the artifact that is associated with the change
-	 * @return the Capra marker message. Every marker must return a unique message.
-         *         If the message already exists it will be ignoored and a marker will 
-         *         not be created.
+	 * @return the Capra marker message. Every marker must return a unique
+	 *         message. If the message already exists it will be ignoored and a
+	 *         marker will not be created.
 	 */
 	String generateMarkerMessage(IResourceDelta delta, String wrapperUri);
-	
+
 	/**
-	 * Adds internal links related to a given element
+	 * Adds internal links related to a given element.
+	 * <p>
+	 * This is helpful if Eclipse Capra should include links within a DSL, e.g.,
+	 * associations between classes, in its visualisations and analysis. A
+	 * handler that implements this method should return a list of
+	 * {@code Connection}. This list will be used in visualisations and
+	 * analysis, but not persisted in Capra's own trace model.
 	 * 
 	 * @param investigatedElement
-	 *            Element currently under investigation for links
-	 * @param allElements
-	 *            List of all elements for Plant-uml view
-	 * @param duplicationCheck
-	 *            List of String for checking for duplication
-	 * @param selectedRelationshipTypes 
-	 * 			  relationship types selected by the user to be displayed in the plantUML view
+	 *            element currently under investigation for links
+	 * @param selectedRelationshipTypes
+	 *            relationship types selected by the user; this ensures that
+	 *            Capra only includes specific link types in the visualisation
+	 *            and analysis and implementation of the method should filter on
+	 *            this list
+	 * 
+	 * @return a list of {@link Connection} between the
+	 *         {@code investigatedElement} and other elements the handler takes
+	 *         care of
 	 */
-	void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes);
+	List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes);
 
 	/**
 	 * Decide if two objects have an internal link between them.
diff --git a/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java b/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
index 855eb87..af71df6 100644
--- a/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
+++ b/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.cdt;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.http.client.utils.URIBuilder;
@@ -33,7 +33,8 @@
  * Handler to allow tracing to and from elements of C such as files and
  * functions. Uses CDT as the foundation.
  * </p>
- * This handler encodes a locator to the C element in artifact URI:s in the following way:
+ * This handler encodes a locator to the C element in artifact URI:s in the
+ * following way:
  * {@code platform:/Project_name/path/to/file.c#classOrStructName/memberName}
  * <p/>
  * {@code platform:/Project_name/path/to/file.c#functionClassOrStructName}.
@@ -43,25 +44,25 @@
 	@Override
 	public EObject createWrapper(ICElement element, EObject artifactModel) {
 		ICompositeType type = (ICompositeType) element.getParent().getAncestor(ICElement.C_CLASS);
-		if (type == null) type = (ICompositeType) element.getParent().getAncestor(ICElement.C_STRUCT);
-		if (type == null) type = (ICompositeType) element.getParent().getAncestor(ICElement.C_UNION);
-		
+		if (type == null)
+			type = (ICompositeType) element.getParent().getAncestor(ICElement.C_STRUCT);
+		if (type == null)
+			type = (ICompositeType) element.getParent().getAncestor(ICElement.C_UNION);
+
 		// TODO: Will this be unique? I don't know.
 		String typePrefix = type == null ? "" : type.getName() + "/";
 
-		// TODO: This does not take C++ function overloading on argument types into account when
+		// TODO: This does not take C++ function overloading on argument types
+		// into account when
 		// constructing the URI
-		String uri = new URIBuilder()
-			.setScheme("platform")
-			.setPath("/resource" + element.getPath())
-			.setFragment(typePrefix + element.getElementName())
-			.toString();
+		String uri = new URIBuilder().setScheme("platform").setPath("/resource" + element.getPath())
+				.setFragment(typePrefix + element.getElementName()).toString();
 
-			ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-			EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(),
-					uri, element.getHandleIdentifier(), element.getElementName(), element.getPath().toString());
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), uri,
+				element.getHandleIdentifier(), element.getElementName(), element.getPath().toString());
 
-			return wrapper;
+		return wrapper;
 	}
 
 	@Override
@@ -78,11 +79,12 @@
 	@Override
 	public void annotateArtifact(EObject wrapper, String annotation) throws AnnotationException {
 		IEclipsePreferences preferences = CDTPreferences.getPreferences();
-		
-		if (!preferences.getBoolean(CDTPreferences.ANNOTATE_CDT, CDTPreferences.ANNOTATE_CDT_DEFAULT)) return;
-		
+
+		if (!preferences.getBoolean(CDTPreferences.ANNOTATE_CDT, CDTPreferences.ANNOTATE_CDT_DEFAULT))
+			return;
+
 		ICElement handle = resolveWrapper(wrapper);
-		
+
 		try {
 			CDTAnnotate.annotateArtifact(handle, annotation);
 		} catch (CoreException e) {
@@ -96,9 +98,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for C code
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for C code
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java b/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
index 97b4304..f9581eb 100644
--- a/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
+++ b/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.emf;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.Connection;
@@ -45,9 +45,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for EMF models
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java b/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java
index 7758d85..3f0c698 100644
--- a/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java
+++ b/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.featureide;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -49,10 +49,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
 		// Method currently left empty to wait for user requirements of relevant
-		// internal links for feature models
+		// internal links for FeatureIDE models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java b/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
index da4bcba..e2ba325 100644
--- a/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
+++ b/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.file;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -18,9 +18,9 @@
 import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.emf.ecore.EObject;
 
 /**
@@ -57,9 +57,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for Files
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java b/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
index c8f014a..f5f3826 100644
--- a/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
+++ b/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.gef;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.Connection;
@@ -48,9 +48,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for GEF models
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java b/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java
index 052d53a..98e5fde 100644
--- a/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java
+++ b/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.hudson;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -22,8 +22,8 @@
 import org.eclipse.mylyn.builds.internal.core.BuildElement;
 
 /**
- * A handler to allow tracing to and from build elements handled by the continuous
- * integration server Hudson via the integrated Mylyn facilities.
+ * A handler to allow tracing to and from build elements handled by the
+ * continuous integration server Hudson via the integrated Mylyn facilities.
  */
 public class BuildElementHandler extends AbstractArtifactHandler<BuildElement> {
 
@@ -53,9 +53,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for Build Elements
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java b/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java
index 6a3f45b..ddba107 100644
--- a/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java
+++ b/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.hudson;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -22,8 +22,8 @@
 import org.eclipse.mylyn.builds.internal.core.TestElement;
 
 /**
- * A handler to allow tracing to and from test elements handled by the continuous
- * integration server Hudson via the integrated Mylyn facilities.
+ * A handler to allow tracing to and from test elements handled by the
+ * continuous integration server Hudson via the integrated Mylyn facilities.
  */
 public class TestElementHandler extends AbstractArtifactHandler<TestElement> {
 
@@ -54,9 +54,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for Test Elements
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java b/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
index 8c87fb0..0acd3d1 100644
--- a/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
+++ b/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
@@ -12,7 +12,7 @@
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -41,7 +41,8 @@
  * A handler to allow creating traces to and from java elements such as classes
  * and methods based on JDT.
  * </p>
- * This handler encodes a locator to the Java element in artifact URI:s in the following way:
+ * This handler encodes a locator to the Java element in artifact URI:s in the
+ * following way:
  * {@code platform:/Project_name/path/to/file.java#com.pack.ClassName/methodName}.
  */
 public class JavaElementHandler extends AbstractArtifactHandler<IJavaElement> implements IAnnotateArtifact {
@@ -49,34 +50,32 @@
 	@Override
 	public EObject createWrapper(IJavaElement element, EObject artifactModel) {
 		IType type = (IType) element.getParent().getAncestor(IJavaElement.TYPE);
-		
+
 		String fragment;
 		if (type == null) {
 			if (element.getElementType() == IJavaElement.TYPE) {
 				// Top level classes get their fully qualified name
 				fragment = ((IType) element).getFullyQualifiedName();
 			} else {
-				// This will probably never happen, if something doesn't 
+				// This will probably never happen, if something doesn't
 				// have a type ancestor it is always a type itself
 				fragment = element.getElementName();
 			}
 		} else {
-			// Case for members: A list of '/' separated type names, followed by a member name
+			// Case for members: A list of '/' separated type names, followed by
+			// a member name
 			fragment = type.getFullyQualifiedName().replaceAll("\\$", "/") + "/" + element.getElementName();
 		}
-		
-		URIBuilder uriBuilder = new URIBuilder()
-			.setScheme("platform")
-			.setPath("/resource" + element.getPath())
-			.setFragment(fragment);
+
+		URIBuilder uriBuilder = new URIBuilder().setScheme("platform").setPath("/resource" + element.getPath())
+				.setFragment(fragment);
 
 		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
 
 		String displayName = (type == null ? "" : (type.getElementName() + ".")) + element.getElementName();
-		
-		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), 
-			uriBuilder.toString(), element.getHandleIdentifier(), 
-			displayName,  element.getPath().toString());
+
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), uriBuilder.toString(),
+				element.getHandleIdentifier(), displayName, element.getPath().toString());
 
 		return wrapper;
 	}
@@ -161,9 +160,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for Java code
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java b/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
index 9e342d1..70e124a 100644
--- a/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
+++ b/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.marker;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -70,10 +70,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Intentionally do nothing
-
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java b/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
index addb961..ee0868a 100644
--- a/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
+++ b/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.mylyn;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -51,9 +51,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for Mylyn tasks
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java b/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java
index 345a26c..2921717 100644
--- a/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java
+++ b/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.capra.handler.office;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -62,9 +62,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for Office files
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Office documents.
+		return Collections.emptyList();
 	}
 
 	@Override
@@ -72,5 +73,4 @@
 		return false;
 	}
 
-	
 }
diff --git a/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java b/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
index cf2f413..0e11538 100644
--- a/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
+++ b/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.papyrus;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.Connection;
@@ -26,7 +26,6 @@
  */
 public class PapyrusHandler extends AbstractArtifactHandler<EObjectTreeElement> {
 
-
 	@Override
 	public EObject createWrapper(EObjectTreeElement artifact, EObject artifactModel) {
 		// Returns the EObject corresponding to the input object if the input is
@@ -44,17 +43,19 @@
 		EObject sel = EMFHelper.getEObject(artifact);
 		return org.eclipse.capra.core.helpers.EMFHelper.getIdentifier(sel); // TODO
 	}
-	
+
 	@Override
 	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
 		return null;
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links specific for Papyrus models. 
-		//Currently, UML links such as association and those from the SYSML Profile are handled by the UML Handler	
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links specific for Papyrus models.
+		// Currently, UML links such as association and those from the SYSML
+		// Profile are handled by the UML Handler.
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java b/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java
index 2e5981e..b3020fc 100644
--- a/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java
+++ b/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java
@@ -1,6 +1,6 @@
 package org.eclipse.capra.handler.php;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
@@ -41,9 +41,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for PHP Code
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for PHP code.
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java b/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
index 6de0265..fc41431 100644
--- a/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
+++ b/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.handler.reqif;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.capra.core.adapters.Connection;
@@ -46,9 +46,10 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
-		// Method currently left empty to wait for user requirements of relevant internal links for REQIF requirements
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for REQIF requirements.
+		return Collections.emptyList();
 	}
 
 	@Override
diff --git a/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java b/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java
index bddad2c..fd40013 100644
--- a/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java
+++ b/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java
@@ -55,8 +55,9 @@
 	}
 
 	@Override
-	public void addInternalLinks(EObject investigatedElement, List<Connection> allElements,
-			ArrayList<Integer> duplicationCheck, List<String> selectedRelationshipTypes) {
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		List<Integer> duplicationCheck = new ArrayList<>();
+		List<Connection> allElements = new ArrayList<>();
 		if (Relationship.class.isAssignableFrom(investigatedElement.getClass())) {
 			if (selectedRelationshipTypes.size() == 0
 					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
@@ -329,6 +330,7 @@
 				}
 			}
 		}
+		return allElements;
 	}
 
 	@Override
diff --git a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
index 883374b..6901732 100644
--- a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
+++ b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
Binary files differ
