Merge branch 'develop'

Change-Id: I773d071ba952b8903dffaa582263821612005b3b
diff --git a/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF
index 5a52029..1fe7850 100644
--- a/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.core;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.core.resources
diff --git a/bundles/org.eclipse.capra.core/pom.xml b/bundles/org.eclipse.capra.core/pom.xml
index c6f0ee5..e7a98f3 100644
--- a/bundles/org.eclipse.capra.core/pom.xml
+++ b/bundles/org.eclipse.capra.core/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.core</artifactId>
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
index 858c083..78c70d9 100644
--- a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
@@ -24,8 +24,8 @@
  * handling EMF models.
  */
 public class EMFHelper {
-	
-	private EMFHelper () {
+
+	private EMFHelper() {
 		super();
 	}
 
@@ -33,17 +33,16 @@
 	 * Builds an identifier String for the given EObject. This identifier starts
 	 * with
 	 * <ul>
-	 * <li>the attribute of the EObject as a String, if the EObject does only
-	 * have one attribute.</li>
+	 * <li>the attribute of the EObject as a String, if the EObject does only have
+	 * one attribute.</li>
 	 * <li>the attribute called 'name' of the EObject, if it has such an
 	 * attribute</li>
-	 * <li>any attribute of the EObject, but String attributes are preferred
-	 * </li>
+	 * <li>any attribute of the EObject, but String attributes are preferred</li>
 	 * </ul>
 	 * The identifier ends with " : " followed by the type of the EObject. <br>
 	 * Example: A Node with the name "foo" will result in "foo : Node" <br>
-	 * If the EObject does not have any attributes or all attributes have the
-	 * value null, this function will only return the type of the EObject.
+	 * If the EObject does not have any attributes or all attributes have the value
+	 * null, this function will only return the type of the EObject.
 	 */
 	public static String getIdentifier(final EObject eObject) {
 		if (eObject == null) {
@@ -78,10 +77,9 @@
 	}
 
 	/**
-	 * @param name
-	 *            Use an empty StringBuilder as input. If this function returns
-	 *            true, this parameter has been filled, if it returns false,
-	 *            nothing happened.
+	 * @param name Use an empty StringBuilder as input. If this function returns
+	 *             true, this parameter has been filled, if it returns false,
+	 *             nothing happened.
 	 * @return Indicates the success of this function and if the last parameter
 	 *         contains output.
 	 */
@@ -99,10 +97,9 @@
 	}
 
 	/**
-	 * @param name
-	 *            Use an empty StringBuilder as input. If this function returns
-	 *            true, this parameter has been filled, if it returns false,
-	 *            nothing happened.
+	 * @param name Use an empty StringBuilder as input. If this function returns
+	 *             true, this parameter has been filled, if it returns false,
+	 *             nothing happened.
 	 * @return Indicates the success of this function and if the last parameter
 	 *         contains output.
 	 */
@@ -123,10 +120,9 @@
 	}
 
 	/**
-	 * @param name
-	 *            Use an empty StringBuilder as input. If this function returns
-	 *            true, this parameter has been filled, if it returns false,
-	 *            nothing happened.
+	 * @param name Use an empty StringBuilder as input. If this function returns
+	 *             true, this parameter has been filled, if it returns false,
+	 *             nothing happened.
 	 * @return Indicates the success of this function and if the last parameter
 	 *         contains output.
 	 */
@@ -157,15 +153,13 @@
 	}
 
 	/**
-	 * Linearizes a tree to a list. The function checks if the provided
-	 * parameter is of type {@link EObject} and linearizes only if that is the
-	 * case.
+	 * Linearizes a tree to a list. The function checks if the provided parameter is
+	 * of type {@link EObject} and linearizes only if that is the case.
 	 * 
-	 * @param object
-	 *            the object to linearize
-	 * @return a list of {@link EObject}s originally contained in the tree
-	 *         structure of the parameter or an empty list if the paramter was
-	 *         not an {@link EObject}
+	 * @param object the object to linearize
+	 * @return a list of {@link EObject}s originally contained in the tree structure
+	 *         of the parameter or an empty list if the paramter was not an
+	 *         {@link EObject}
 	 */
 	public static List<EObject> linearize(Object object) {
 		ArrayList<EObject> elementList = new ArrayList<EObject>();
@@ -177,11 +171,8 @@
 		return elementList;
 	}
 
-	
-
 	/**
-	 * Public API access for other classes to get the name attribute of an
-	 * EObject
+	 * Public API access for other classes to get the name attribute of an EObject
 	 * 
 	 * @param eObject
 	 * @return String
@@ -198,4 +189,35 @@
 		}
 		return name;
 	}
+
+	/**
+	 * Compares to {@link EObject} instances based on their identifier using
+	 * {@link EMFHelper#getIdentifier(EObject)}.
+	 * 
+	 * @param first  the first {@code EObject} to compare
+	 * @param second the second {@code EObject} to compare
+	 * @return {@code true} if the identifiers of the two instances are equal,
+	 *         {@code false} otherwise
+	 */
+	public static boolean hasSameIdentifier(EObject first, EObject second) {
+		return EMFHelper.getIdentifier(first).equals(EMFHelper.getIdentifier(second));
+	}
+
+	/**
+	 * Checks if the given {@link EObject} is in the list of {@code EObject}s using
+	 * {@link #hasSameIdentifier(EObject, EObject)}.
+	 * 
+	 * @param list the list to check
+	 * @param obj  the object to check for
+	 * @return {@code true} if {@code obj} is in {@code list}, {@code false}
+	 *         otherwise
+	 */
+	public static boolean isElementInList(List<EObject> list, EObject obj) {
+		for (EObject next : list) {
+			if (EMFHelper.hasSameIdentifier(obj, next)) {
+				return true;
+			}
+		}
+		return false;
+	}
 }
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/TraceHelper.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/TraceHelper.java
index 7b19076..f9c7d7a 100644
--- a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/TraceHelper.java
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/TraceHelper.java
@@ -14,6 +14,7 @@
 package org.eclipse.capra.core.helpers;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -109,12 +110,25 @@
 		}
 	}
 
+	/**
+	 * Gets connected artifacts from a given {@link Connection}.
+	 * 
+	 * @param connection
+	 * @return a list of unique connected artifacts, either the actual artifacts in
+	 *         case of EMF model elements or artifact wrappers for other artifact
+	 *         types.
+	 */
 	public List<EObject> getTracedElements(Connection connection) {
 		List<EObject> tracedElements = new ArrayList<>();
-		tracedElements.add(connection.getOrigin());
-		tracedElements.addAll(connection.getTargets());
+		if (!tracedElements.contains(connection.getOrigin())) {
+			tracedElements.add(connection.getOrigin());
+		}
+		for (EObject target : connection.getTargets()) {
+			if (!tracedElements.contains(target)) {
+				tracedElements.addAll(connection.getTargets());
+			}
+		}
 		return tracedElements;
-
 	}
 
 	/**
@@ -156,4 +170,76 @@
 				.collect(Collectors.toCollection(ArrayList::new));
 	}
 
+	/**
+	 * Checks if a given EMF element or artifactWrapper is contained in the trace
+	 * model.
+	 * 
+	 * @param artifact the artifact to look for
+	 * @return true if the artifact exists, false otherwise
+	 */
+
+	public boolean isArtifactInTraceModel(EObject artifact) {
+		List<EObject> artifacts = new ArrayList<EObject>();
+		List<Connection> connections = traceAdapter.getAllTraceLinks(traceModel);
+		for (Connection c : connections) {
+			artifacts.addAll(getTracedElements(c));
+		}
+		if (artifacts.contains(artifact)) {
+			return true;
+		} else
+			return false;
+	}
+
+	/**
+	 * Returns a list of connections containing the artifacts passed. Trace links
+	 * that contain a subset (at least 2) of the artifacts passed are also returned.
+	 * 
+	 * @param artifacts a list of EMF artifacts or artifact wrappers
+	 * @return connections containing at least two of the elements in the artifacts
+	 *         passed.
+	 */
+
+	public List<Connection> getTraces(List<EObject> artifacts) {
+		List<Connection> connections = traceAdapter.getAllTraceLinks(traceModel);
+		List<Connection> possibleConnections = new ArrayList<Connection>();
+		List<Connection> relevantConnections = new ArrayList<Connection>();
+		// check if the list of artifact is not null or empty before doing anything
+		if (artifacts != null && !artifacts.isEmpty()) {
+			for (Connection c : connections) {
+				List<EObject> artifactsFromConnection = getTracedElements(c);
+				for (EObject a : artifactsFromConnection) {
+					if (artifacts.contains(a) && !possibleConnections.contains(c)) {
+						possibleConnections.add(c);
+					} else if (artifacts.contains(a) && possibleConnections.contains(c)) {
+						relevantConnections.add(c);
+					}
+				}
+			}
+
+		}
+		return relevantConnections;
+	}
+
+	/**
+	 * Retrieves all unique artifacts connected by the provided collection of
+	 * {@code traces}.
+	 * <p>
+	 * The method will always return a valid set which can be empty.
+	 * 
+	 * @param traces the collection of traces whose artifacts should be retrieved
+	 * @return a set of unique artifacts connected by the provided list of
+	 *         {@code traces}
+	 */
+	public static Set<EObject> getTracedElements(Collection<Connection> traces) {
+		Set<EObject> inserted = new HashSet<>();
+		for (Connection trace : traces) {
+			inserted.add(trace.getOrigin());
+			List<EObject> targets = trace.getTargets();
+			for (EObject target : targets) {
+				inserted.add(target);
+			}
+		}
+		return inserted;
+	}
+
 }
diff --git a/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
index e2512fb..0fe64e5 100644
--- a/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
@@ -4,6 +4,6 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.documentation;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.help
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/bundles/org.eclipse.capra.documentation/pom.xml b/bundles/org.eclipse.capra.documentation/pom.xml
index 747b1b3..95fecc0 100644
--- a/bundles/org.eclipse.capra.documentation/pom.xml
+++ b/bundles/org.eclipse.capra.documentation/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.documentation</artifactId>
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF
index ebb5374..6a40258 100644
--- a/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.generic.artifactmodel;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/pom.xml b/bundles/org.eclipse.capra.generic.artifactmodel/pom.xml
index 82bc283..7169937 100644
--- a/bundles/org.eclipse.capra.generic.artifactmodel/pom.xml
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.generic.artifactmodel</artifactId>
diff --git a/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
index 48c8660..4912c8e 100644
--- a/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.generic.persistence;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.emf,
  org.eclipse.core.resources,
  org.eclipse.core.runtime,
diff --git a/bundles/org.eclipse.capra.generic.persistence/pom.xml b/bundles/org.eclipse.capra.generic.persistence/pom.xml
index 69b0491..0867b73 100644
--- a/bundles/org.eclipse.capra.generic.persistence/pom.xml
+++ b/bundles/org.eclipse.capra.generic.persistence/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.generic.persistence</artifactId>
diff --git a/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
index a7fde75..3ee937b 100644
--- a/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.generic.priority;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.capra.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.capra.generic.priority
diff --git a/bundles/org.eclipse.capra.generic.priority/pom.xml b/bundles/org.eclipse.capra.generic.priority/pom.xml
index 4ab247f..ed2c4df 100644
--- a/bundles/org.eclipse.capra.generic.priority/pom.xml
+++ b/bundles/org.eclipse.capra.generic.priority/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.generic.priority</artifactId>
diff --git a/bundles/org.eclipse.capra.generic.tracemodel/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.tracemodel/META-INF/MANIFEST.MF
index ffea709..cedea4d 100644
--- a/bundles/org.eclipse.capra.generic.tracemodel/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.generic.tracemodel/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.generic.tracemodel;singleton:=true
 Automatic-Module-Name: org.eclipse.capra.generic.tracemodel
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.capra.generic.tracemodel/pom.xml b/bundles/org.eclipse.capra.generic.tracemodel/pom.xml
index 4a68dce..defcb91 100644
--- a/bundles/org.eclipse.capra.generic.tracemodel/pom.xml
+++ b/bundles/org.eclipse.capra.generic.tracemodel/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.generic.tracemodel</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.app4mc/.classpath b/bundles/org.eclipse.capra.handler.app4mc/.classpath
new file mode 100644
index 0000000..d06b940
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.handler.app4mc/.project b/bundles/org.eclipse.capra.handler.app4mc/.project
new file mode 100644
index 0000000..72abf02
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.app4mc</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.capra.handler.app4mc/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.app4mc/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..3a21537
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.capra.handler.app4mc/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.app4mc/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7532917
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Localization: plugin
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: %Bundle-Vendor
+Bundle-SymbolicName: org.eclipse.capra.handler.app4mc;singleton:=true
+Bundle-Version: 0.8.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.handler.app4mc
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.app4mc.amalthea.model;bundle-version="0.9.5"
diff --git a/bundles/org.eclipse.capra.handler.app4mc/build.properties b/bundles/org.eclipse.capra.handler.app4mc/build.properties
new file mode 100644
index 0000000..6d6413f
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/build.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes =  META-INF/,\
+               .,\
+               plugin.xml,\
+               plugin.properties
diff --git a/bundles/org.eclipse.capra.handler.app4mc/plugin.properties b/bundles/org.eclipse.capra.handler.app4mc/plugin.properties
new file mode 100644
index 0000000..6e1eaa5
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/plugin.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+#
+
+Bundle-Name = Eclipse Capra Handler for APP4MC Amalthea Models
+Bundle-Vendor = Eclipse Capra
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.handler.app4mc/plugin.xml b/bundles/org.eclipse.capra.handler.app4mc/plugin.xml
new file mode 100644
index 0000000..903e154
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         id="id1"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.app4mc.APP4MCHandler">
+      </artifactHandler>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.app4mc/pom.xml b/bundles/org.eclipse.capra.handler.app4mc/pom.xml
new file mode 100644
index 0000000..0529f84
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<relativePath>../../pom.xml</relativePath>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.8.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.app4mc</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.app4mc/src/org/eclipse/capra/handler/app4mc/APP4MCHandler.java b/bundles/org.eclipse.capra.handler.app4mc/src/org/eclipse/capra/handler/app4mc/APP4MCHandler.java
new file mode 100644
index 0000000..161db80
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.app4mc/src/org/eclipse/capra/handler/app4mc/APP4MCHandler.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *  
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ * Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *      Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.handler.app4mc;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.app4mc.amalthea.model.INamed;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A handler for APP4MC models.
+ * 
+ * @author Salome Maro
+ *
+ */
+public class APP4MCHandler extends AbstractArtifactHandler<INamed> {
+
+	@Override
+	public EObject createWrapper(INamed artifact, EObject artifactModel) {
+		return artifact;
+	}
+
+	@Override
+	public INamed resolveWrapper(EObject wrapper) {
+		return (INamed) wrapper;
+	}
+
+	@Override
+	public String getDisplayName(INamed artifact) {
+		return artifact.getName();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		// TODO
+		return null;
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		if (first.equals(second)) {
+			return false;
+		} else if (first instanceof INamed && second instanceof INamed) {
+			if (first.eCrossReferences() != null && second.eCrossReferences() != null) {
+				if (first.eCrossReferences().contains(second) || second.eCrossReferences().contains(first)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		List<Connection> connections = new ArrayList<Connection>();
+		if (investigatedElement instanceof INamed) {
+			INamed named = (INamed) investigatedElement;
+			if (named.eCrossReferences() != null) {
+				List<EObject> refs = named.eCrossReferences();
+				for (EObject ref : refs) {
+					if (selectedRelationshipTypes != null) {
+						if (selectedRelationshipTypes.size() == 0
+								|| selectedRelationshipTypes.contains(ref.eClass().getName())) {
+							connections.add(new Connection(investigatedElement, Arrays.asList(ref), ref));
+						}
+					} else {// selectedRelationshipTypes is null and therefore return all cross references
+						// as internal links
+						connections.add(new Connection(investigatedElement, Arrays.asList(ref), ref));
+					}
+				}
+			}
+		}
+		return connections;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
index 0e99941..8cf8151 100644
--- a/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.cdt;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.cdt.core,
  org.eclipse.capra.core,
diff --git a/bundles/org.eclipse.capra.handler.cdt/pom.xml b/bundles/org.eclipse.capra.handler.cdt/pom.xml
index 95ebc9f..38a7795 100644
--- a/bundles/org.eclipse.capra.handler.cdt/pom.xml
+++ b/bundles/org.eclipse.capra.handler.cdt/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.cdt</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
index 17dbb7a..e7e250c 100644
--- a/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.emf;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.emf.ecore,
  org.eclipse.capra.core,
  org.eclipse.core.resources,
diff --git a/bundles/org.eclipse.capra.handler.emf/pom.xml b/bundles/org.eclipse.capra.handler.emf/pom.xml
index 96ba573..76e5889 100644
--- a/bundles/org.eclipse.capra.handler.emf/pom.xml
+++ b/bundles/org.eclipse.capra.handler.emf/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.emf</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF
index fc0396b..8705a7b 100644
--- a/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.featureide;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Export-Package: org.eclipse.capra.handler.featureide
 Require-Bundle: org.eclipse.emf.ecore,
  org.eclipse.jface,
diff --git a/bundles/org.eclipse.capra.handler.featureide/pom.xml b/bundles/org.eclipse.capra.handler.featureide/pom.xml
index 7c6aa7f..9690cef 100644
--- a/bundles/org.eclipse.capra.handler.featureide/pom.xml
+++ b/bundles/org.eclipse.capra.handler.featureide/pom.xml
@@ -17,7 +17,7 @@
 	<parent>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 </project>
diff --git a/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
index d799dd1..2bb76bd 100644
--- a/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.file;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.core.resources,
  org.eclipse.emf.ecore,
  org.eclipse.core.runtime,
diff --git a/bundles/org.eclipse.capra.handler.file/pom.xml b/bundles/org.eclipse.capra.handler.file/pom.xml
index e5edf7a..85ada33 100644
--- a/bundles/org.eclipse.capra.handler.file/pom.xml
+++ b/bundles/org.eclipse.capra.handler.file/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.file</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
index e8a4627..dba13a9 100644
--- a/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.gef;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.capra.core,
  org.eclipse.papyrus.infra.gmfdiag.css,
  org.eclipse.papyrus.infra.emf,
diff --git a/bundles/org.eclipse.capra.handler.gef/pom.xml b/bundles/org.eclipse.capra.handler.gef/pom.xml
index cb9ab1d..318a066 100644
--- a/bundles/org.eclipse.capra.handler.gef/pom.xml
+++ b/bundles/org.eclipse.capra.handler.gef/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.gef</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
index 8b769bf..e59d9d1 100644
--- a/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.hudson;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.mylyn.hudson.core,
  org.eclipse.mylyn.builds.core,
  org.eclipse.capra.core,
diff --git a/bundles/org.eclipse.capra.handler.hudson/pom.xml b/bundles/org.eclipse.capra.handler.hudson/pom.xml
index 2e9dcbc..ffe0169 100644
--- a/bundles/org.eclipse.capra.handler.hudson/pom.xml
+++ b/bundles/org.eclipse.capra.handler.hudson/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.hudson</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
index 7375def..0eef317 100644
--- a/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.jdt;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.jdt.core,
  org.eclipse.capra.core,
  org.eclipse.emf.ecore,
diff --git a/bundles/org.eclipse.capra.handler.jdt/pom.xml b/bundles/org.eclipse.capra.handler.jdt/pom.xml
index de11601..a6bee74 100644
--- a/bundles/org.eclipse.capra.handler.jdt/pom.xml
+++ b/bundles/org.eclipse.capra.handler.jdt/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.jdt</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
index 0bec546..f23501c 100644
--- a/bundles/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.marker;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.capra.core,
  org.eclipse.core.resources,
  org.eclipse.core.runtime,
diff --git a/bundles/org.eclipse.capra.handler.marker/pom.xml b/bundles/org.eclipse.capra.handler.marker/pom.xml
index 2523310..4205a56 100644
--- a/bundles/org.eclipse.capra.handler.marker/pom.xml
+++ b/bundles/org.eclipse.capra.handler.marker/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.marker</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
index 198bc08..7027f11 100644
--- a/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.mylyn;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.mylyn.tasks.core,
  org.eclipse.mylyn.tasks.ui,
  org.eclipse.capra.core,
diff --git a/bundles/org.eclipse.capra.handler.mylyn/pom.xml b/bundles/org.eclipse.capra.handler.mylyn/pom.xml
index aa653a0..6c27be0 100644
--- a/bundles/org.eclipse.capra.handler.mylyn/pom.xml
+++ b/bundles/org.eclipse.capra.handler.mylyn/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.mylyn</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF
index 27284c1..8526d1c 100644
--- a/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.office;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.capra.core,
  org.eclipse.capra.ui.office,
diff --git a/bundles/org.eclipse.capra.handler.office/pom.xml b/bundles/org.eclipse.capra.handler.office/pom.xml
index ce15a7a..7263356 100644
--- a/bundles/org.eclipse.capra.handler.office/pom.xml
+++ b/bundles/org.eclipse.capra.handler.office/pom.xml
@@ -16,7 +16,7 @@
 	<parent>
 		<artifactId>parent</artifactId>
 		<groupId>org.eclipse.capra</groupId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<packaging>eclipse-plugin</packaging>
diff --git a/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
index ad514b6..a01a949 100644
--- a/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.papyrus;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.capra.core,
  org.eclipse.capra.ui,
  org.eclipse.emf.ecore,
diff --git a/bundles/org.eclipse.capra.handler.papyrus/pom.xml b/bundles/org.eclipse.capra.handler.papyrus/pom.xml
index 72fd0b3..64ff65d 100644
--- a/bundles/org.eclipse.capra.handler.papyrus/pom.xml
+++ b/bundles/org.eclipse.capra.handler.papyrus/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.papyrus</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.php/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.php/META-INF/MANIFEST.MF
index 125d816..aabcc78 100644
--- a/bundles/org.eclipse.capra.handler.php/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.php/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.php;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.capra.core,
  org.eclipse.capra.core,
  org.eclipse.php.core,
diff --git a/bundles/org.eclipse.capra.handler.php/pom.xml b/bundles/org.eclipse.capra.handler.php/pom.xml
index fade60f..576ce3e 100644
--- a/bundles/org.eclipse.capra.handler.php/pom.xml
+++ b/bundles/org.eclipse.capra.handler.php/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.handler.php</artifactId>
diff --git a/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF
index bac3da3..c81cbba 100644
--- a/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.reqIf;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Export-Package: org.eclipse.capra.handler.reqif,
  org.eclipse.capra.handler.reqif.preferences
 Require-Bundle: org.eclipse.capra.core,
diff --git a/bundles/org.eclipse.capra.handler.reqIf/pom.xml b/bundles/org.eclipse.capra.handler.reqIf/pom.xml
index ac94ff2..c0f177d 100644
--- a/bundles/org.eclipse.capra.handler.reqIf/pom.xml
+++ b/bundles/org.eclipse.capra.handler.reqIf/pom.xml
@@ -17,7 +17,7 @@
 	<parent>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 </project>
diff --git a/bundles/org.eclipse.capra.handler.uml/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.uml/META-INF/MANIFEST.MF
index 499fae9..0d00255 100644
--- a/bundles/org.eclipse.capra.handler.uml/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.handler.uml/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.uml;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Export-Package: org.eclipse.capra.handler.uml
 Require-Bundle: org.eclipse.uml2.uml,
  org.eclipse.emf.ecore,
diff --git a/bundles/org.eclipse.capra.handler.uml/pom.xml b/bundles/org.eclipse.capra.handler.uml/pom.xml
index 87fd8e9..b22c626 100644
--- a/bundles/org.eclipse.capra.handler.uml/pom.xml
+++ b/bundles/org.eclipse.capra.handler.uml/pom.xml
@@ -17,7 +17,7 @@
 	<parent>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 		<relativePath>../../pom.xml</relativePath>
 	</parent>
 </project>
diff --git a/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF
index e98792f..4d55d37 100644
--- a/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui.cdt;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-Activator: org.eclipse.capra.ui.cdt.Activator
 Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: org.eclipse.ui,
diff --git a/bundles/org.eclipse.capra.ui.cdt/pom.xml b/bundles/org.eclipse.capra.ui.cdt/pom.xml
index b62ba69..ed3435a 100644
--- a/bundles/org.eclipse.capra.ui.cdt/pom.xml
+++ b/bundles/org.eclipse.capra.ui.cdt/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.cdt</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF
index 34b6dfa..adc8f21 100644
--- a/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: C%Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.ui.drive;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.equinox.registry,
  org.eclipse.capra.ui.office,
diff --git a/bundles/org.eclipse.capra.ui.drive/pom.xml b/bundles/org.eclipse.capra.ui.drive/pom.xml
index 4f61680..5fa9a21 100644
--- a/bundles/org.eclipse.capra.ui.drive/pom.xml
+++ b/bundles/org.eclipse.capra.ui.drive/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.drive</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF
index 9e6bd2e..6e53f86 100644
--- a/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui.jdt;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-Activator: org.eclipse.capra.ui.jdt.Activator
 Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: org.eclipse.ui,
diff --git a/bundles/org.eclipse.capra.ui.jdt/pom.xml b/bundles/org.eclipse.capra.ui.jdt/pom.xml
index d15ce02..8110302 100644
--- a/bundles/org.eclipse.capra.ui.jdt/pom.xml
+++ b/bundles/org.eclipse.capra.ui.jdt/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.jdt</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.matrix/.classpath b/bundles/org.eclipse.capra.ui.matrix/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.ui.matrix/.project b/bundles/org.eclipse.capra.ui.matrix/.project
new file mode 100644
index 0000000..a68ffce
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.matrix</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.capra.ui.matrix/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.matrix/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.capra.ui.matrix/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.capra.ui.matrix/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..e8ff8be
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+pluginProject.equinox=false
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/bundles/org.eclipse.capra.ui.matrix/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.matrix/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..961a588
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.matrix;singleton:=true
+Bundle-Version: 0.8.1.qualifier
+Require-Bundle: org.eclipse.ui.workbench,
+ org.eclipse.jface,
+ org.eclipse.capra.core,
+ org.eclipse.emf.ecore.editor,
+ org.eclipse.ui,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.capra.ui,
+ org.eclipse.capra.generic.artifactmodel,
+ org.eclipse.nebula.widgets.nattable.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.ui.matrix,
+ org.eclipse.capra.ui.matrix.views
+Bundle-Vendor: %Bundel-Vendor
diff --git a/bundles/org.eclipse.capra.ui.matrix/OSGI-INF/I10n/bundle.properties b/bundles/org.eclipse.capra.ui.matrix/OSGI-INF/I10n/bundle.properties
new file mode 100644
index 0000000..ff3fb6c
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/OSGI-INF/I10n/bundle.properties
@@ -0,0 +1,18 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+#Properties file for org.eclipse.capra.ui.table
+view.name = Eclipse Capra Traceability Matrix
+category.name = Capra Traceability
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Trace Visualisation Support (Matrix)
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.matrix/build.properties b/bundles/org.eclipse.capra.ui.matrix/build.properties
new file mode 100644
index 0000000..c71f822
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/build.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#   
+# SPDX-License-Identifier: EPL-2.0
+#   
+# Contributors:
+#     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#     Chalmers | University of Gothenburg - additional features, updated API
+#     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               OSGI-INF/,\
+               OSGI-INF/I10n/bundle.properties
diff --git a/bundles/org.eclipse.capra.ui.matrix/plugin.xml b/bundles/org.eclipse.capra.ui.matrix/plugin.xml
new file mode 100644
index 0000000..e84ad3d
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/plugin.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            category="org.eclipse.capra.ui.views"
+            class="org.eclipse.capra.ui.matrix.views.TraceabilityMatrixView"
+            icon="platform:/plugin/org.eclipse.capra.ui/icons/capra.png"
+            id="org.eclipse.capra.ui.matrix.views.TraceabilityMatrixView"
+            name="Capra Matrix Viewer">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.eclipse.capra.generic.perspective.CapraPerspective">
+         <view
+               id="org.eclipse.capra.ui.matrix.views.TraceabilityMatrixView"
+               ratio="0.5"
+               relationship="right"
+               relative="org.eclipse.ui.views.ProblemView">
+         </view>
+      </perspectiveExtension>
+   </extension>
+   <extension
+         point="org.eclipse.core.runtime.adapters">
+      <factory
+            adaptableType="org.eclipse.capra.ui.adapters.ConnectionAdapter"
+            class="org.eclipse.capra.ui.adapters.TraceItemAdapterFactory">
+         <adapter
+               type="org.eclipse.ui.views.properties.IPropertySource">
+         </adapter>
+      </factory>
+      <factory
+            adaptableType="org.eclipse.capra.ui.adapters.ArtifactAdapter"
+            class="org.eclipse.capra.ui.adapters.TraceItemAdapterFactory">
+         <adapter
+               type="org.eclipse.ui.views.properties.IPropertySource">
+         </adapter>
+      </factory>
+   </extension>
+   
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.matrix/pom.xml b/bundles/org.eclipse.capra.ui.matrix/pom.xml
new file mode 100644
index 0000000..5a04323
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<relativePath>../../pom.xml</relativePath>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.8.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.matrix</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixBodyToolTip.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixBodyToolTip.java
new file mode 100644
index 0000000..eae2ce1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixBodyToolTip.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.nebula.widgets.nattable.NatTable;
+import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
+import org.eclipse.nebula.widgets.nattable.tooltip.NatTableContentTooltip;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Provides the tool tip for cells in the body of the table. Displays
+ * information about the link, including all artifacts that are connected by the
+ * link.
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ * @author Jan-Philipp Steghöfer
+ */
+public class TraceabilityMatrixBodyToolTip extends NatTableContentTooltip {
+	private NatTable natTable;
+	private TraceabilityMatrixDataProvider dataProvider;
+	private ArtifactHelper artifactHelper;
+
+	/**
+	 * Create a new tool tip for the cells in the body of the table.
+	 * 
+	 * @param natTable       the table the tool tip should be applied to
+	 * @param dataProvider   the provider of table data
+	 * @param artifactHelper the provider of information about artifacts
+	 */
+	public TraceabilityMatrixBodyToolTip(NatTable natTable, TraceabilityMatrixDataProvider dataProvider,
+			ArtifactHelper artifactHelper) {
+		super(natTable, GridRegion.BODY);
+		this.natTable = natTable;
+		this.dataProvider = dataProvider;
+		this.artifactHelper = artifactHelper;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.window.ToolTip#getToolTipArea(org.eclipse.swt.widgets
+	 * .Event)
+	 *
+	 * Implementation here means the tooltip is not redrawn unless mouse hover moves
+	 * outside of the current cell (the combination of ToolTip.NO_RECREATE style and
+	 * override of this method).
+	 */
+	@Override
+	protected Object getToolTipArea(Event event) {
+		int col = this.natTable.getColumnPositionByX(event.x);
+		int row = this.natTable.getRowPositionByY(event.y);
+		return new Point(col, row);
+	}
+
+	@Override
+	protected String getText(Event event) {
+		int col = this.natTable.getColumnPositionByX(event.x) - 1;
+		int row = this.natTable.getRowPositionByY(event.y) - 1;
+		Connection connection = dataProvider.getCellConnection(col, row);
+		if (connection != null) {
+			EObject eClass = connection.getTlink().eClass();
+			String traceType = (eClass == null ? "" : ((EClass) eClass).getName());
+			Set<String> artifactNames = new LinkedHashSet<>();
+			artifactNames.add(artifactHelper.getArtifactLabel(connection.getOrigin()));
+			artifactNames.addAll(connection.getTargets().stream().map(a -> artifactHelper.getArtifactLabel(a))
+					.collect(Collectors.toCollection(ArrayList::new)));
+			StringBuilder tooltipBuilder = new StringBuilder();
+			tooltipBuilder.append("Trace link \"").append(traceType).append("\":\n");
+			tooltipBuilder.append(artifactNames.stream().collect(Collectors.joining("\n")));
+			return tooltipBuilder.toString();
+		}
+		return null;
+	}
+
+	@Override
+	protected Composite createToolTipContentArea(Event event, Composite parent) {
+		// This is where you could get really creative with your tooltips...
+		return super.createToolTipContentArea(event, parent);
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixColumnHeaderDataProvider.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixColumnHeaderDataProvider.java
new file mode 100644
index 0000000..8d6e2a7
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixColumnHeaderDataProvider.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
+
+/**
+ * Provides the names of the corresponding artifacts for the headers of the
+ * columns in the traceability matrix.
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ * @author Jan-Philipp Steghöfer
+ */
+public class TraceabilityMatrixColumnHeaderDataProvider implements IDataProvider {
+
+	private List<String> labels = new ArrayList<>();
+
+	public TraceabilityMatrixColumnHeaderDataProvider(List<EObject> data, ArtifactHelper artifactHelper) {
+		for (EObject next : data) {
+			this.labels.add(artifactHelper.getArtifactLabel(next));
+		}
+	}
+
+	public String getColumnHeaderLabel(int columnIndex) {
+		return this.labels.get(columnIndex);
+	}
+
+	@Override
+	public int getColumnCount() {
+		return labels.size();
+	}
+
+	@Override
+	public int getRowCount() {
+		return 1;
+	}
+
+	@Override
+	public Object getDataValue(int columnIndex, int rowIndex) {
+		if (columnIndex < 0 || columnIndex >= this.labels.size()) {
+			return null;
+		}
+		return getColumnHeaderLabel(columnIndex);
+	}
+
+	@Override
+	public void setDataValue(int arg0, int arg1, Object arg2) {
+		throw new UnsupportedOperationException();
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixDataProvider.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixDataProvider.java
new file mode 100644
index 0000000..e8de81e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixDataProvider.java
@@ -0,0 +1,161 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.capra.core.helpers.TraceHelper;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
+
+/**
+ * The data provider for the cells of the traceability matrix.
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class TraceabilityMatrixDataProvider implements IDataProvider {
+
+	private class EntryData {
+		public EObject artifact;
+		public List<Connection> connections;
+
+		public EntryData(EObject artifact) {
+			this.artifact = artifact;
+		}
+	}
+
+	private List<EntryData> rows = new ArrayList<>();
+	private List<EntryData> columns = new ArrayList<>();
+
+	/**
+	 * Creates a new data provider for the traceability matrix.
+	 * 
+	 * @param connections  the connections that should be visible in the matrix
+	 * @param traceModel   the trace model in wich the trace links are stored
+	 * @param traceAdapter the trace meta-model adapter that provides data about the
+	 *                     traces
+	 */
+	public TraceabilityMatrixDataProvider(List<Connection> connections, EObject traceModel,
+			TraceMetaModelAdapter traceAdapter) {
+		for (EObject element : TraceHelper.getTracedElements(connections)) {
+			EntryData colEntry = new EntryData(element);
+			colEntry.connections = traceAdapter.getConnectedElements(element, traceModel);
+			this.columns.add(colEntry);
+			EntryData rowEntry = new EntryData(element);
+			this.rows.add(rowEntry);
+		}
+	}
+
+	@Override
+	public int getColumnCount() {
+		return columns.size();
+	}
+
+	@Override
+	public Object getDataValue(int colIndex, int rowIndex) {
+		EntryData colEntry = columns.get(colIndex);
+		EntryData rowEntry = columns.get(rowIndex);
+		for (Connection connection : colEntry.connections) {
+			for (EObject target : connection.getTargets()) {
+				if (!EMFHelper.hasSameIdentifier(colEntry.artifact, target)
+						&& EMFHelper.hasSameIdentifier(rowEntry.artifact, target)) {
+					EObject eClass = connection.getTlink().eClass();
+					return (eClass == null ? "" : ((EClass) eClass).getName());
+				}
+			}
+		}
+		return "";
+	}
+
+	@Override
+	public int getRowCount() {
+		return rows.size();
+	}
+
+	@Override
+	public void setDataValue(int arg0, int arg1, Object arg2) {
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * Get the artifacts displayed in the columns of the traceability matrix.
+	 * 
+	 * @return a list of all artifacts displayed as columns
+	 */
+	public List<EObject> getColumns() {
+		return columns.stream().map(e -> e.artifact).collect(Collectors.toCollection(ArrayList::new));
+	}
+
+	/**
+	 * Get the artifact displayed in a specific column.
+	 * 
+	 * @param index the index of the column whose artifact should be returned
+	 * @return the artifact displayed in the column with the given index
+	 */
+	public EObject getColumn(int index) {
+		return columns.get(index).artifact;
+	}
+
+	/**
+	 * Get the artifacts displayed in the rows of the traceability matrix.
+	 * 
+	 * @return a list of all artifacts displayed as rows
+	 */
+	public List<EObject> getRows() {
+		return rows.stream().map(e -> e.artifact).collect(Collectors.toCollection(ArrayList::new));
+	}
+
+	/**
+	 * Get the artifact displayed in a specific row.
+	 * 
+	 * @param index the index of the row whose artifact should be returned
+	 * @return the artifact displayed in the row with the given index
+	 */
+	public EObject getRow(int index) {
+		return rows.get(index).artifact;
+	}
+
+	/**
+	 * Gets the connection that is represented by a specific cell in the
+	 * traceability matrix. The cell is identified with its row and column index.
+	 * 
+	 * @param column the index of the column
+	 * @param row    the index of the row
+	 * @return the connection represented in the chosen cell
+	 */
+	public Connection getCellConnection(int column, int row) {
+		EntryData colEntry = columns.get(column);
+		EntryData rowEntry = columns.get(row);
+		for (Connection connection : colEntry.connections) {
+			for (EObject target : connection.getTargets()) {
+				if (!EMFHelper.hasSameIdentifier(colEntry.artifact, target)
+						&& EMFHelper.hasSameIdentifier(rowEntry.artifact, target)) {
+					return connection;
+				}
+			}
+		}
+		return null;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixHeaderToolTip.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixHeaderToolTip.java
new file mode 100644
index 0000000..e7d49f4
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixHeaderToolTip.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
+import java.util.Locale;
+
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.nebula.widgets.nattable.NatTable;
+import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
+import org.eclipse.nebula.widgets.nattable.tooltip.NatTableContentTooltip;
+import org.eclipse.swt.widgets.Event;
+
+/**
+ * Provides a tool tip when mousing over a header in one the columns in a
+ * traceability matrix. The tool tip contains information about the location of
+ * the artifact and when it was last changed.
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ * @author Jan-Philipp Steghöfer
+ */
+public class TraceabilityMatrixHeaderToolTip extends NatTableContentTooltip {
+
+	private NatTable natTable;
+	private TraceabilityMatrixDataProvider dataProvider;
+	private ArtifactHelper artifactHelper;
+
+	public TraceabilityMatrixHeaderToolTip(NatTable natTable, TraceabilityMatrixDataProvider dataProvider,
+			ArtifactHelper artifactHelper) {
+		super(natTable, GridRegion.COLUMN_HEADER);
+		this.natTable = natTable;
+		this.dataProvider = dataProvider;
+		this.artifactHelper = artifactHelper;
+	}
+
+	@Override
+	protected String getText(Event event) {
+		int col = this.natTable.getColumnPositionByX(event.x) - 1;
+		EObject artifact = dataProvider.getColumn(col);
+		StringBuilder tooltipBuilder = new StringBuilder();
+		tooltipBuilder.append(artifactHelper.getArtifactLabel(artifact));
+		tooltipBuilder.append("\nLocated at:\n");
+		tooltipBuilder.append(artifactHelper.getArtifactLocation(artifact));
+
+		URI uri;
+		try {
+			uri = new URI(artifactHelper.getArtifactLocation(artifact));
+			IPath path = new Path(uri.getPath());
+			path = path.removeFirstSegments(1);
+			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+			if (file != null) {
+				if (file.exists()) {
+					tooltipBuilder.append("\nLast modified: ");
+					LocalDate date = Instant.ofEpochMilli(file.getLocalTimeStamp()).atZone(ZoneId.systemDefault())
+							.toLocalDate();
+					tooltipBuilder.append(date.format(
+							DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(new Locale("no", "NO"))));
+				} else {
+					tooltipBuilder.append("\nArtifact does not exist.");
+				}
+			}
+		} catch (URISyntaxException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		return tooltipBuilder.toString();
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixRowHeaderDataProvider.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixRowHeaderDataProvider.java
new file mode 100644
index 0000000..f3d7da9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/TraceabilityMatrixRowHeaderDataProvider.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
+
+/**
+ * Provides data for the headers of rows in the traceability matrix.
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class TraceabilityMatrixRowHeaderDataProvider implements IDataProvider {
+
+	private List<String> labels = new ArrayList<>();;
+
+	/**
+	 * Creates a new data provider for row headers in a traceability matrix. The
+	 * data that is provided will be used to generate the labels for the row
+	 * headers.
+	 * 
+	 * @param data a list with the information about the row headers
+	 */
+	public TraceabilityMatrixRowHeaderDataProvider(List<EObject> data, ArtifactHelper artifactHelper) {
+		for (EObject next : data) {
+			this.labels.add(artifactHelper.getArtifactLabel(next));
+		}
+	}
+
+	@Override
+	public int getColumnCount() {
+		return 1;
+	}
+
+	@Override
+	public int getRowCount() {
+		return labels.size();
+	}
+
+	@Override
+	public Object getDataValue(int columnIndex, int rowIndex) {
+		return labels.get(rowIndex);
+	}
+
+	@Override
+	public void setDataValue(int columnIndex, int rowIndex, Object newValue) {
+		throw new UnsupportedOperationException();
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/selection/TraceabilityMatrixSelectionProvider.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/selection/TraceabilityMatrixSelectionProvider.java
new file mode 100644
index 0000000..6a95d64
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/selection/TraceabilityMatrixSelectionProvider.java
@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix.selection;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.ui.adapters.ArtifactAdapter;
+import org.eclipse.capra.ui.adapters.ConnectionAdapter;
+import org.eclipse.capra.ui.matrix.TraceabilityMatrixDataProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate;
+import org.eclipse.nebula.widgets.nattable.layer.ILayerListener;
+import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEvent;
+import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
+import org.eclipse.nebula.widgets.nattable.selection.event.CellSelectionEvent;
+import org.eclipse.nebula.widgets.nattable.selection.event.ColumnSelectionEvent;
+import org.eclipse.nebula.widgets.nattable.selection.event.RowSelectionEvent;
+
+public class TraceabilityMatrixSelectionProvider implements ISelectionProvider, ILayerListener {
+
+	private Set<ISelectionChangedListener> listeners = new HashSet<>();
+
+	/**
+	 * The SelectionLayer this ISelectionProvider is connected to.
+	 */
+	private SelectionLayer selectionLayer;
+
+	private TraceabilityMatrixDataProvider dataProvider;
+
+	/**
+	 * Locally stored previous selection which is used to determine if a
+	 * SelectionChangedEvent should be fired. It is used to avoid firing events if
+	 * the same cell is selected again (default).
+	 */
+	private ISelection previousSelection;
+
+	public TraceabilityMatrixSelectionProvider(SelectionLayer selectionLayer,
+			TraceabilityMatrixDataProvider dataProvider) {
+		this.updateProvider(selectionLayer, dataProvider);
+	}
+
+	@Override
+	public void handleLayerEvent(ILayerEvent event) {
+		if ((event instanceof CellSelectionEvent) || (event instanceof RowSelectionEvent)
+				|| (event instanceof ColumnSelectionEvent)) {
+			ISelection selection = getSelection();
+			if ((selection != null && !selection.equals(this.previousSelection))) {
+				try {
+					for (ISelectionChangedListener listener : this.listeners) {
+						listener.selectionChanged(new SelectionChangedEvent(this, selection));
+					}
+				} finally {
+					this.previousSelection = selection;
+				}
+			}
+		}
+	}
+
+	@Override
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		if (listener != null) {
+			this.listeners.add(listener);
+		}
+	}
+
+	@Override
+	public ISelection getSelection() {
+		if (selectionLayer.getFullySelectedRowPositions().length > 0) {
+			EObject selectedObject = dataProvider.getRow(selectionLayer.getFullySelectedRowPositions()[0]);
+			if (selectedObject != null) {
+				return new StructuredSelection(new ArtifactAdapter(selectedObject));
+			}
+		} else if (selectionLayer.getFullySelectedColumnPositions().length > 0) {
+			EObject selectedObject = dataProvider.getColumn(selectionLayer.getFullySelectedColumnPositions()[0]);
+			if (selectedObject != null) {
+				return new StructuredSelection(new ArtifactAdapter(selectedObject));
+			}
+		} else if (selectionLayer.getSelectedCellPositions().length > 0) {
+			PositionCoordinate selectedCoordinate = selectionLayer.getSelectedCellPositions()[0];
+			Connection selectedObject = dataProvider.getCellConnection(selectedCoordinate.columnPosition,
+					selectedCoordinate.rowPosition);
+			if (selectedObject != null) {
+				return new StructuredSelection(new ConnectionAdapter(selectedObject));
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+		listeners.remove(listener);
+
+	}
+
+	@Override
+	public void setSelection(ISelection selection) {
+		// Deliberately do nothing
+	}
+
+	/**
+	 * Sets the selection layer and the data provider used by this
+	 * {@code SelectionProvider} to retrieve selected data from the underlying
+	 * NatTable.
+	 * 
+	 * @param selectionLayer the new selection layer
+	 */
+	public void updateProvider(SelectionLayer selectionLayer, TraceabilityMatrixDataProvider dataProvider) {
+		this.selectionLayer = selectionLayer;
+		this.dataProvider = dataProvider;
+		this.selectionLayer.addLayerListener(this);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java
new file mode 100644
index 0000000..5d2e162
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.matrix/src/org/eclipse/capra/ui/matrix/views/TraceabilityMatrixView.java
@@ -0,0 +1,571 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Matrix View
+ *******************************************************************************/
+package org.eclipse.capra.ui.matrix.views;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.handlers.IArtifactUnpacker;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.core.helpers.TraceHelper;
+import org.eclipse.capra.ui.helpers.SelectionSupportHelper;
+import org.eclipse.capra.ui.matrix.TraceabilityMatrixBodyToolTip;
+import org.eclipse.capra.ui.matrix.TraceabilityMatrixColumnHeaderDataProvider;
+import org.eclipse.capra.ui.matrix.TraceabilityMatrixDataProvider;
+import org.eclipse.capra.ui.matrix.TraceabilityMatrixHeaderToolTip;
+import org.eclipse.capra.ui.matrix.TraceabilityMatrixRowHeaderDataProvider;
+import org.eclipse.capra.ui.matrix.selection.TraceabilityMatrixSelectionProvider;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.nebula.widgets.nattable.NatTable;
+import org.eclipse.nebula.widgets.nattable.config.AbstractRegistryConfiguration;
+import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration;
+import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
+import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
+import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
+import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
+import org.eclipse.nebula.widgets.nattable.export.command.ExportCommand;
+import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
+import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider;
+import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer;
+import org.eclipse.nebula.widgets.nattable.grid.layer.CornerLayer;
+import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer;
+import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
+import org.eclipse.nebula.widgets.nattable.hover.HoverLayer;
+import org.eclipse.nebula.widgets.nattable.layer.AbstractLayerTransform;
+import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
+import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
+import org.eclipse.nebula.widgets.nattable.layer.cell.IConfigLabelAccumulator;
+import org.eclipse.nebula.widgets.nattable.resize.action.ColumnResizeCursorAction;
+import org.eclipse.nebula.widgets.nattable.resize.action.RowResizeCursorAction;
+import org.eclipse.nebula.widgets.nattable.resize.event.ColumnResizeEventMatcher;
+import org.eclipse.nebula.widgets.nattable.resize.event.RowResizeEventMatcher;
+import org.eclipse.nebula.widgets.nattable.resize.mode.ColumnResizeDragMode;
+import org.eclipse.nebula.widgets.nattable.resize.mode.RowResizeDragMode;
+import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
+import org.eclipse.nebula.widgets.nattable.style.CellStyleAttributes;
+import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
+import org.eclipse.nebula.widgets.nattable.style.Style;
+import org.eclipse.nebula.widgets.nattable.ui.action.IMouseAction;
+import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
+import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
+import org.eclipse.nebula.widgets.nattable.util.GUIHelper;
+import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * Provides a traceability matrix view, i.e., a tabular view of how the
+ * different artifacts are related.
+ * <p>
+ * The traceability matrix shows all selected artifacts and the artifacts they
+ * are directly connected to via trace links. It also displays the type of link
+ * between the artifacts, allows navigating to the artifact by double-clicking
+ * the column header, and shows information about the artifact and the trace
+ * link as a tool-tip. It is also possible to export the currently viewed
+ * traceability matrix as a Microsoft Excel file.
+ * <p>
+ * The implementation uses NatTable.
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class TraceabilityMatrixView extends ViewPart {
+
+	/**
+	 * The ID of the view as specified by the extension.
+	 */
+	public static final String ID = "org.eclipse.capra.ui.matrix.views.TraceabilityMatrixView";
+
+	private static final String SAME_LABEL = "SAME"; // When column header and row header are the same
+	private static final String LINK_LABEL = "LINKED"; // When there is a link between
+
+	private NatTable traceMatrixTable;
+	private Action refreshAction, showAllAction, exportExcelAction;
+	private Composite parent;
+
+	private ResourceSet resourceSet = new ResourceSetImpl();
+
+	private final TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+	private TraceMetaModelAdapter metamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+	private TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+	private EObject traceModel = null;
+	private EObject artifactModel = null;
+	private ArtifactHelper artifactHelper;
+	private TraceHelper traceHelper;
+
+	private TraceabilityMatrixDataProvider bodyDataProvider;
+	private TraceabilityMatrixSelectionProvider selectionProvider;
+	private BodyLayerStack bodyLayer;
+
+	private List<Object> selectedModels = new ArrayList<>();
+	private boolean selectionModified = false;
+
+	/**
+	 * Listener to detect changes in the selection of other views. Redraws the table
+	 * if necessary.
+	 */
+	private ISelectionListener selectionListener = new ISelectionListener() {
+		@Override
+		public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+			populateSelectedModels(part, selection);
+			if (traceMatrixTable != null && selectionModified) {
+				updateTraceabilityMatrix();
+			}
+		}
+	};
+
+	/**
+	 * Color configuration. First changing the background color for the labels.
+	 * After that is the coloring for hovering.
+	 */
+	private AbstractRegistryConfiguration capraNatTableStyleConfiguration = new AbstractRegistryConfiguration() {
+		@Override
+		public void configureRegistry(IConfigRegistry configRegistry) {
+			// Black background for cells where there should not be any links
+			Style cellStyle = new Style();
+			cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_BLACK);
+			configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, cellStyle, DisplayMode.NORMAL,
+					SAME_LABEL);
+
+			// Green background for cells where there is a link.
+			cellStyle = new Style();
+			cellStyle.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_GREEN);
+			configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, cellStyle, DisplayMode.NORMAL,
+					LINK_LABEL);
+
+			// Style that is applied when cells are hovered
+			Style style = new Style();
+			style.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_YELLOW);
+			configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, style, DisplayMode.HOVER);
+
+			// Style that is applied when selected cells are hovered
+			style = new Style();
+			style.setAttributeValue(CellStyleAttributes.BACKGROUND_COLOR, GUIHelper.COLOR_GREEN);
+			configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_STYLE, style, DisplayMode.SELECT_HOVER);
+		}
+	};
+
+	/**
+	 * Making it possible to resize columns and rows.
+	 */
+	private AbstractUiBindingConfiguration capraUiBindingConfiguration = new AbstractUiBindingConfiguration() {
+
+		@Override
+		public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
+			uiBindingRegistry.registerFirstMouseMoveBinding(
+					new ColumnResizeEventMatcher(SWT.NONE, GridRegion.ROW_HEADER, 0), new ColumnResizeCursorAction());
+			uiBindingRegistry.registerFirstMouseDragMode(
+					new ColumnResizeEventMatcher(SWT.NONE, GridRegion.ROW_HEADER, 1), new ColumnResizeDragMode());
+			uiBindingRegistry.registerFirstMouseMoveBinding(
+					new RowResizeEventMatcher(SWT.NONE, GridRegion.COLUMN_HEADER, 0), new RowResizeCursorAction());
+			uiBindingRegistry.registerFirstMouseDragMode(
+					new RowResizeEventMatcher(SWT.NONE, GridRegion.COLUMN_HEADER, 1), new RowResizeDragMode());
+			// Make the corner on the top left also resizable
+			uiBindingRegistry.registerFirstMouseMoveBinding(
+					new ColumnResizeEventMatcher(SWT.NONE, GridRegion.CORNER, 0), new ColumnResizeCursorAction());
+			uiBindingRegistry.registerFirstMouseDragMode(new ColumnResizeEventMatcher(SWT.NONE, GridRegion.CORNER, 1),
+					new ColumnResizeDragMode());
+			uiBindingRegistry.registerFirstMouseMoveBinding(new RowResizeEventMatcher(SWT.NONE, GridRegion.CORNER, 0),
+					new RowResizeCursorAction());
+			uiBindingRegistry.registerFirstMouseDragMode(new RowResizeEventMatcher(SWT.NONE, GridRegion.CORNER, 1),
+					new RowResizeDragMode());
+		}
+	};
+
+	/**
+	 * Setting labels based on links and later use the labels for customized layout.
+	 */
+	private IConfigLabelAccumulator cellLabelAccumulator = new IConfigLabelAccumulator() {
+		@Override
+		public void accumulateConfigLabels(LabelStack configLabels, int columnPosition, int rowPosition) {
+			int columnIndex = bodyLayer.getColumnIndexByPosition(columnPosition);
+			int rowIndex = bodyLayer.getRowIndexByPosition(rowPosition);
+			if (sameElement(bodyDataProvider.getRow(rowIndex), bodyDataProvider.getColumn(columnIndex))) {
+				configLabels.addLabel(SAME_LABEL);
+			} else {
+				String cell_text = (String) bodyDataProvider.getDataValue(columnIndex, rowIndex);
+				if (!cell_text.equals("")) {
+					configLabels.addLabel(LINK_LABEL);
+				}
+			}
+		}
+	};
+
+	@Override
+	public void createPartControl(Composite parent) {
+		this.parent = parent;
+		updateTraceabilityMatrix();
+
+		makeActions();
+		contributeToActionBars();
+
+		// Adding support to react to selections in other views
+		getViewSite().getPage().addSelectionListener(selectionListener);
+
+	}
+
+	@Override
+	public void dispose() {
+		getViewSite().getPage().removeSelectionListener(selectionListener);
+		traceMatrixTable.dispose();
+		traceMatrixTable = null;
+		super.dispose();
+	}
+
+	@Override
+	public void setFocus() {
+		if (traceMatrixTable != null) {
+			traceMatrixTable.setFocus();
+		}
+	}
+
+	/**
+	 * Updates the traceability matrix with data from the current selection or with
+	 * data from all traced artifacts if the selection is empty. In essence, it
+	 * disposes of the current table and creates a new one with the current data.
+	 * Also layouts the parent to make sure the table is displayed correctly.
+	 */
+	@SuppressWarnings("unchecked")
+	protected void updateTraceabilityMatrix() {
+		EObject selectedObject;
+		List<Connection> traces = new ArrayList<>();
+
+		this.artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		this.artifactHelper = new ArtifactHelper(this.artifactModel);
+		this.traceModel = persistenceAdapter.getTraceModel(resourceSet);
+		this.traceHelper = new TraceHelper(traceModel);
+
+		if (!selectedModels.isEmpty()) {
+			// Show the matrix for the selected objects
+			for (Object model : selectedModels) {
+				IArtifactHandler<Object> handler = (IArtifactHandler<Object>) this.artifactHelper.getHandler(model)
+						.orElse(null);
+				if (handler != null) {
+					Object unpackedElement = null;
+					if (handler instanceof IArtifactUnpacker) {
+						unpackedElement = IArtifactUnpacker.class.cast(handler).unpack(model);
+					} else {
+						unpackedElement = model;
+					}
+					EObject wrappedElement = handler.createWrapper(unpackedElement, this.artifactModel);
+					if (traceHelper.isArtifactInTraceModel(wrappedElement)) {
+						selectedObject = wrappedElement;
+						traces.addAll(this.traceAdapter.getConnectedElements(selectedObject, this.traceModel));
+					}
+				}
+			}
+		} else {
+			// Without a selection, show a matrix of all traces
+			if (traceModel != null) {
+				traces = metamodelAdapter.getAllTraceLinks(traceModel);
+			}
+		}
+		// If the current selection does not contain elements from the trace model, it
+		// is possible that the list of traces is empty. By catching this case, we only
+		// update the traceability matrix when there is actually something to show.
+		if (!traces.isEmpty()) {
+			if (traceMatrixTable != null) {
+				traceMatrixTable.dispose();
+				traceMatrixTable = null;
+			}
+			// Creating data providers for body, column and row. The data provider for the
+			// body provides the data which will be shown in the cells. For columns and
+			// rows, the labels are created.
+			this.bodyDataProvider = new TraceabilityMatrixDataProvider(traces, this.traceModel, this.traceAdapter);
+			IDataProvider colHeaderDataProvider = new TraceabilityMatrixColumnHeaderDataProvider(
+					this.bodyDataProvider.getColumns(), artifactHelper);
+			IDataProvider rowHeaderDataProvider = new TraceabilityMatrixRowHeaderDataProvider(
+					this.bodyDataProvider.getRows(), artifactHelper);
+
+			// Putting the data providers to their respective stacks
+			this.bodyLayer = new BodyLayerStack(this.bodyDataProvider);
+			ColumnHeaderLayerStack columnHeaderLayer = new ColumnHeaderLayerStack(colHeaderDataProvider);
+			RowHeaderLayerStack rowHeaderLayer = new RowHeaderLayerStack(rowHeaderDataProvider);
+			DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider(colHeaderDataProvider,
+					rowHeaderDataProvider);
+			CornerLayer cornerLayer = new CornerLayer(new DataLayer(cornerDataProvider), rowHeaderLayer,
+					columnHeaderLayer);
+
+			// Adding the labels to the body (cells).
+			bodyLayer.setConfigLabelAccumulator(cellLabelAccumulator);
+
+			// Putting all the layers to the grid.
+			GridLayer gridLayer = new GridLayer(this.bodyLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer);
+			gridLayer.addConfiguration(capraUiBindingConfiguration);
+
+			// Creating the table
+			traceMatrixTable = new NatTable(parent, gridLayer, false);
+
+			// Adding Configuration to the table
+			traceMatrixTable.addConfiguration(new DefaultNatTableStyleConfiguration());
+			traceMatrixTable.addConfiguration(this.capraNatTableStyleConfiguration);
+			traceMatrixTable.configure();
+
+			// Attach the selection provider
+			if (this.selectionProvider == null) {
+				this.selectionProvider = new TraceabilityMatrixSelectionProvider(bodyLayer.getSelectionLayer(),
+						this.bodyDataProvider);
+			} else {
+				selectionProvider.updateProvider(bodyLayer.getSelectionLayer(), this.bodyDataProvider);
+			}
+			getSite().setSelectionProvider(this.selectionProvider);
+
+			// Adding the tool tips
+			attachToolTip();
+
+			// Finally, make sure everything is in the right place.
+			parent.layout();
+		}
+	}
+
+	// ********************************************************************
+
+	/**
+	 * Populates the {@link #selectedModels} property with the objects included in
+	 * the provided selection.
+	 * 
+	 * @param part      the workbench part whose selection provider is used
+	 * @param selection the selection from which the elements are extracted
+	 */
+	private void populateSelectedModels(IWorkbenchPart part, ISelection selection) {
+		List<Object> newSelectedObjects = SelectionSupportHelper.extractSelectedElements(selection, part);
+		if (!listEqualsIgnoreOrder(selectedModels, newSelectedObjects)) {
+			selectionModified = true;
+			selectedModels.clear();
+			selectedModels.addAll(newSelectedObjects);
+		} else {
+			selectionModified = false;
+		}
+	}
+
+	/**
+	 * Compares to lists ignoring order and duplicates.
+	 * 
+	 * @param <T>   the type of the two lists
+	 * @param list1 the first list to compare
+	 * @param list2 the second list to compare
+	 * @return <code>true</code> if the lists are the same, <code>false</code>
+	 *         otherwise
+	 */
+	private <T> boolean listEqualsIgnoreOrder(List<T> list1, List<T> list2) {
+		return new HashSet<>(list1).equals(new HashSet<>(list2));
+	}
+
+	/**
+	 * Create the tool tip instances.
+	 */
+	private void attachToolTip() {
+		new TraceabilityMatrixBodyToolTip(this.traceMatrixTable, this.bodyDataProvider, this.artifactHelper);
+		new TraceabilityMatrixHeaderToolTip(this.traceMatrixTable, this.bodyDataProvider, this.artifactHelper);
+	}
+
+	/**
+	 * Opens an editor for the provided {@code element} based on the URL stored in
+	 * the artifact.
+	 * 
+	 * @param element the element for which an editor should be opened
+	 * @throws PartInitException if the editor could not be initialised
+	 */
+	private void openEditor(EObject element) throws PartInitException {
+		IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		try {
+			URI uri = new URI(artifactHelper.getArtifactLocation(element));
+			IPath artifactPath = new Path(uri.getPath());
+			artifactPath = artifactPath.removeFirstSegments(1);
+			IFile artifactFile = ResourcesPlugin.getWorkspace().getRoot().getFile(artifactPath);
+			IDE.openEditor(page, artifactFile);
+		} catch (URISyntaxException e) {
+		}
+	}
+
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+		fillLocalToolBar(bars.getToolBarManager());
+	}
+
+	private void fillLocalPullDown(IMenuManager manager) {
+		manager.add(refreshAction);
+		manager.add(showAllAction);
+		manager.add(new Separator());
+		manager.add(exportExcelAction);
+	}
+
+	private void fillLocalToolBar(IToolBarManager manager) {
+		manager.add(refreshAction);
+		manager.add(showAllAction);
+	}
+
+	private void makeActions() {
+		refreshAction = new Action() {
+			@Override
+			public void run() {
+				updateTraceabilityMatrix();
+			}
+		};
+		refreshAction.setText("Refresh");
+		refreshAction.setToolTipText("Refresh");
+
+		showAllAction = new Action() {
+			@Override
+			public void run() {
+				selectedModels.clear();
+				updateTraceabilityMatrix();
+			}
+		};
+		showAllAction.setText("Show all");
+		showAllAction.setToolTipText("Show all");
+
+		exportExcelAction = new Action() {
+			@Override
+			public void run() {
+				ExportCommand cmd = new ExportCommand(traceMatrixTable.getConfigRegistry(),
+						traceMatrixTable.getShell());
+				traceMatrixTable.doCommand(cmd);
+			}
+		};
+		exportExcelAction.setText("Export to Excel...");
+		exportExcelAction.setToolTipText("Exports the currently shown traceability matrix as an Excel file.");
+
+	}
+
+	private boolean sameElement(EObject first, EObject second) {
+		return EMFHelper.getIdentifier(first).equals(EMFHelper.getIdentifier(second));
+	}
+
+	/**
+	 * Class for the column stack
+	 */
+	private class ColumnHeaderLayerStack extends AbstractLayerTransform {
+
+		public ColumnHeaderLayerStack(IDataProvider dataProvider) {
+			DataLayer dataLayer = new DataLayer(dataProvider);
+			ColumnHeaderLayer colHeaderLayer = new ColumnHeaderLayer(dataLayer, TraceabilityMatrixView.this.bodyLayer,
+					TraceabilityMatrixView.this.bodyLayer.getSelectionLayer());
+
+			// Adding double click to the column header
+			colHeaderLayer.addConfiguration(new AbstractUiBindingConfiguration() {
+
+				@Override
+				public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
+					uiBindingRegistry.registerDoubleClickBinding(MouseEventMatcher.columnHeaderLeftClick(0),
+							new IMouseAction() {
+
+								@Override
+								public void run(NatTable natTable, MouseEvent event) {
+									try {
+										int columnPosition = natTable.getColumnPositionByX(event.x);
+										int columnIndex = natTable.getColumnIndexByPosition(columnPosition);
+										EObject element = bodyDataProvider.getColumn(columnIndex);
+										openEditor(element);
+									} catch (PartInitException e) {
+										// Deliberately do nothing.
+									}
+								}
+							});
+				}
+			});
+
+			setUnderlyingLayer(colHeaderLayer);
+		}
+	}
+
+	/**
+	 * Class for the row stack
+	 */
+	private class RowHeaderLayerStack extends AbstractLayerTransform {
+
+		public RowHeaderLayerStack(IDataProvider dataProvider) {
+			DataLayer dataLayer = new DataLayer(dataProvider, 50, 20);
+			RowHeaderLayer rowHeaderLayer = new RowHeaderLayer(dataLayer, TraceabilityMatrixView.this.bodyLayer,
+					TraceabilityMatrixView.this.bodyLayer.getSelectionLayer());
+
+			// Adding double click to the row header
+			rowHeaderLayer.addConfiguration(new AbstractUiBindingConfiguration() {
+
+				@Override
+				public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
+					uiBindingRegistry.registerDoubleClickBinding(MouseEventMatcher.rowHeaderLeftClick(0),
+							new IMouseAction() {
+
+								@Override
+								public void run(NatTable natTable, MouseEvent event) {
+									try {
+										int rowPosition = natTable.getRowPositionByY(event.y);
+										int rowIndex = natTable.getRowIndexByPosition(rowPosition);
+										EObject element = bodyDataProvider.getRow(rowIndex);
+										openEditor(element);
+									} catch (PartInitException e) {
+										// Deliberately do nothing.
+									}
+								}
+
+							});
+				}
+			});
+			setUnderlyingLayer(rowHeaderLayer);
+		}
+	}
+
+	/**
+	 * Class for the body stack
+	 */
+	private class BodyLayerStack extends AbstractLayerTransform {
+		private SelectionLayer selectionLayer;
+
+		public BodyLayerStack(IDataProvider dataProvider) {
+			DataLayer bodyDataLayer = new DataLayer(dataProvider);
+			HoverLayer bodyHoverLayer = new HoverLayer(bodyDataLayer);
+			this.selectionLayer = new SelectionLayer(bodyHoverLayer);
+			ViewportLayer viewportLayer = new ViewportLayer(this.selectionLayer);
+			setUnderlyingLayer(viewportLayer);
+		}
+
+		public SelectionLayer getSelectionLayer() {
+			return this.selectionLayer;
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
index f9ab2bf..1b0ce4b 100644
--- a/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui.notification;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.capra.core,
  org.eclipse.core.resources,
diff --git a/bundles/org.eclipse.capra.ui.notification/pom.xml b/bundles/org.eclipse.capra.ui.notification/pom.xml
index 6cb3922..d40eaf8 100644
--- a/bundles/org.eclipse.capra.ui.notification/pom.xml
+++ b/bundles/org.eclipse.capra.ui.notification/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.notification</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF
index 4c2c0ff..48a0eef 100644
--- a/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui.office;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-ClassPath: .,
  lib/poi-3.10.1-20140818.jar,
  lib/poi-ooxml-schemas-3.10.1-20140818.jar,
@@ -18,7 +18,8 @@
  com.google.guava,
  org.dom4j,
  org.eclipse.core.runtime,
- org.eclipse.core.expressions
+ org.eclipse.core.expressions,
+ javax.xml.bind;bundle-version="2.2.0"
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.capra.ui.office,
  org.eclipse.capra.ui.office.exceptions;x-internal:=true,
diff --git a/bundles/org.eclipse.capra.ui.office/pom.xml b/bundles/org.eclipse.capra.ui.office/pom.xml
index da1ed36..7a4249b 100644
--- a/bundles/org.eclipse.capra.ui.office/pom.xml
+++ b/bundles/org.eclipse.capra.ui.office/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.office</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/OfficePreferences.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/OfficePreferences.java
index 6109fc9..8f2493c 100644
--- a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/OfficePreferences.java
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/OfficePreferences.java
@@ -55,7 +55,7 @@
 	/**
 	 * Default preference values
 	 */
-	public static final String CHAR_COUNT_DEFAULT = "30";
+	public static final String CHAR_COUNT_DEFAULT = "80";
 	public static final boolean EXCEL_COLUMN_RADIO_ID_IS_LINE_NUMBER = true;
 	public static final String EXCEL_CUSTOM_COLUMN_DEFAULT = "A";
 	public static final String EXCEL_COLUMN_VALUE_DEFAULT = "0";
@@ -65,11 +65,11 @@
 	 * Description of controls
 	 */
 	private static final String CHAR_COUNT_DESC = "Number of characters that are shown per line in the Office view:";
-	private static final String EXCEL_COLUMN_RADIO_CHOICE_DESC = "Setting the ID of Excel rows:";
-	private static final String EXCEL_COLUMN_IS_LINE_NUMBER_OPTION_DESC = "Line number is used as ID";
-	private static final String EXCEL_COLUMN_IS_CUSTOM_OPTION_DESC = "Custom ID column: ";
+	private static final String EXCEL_COLUMN_RADIO_CHOICE_DESC = "Unique identifier in spreadsheets:";
+	private static final String EXCEL_COLUMN_IS_LINE_NUMBER_OPTION_DESC = "Use the line number as the ID";
+	private static final String EXCEL_COLUMN_IS_CUSTOM_OPTION_DESC = "Use this column as the ID: ";
 	private static final String EXCEL_COLUMN_IS_CUSTOM_OPTION_HINT = "(e.g. \"A\", \"BC\"...)";
-	private static final String WORD_FIELD_NAME_DESC = "ID of Word fields to display: ";
+	private static final String WORD_FIELD_NAME_DESC = "Name of Word field to display:";
 
 	private static final int FIXED_TEXT_FIELD_WIDTH = 35;
 
@@ -86,11 +86,9 @@
 	 * Creates a swt widget that takes the numColumns of grid space inside the
 	 * parent.
 	 * 
-	 * @param parent
-	 *            the element that will hold the widget
-	 * @param numColumns
-	 *            the number of columns that the widget will take inside the
-	 *            grid of the parent.
+	 * @param parent     the element that will hold the widget
+	 * @param numColumns the number of columns that the widget will take inside the
+	 *                   grid of the parent.
 	 * @return the created widget
 	 */
 	private Composite createComposite(Composite parent, int numColumns) {
@@ -229,15 +227,12 @@
 	}
 
 	/**
-	 * Creates a label widget that takes the width of numOfColumns grid cells
-	 * inside a parent.
+	 * Creates a label widget that takes the width of numOfColumns grid cells inside
+	 * a parent.
 	 * 
-	 * @param parent
-	 *            the element that will hold the label.
-	 * @param text
-	 *            the text of the label.
-	 * @param numOfColumns
-	 *            the width (in grid cells) of the label.
+	 * @param parent       the element that will hold the label.
+	 * @param text         the text of the label.
+	 * @param numOfColumns the width (in grid cells) of the label.
 	 * @return newly created Label object
 	 */
 	private Label createLabel(Composite parent, String text, int numOfColumns) {
@@ -251,15 +246,12 @@
 	}
 
 	/**
-	 * Creates a Text widget that takes the width of numOfColumns grid cells
-	 * inside a parent.
+	 * Creates a Text widget that takes the width of numOfColumns grid cells inside
+	 * a parent.
 	 * 
-	 * @param parent
-	 *            the element that will hold the label.
-	 * @param numOfColumns
-	 *            the width (in grid cells) of the widget.
-	 * @param minimumWidth
-	 *            the minimum width of the Text widget.
+	 * @param parent       the element that will hold the label.
+	 * @param numOfColumns the width (in grid cells) of the widget.
+	 * @param minimumWidth the minimum width of the Text widget.
 	 * @return the newly created Text widget.
 	 */
 	private Text createTextField(Composite parent, int numOfColumns, int minimumWidth) {
@@ -279,12 +271,9 @@
 	 * Creates a Button widget that takes the width of numOfColumns grid cells
 	 * inside a parent.
 	 * 
-	 * @param parent
-	 *            the element that will hold the label.
-	 * @param label
-	 *            the text of the widget.
-	 * @param numOfColumns
-	 *            the width (in grid cells) of the widget.
+	 * @param parent       the element that will hold the label.
+	 * @param label        the text of the widget.
+	 * @param numOfColumns the width (in grid cells) of the widget.
 	 * @return the newly created Button widget.
 	 */
 	private Button createRadioButton(Composite parent, String label, int numOfColumns) {
diff --git a/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
index 8121a29..32c4fdb 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui.plantuml;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.ui.workbench,
  org.eclipse.jface,
  org.eclipse.capra.core,
@@ -16,8 +16,8 @@
  org.eclipse.capra.generic.artifactmodel,
  org.eclipse.ui.navigator,
  org.eclipse.ui.navigator.resources,
- net.sourceforge.plantuml.eclipse;bundle-version="1.1.23",
- net.sourceforge.plantuml.eclipse.imagecontrol;bundle-version="1.1.23"
+ net.sourceforge.plantuml.eclipse;bundle-version="1.1.24",
+ net.sourceforge.plantuml.eclipse.imagecontrol;bundle-version="1.1.24"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.capra.ui.plantuml,
  org.eclipse.capra.ui.plantuml.views
diff --git a/bundles/org.eclipse.capra.ui.plantuml/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.plantuml/OSGI-INF/l10n/bundle.properties
index c378917..ac886f9 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/OSGI-INF/l10n/bundle.properties
+++ b/bundles/org.eclipse.capra.ui.plantuml/OSGI-INF/l10n/bundle.properties
@@ -14,8 +14,10 @@
 #Properties file for org.eclipse.capra.ui.plantuml
 command.name.transitivity = Toggle Transitivity
 command.label.transitivity = Show transitive links
+command.description.transitivity = Show transitive links in the graph
 command.name.graph = Display graph
-command.label.graph = Display graph
+command.label.graph = Always display graph
+command.description.graph = Shows a graph of the selected elements instead of a matrix.
 command.name.internalLinks= Show internal links
 command.label.internalLinks = Show internal links
 command.name.relationshipTypes = Select relationship types
diff --git a/bundles/org.eclipse.capra.ui.plantuml/plugin.xml b/bundles/org.eclipse.capra.ui.plantuml/plugin.xml
index 02b978e..34b10b5 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/plugin.xml
+++ b/bundles/org.eclipse.capra.ui.plantuml/plugin.xml
@@ -35,6 +35,7 @@
          point="org.eclipse.ui.commands">
      
       <command
+            description="%command.description.transitivity"
             id="org.eclipse.capra.ui.plantuml.toggleTransitivity"
             name="%command.name.transitivity">
          <state
@@ -43,6 +44,7 @@
          </state>
       </command>
       <command
+            description="%command.description.graph"
             id="org.eclipse.capra.ui.plantuml.displayGraph"
             name="%command.name.graph">
          <state
diff --git a/bundles/org.eclipse.capra.ui.plantuml/pom.xml b/bundles/org.eclipse.capra.ui.plantuml/pom.xml
index 6977f94..ca34f67 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/pom.xml
+++ b/bundles/org.eclipse.capra.ui.plantuml/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.plantuml</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java
index ed927de..0528493 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java
@@ -15,6 +15,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.eclipse.capra.core.adapters.Connection;
@@ -25,7 +26,7 @@
 import org.eclipse.capra.core.helpers.ArtifactHelper;
 import org.eclipse.capra.core.helpers.EMFHelper;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
+import org.eclipse.capra.ui.helpers.SelectionSupportHelper;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
@@ -59,179 +60,173 @@
 	public String getDiagramText(IWorkbenchPart part, ISelection input) {
 		List<Object> selectedModels = new ArrayList<>();
 		if (part.getSite().getSelectionProvider() != null) {
-			selectedModels.addAll(
-					TraceCreationHelper.extractSelectedElements(part.getSite().getSelectionProvider().getSelection()));
+			selectedModels.addAll(SelectionSupportHelper
+					.extractSelectedElements(part.getSite().getSelectionProvider().getSelection(), part));
 		}
-		return getDiagramText(selectedModels);
+		return getDiagramText(selectedModels, Optional.of(part));
 	}
 
 	@SuppressWarnings("unchecked")
-	public String getDiagramText(List<Object> selectedModels) {
-		List<EObject> firstModelElements = null;
-		List<EObject> secondModelElements = null;
-		EObject selectedObject = null;
-		ResourceSet resourceSet = new ResourceSetImpl();
-		EObject traceModel = null;
+	public String getDiagramText(List<Object> selectedModels, Optional<IWorkbenchPart> part) {
+		if (selectedModels == null || selectedModels.size() < 1) {
+			return VisualizationHelper.createMatrix(null, artifactModel, null, null, true);
+		}
+
 		List<Connection> traces = new ArrayList<>();
+		List<EObject> selectedEObjects = new ArrayList<>();
+		EObject traceModel = null;
 
 		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
 		TraceMetaModelAdapter metamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
 
-		artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		ResourceSet artifactResourceSet = part.isPresent() ? SelectionSupportHelper.getResourceSet(part.get()) : null;
+
+		artifactModel = persistenceAdapter
+				.getArtifactWrappers(artifactResourceSet != null ? artifactResourceSet : new ResourceSetImpl());
 
 		if (selectedModels.size() > 0) {
 			ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
-			// check if there is a hander for the selected and get its Wrapper
-			IArtifactHandler<Object> handler = (IArtifactHandler<Object>) artifactHelper
-					.getHandler(selectedModels.get(0)).orElse(null);
-
-			if (handler != null) {
-				// unpack element in case it is in a container
-				Object firstElement_unpacked = null;
-				if (handler instanceof IArtifactUnpacker) {
-					firstElement_unpacked = IArtifactUnpacker.class.cast(handler).unpack(selectedModels.get(0));
-				} else
-					firstElement_unpacked = selectedModels.get(0);
-				selectedObject = handler.createWrapper(firstElement_unpacked, artifactModel);
-				if (selectedObject != null && selectedObject.eResource() != null) {
-					resourceSet = selectedObject.eResource().getResourceSet();
-					traceModel = persistenceAdapter.getTraceModel(resourceSet);
-					List<String> selectedRelationshipTypes = SelectRelationshipsHandler.getSelectedRelationshipTypes();
-					if (selectedModels.size() == 1) {
-						if (ToggleTransitivityHandler.isTraceViewTransitive()) {
-							int transitivityDepth = Integer.parseInt(TransitivityDepthHandler.getTransitivityDepth());
-							traces = metamodelAdapter.getTransitivelyConnectedElements(selectedObject, traceModel,
-									selectedRelationshipTypes, transitivityDepth);
-						} else {
-							traces = metamodelAdapter.getConnectedElements(selectedObject, traceModel,
-									selectedRelationshipTypes);
-						}
-						if (DisplayInternalLinksHandler.areInternalLinksShown()
-								&& ToggleTransitivityHandler.isTraceViewTransitive()) {
-							EObject previousElement = SelectRelationshipsHandler.getPreviousElement();
-							int transitivityDepth = Integer.parseInt(TransitivityDepthHandler.getTransitivityDepth());
-							if (previousElement != null) {
-								String previousElementName = EMFHelper.getNameAttribute(previousElement);
-								String currentElementName = EMFHelper.getNameAttribute(selectedObject);
-								if (!previousElementName.equals(currentElementName)) {
-									SelectRelationshipsHandler.clearPossibleRelationsForSelection();
-									SelectRelationshipsHandler.emptySelectedRelationshipTypes();
-									SelectRelationshipsHandler.setPreviousElement(selectedObject);
-								}
-							} else {
-								SelectRelationshipsHandler.setPreviousElement(selectedObject);
-							}
-							traces.addAll(metamodelAdapter.getInternalElementsTransitive(selectedObject, traceModel,
-									selectedRelationshipTypes, transitivityDepth, traces));
-						} else if (DisplayInternalLinksHandler.areInternalLinksShown()) {
-							EObject previousElement = SelectRelationshipsHandler.getPreviousElement();
-							if (previousElement != null) {
-								String previousElementName = EMFHelper.getNameAttribute(previousElement);
-								String currentElementName = EMFHelper.getNameAttribute(selectedObject);
-								if (!previousElementName.equals(currentElementName)) {
-									SelectRelationshipsHandler.clearPossibleRelationsForSelection();
-									SelectRelationshipsHandler.emptySelectedRelationshipTypes();
-									SelectRelationshipsHandler.setPreviousElement(selectedObject);
-								}
-							} else {
-								SelectRelationshipsHandler.setPreviousElement(selectedObject);
-							}
-							traces.addAll(metamodelAdapter.getInternalElements(selectedObject, traceModel,
-									selectedRelationshipTypes, false, 0, traces));
-						}
-						List<EObject> links = extractLinksFromTraces(traces);
-						SelectRelationshipsHandler.addToPossibleRelationsForSelection(links);
-						return VisualizationHelper.createNeighboursView(traces,
-								EMFHelper.linearize(handler.createWrapper(firstElement_unpacked, artifactModel)), artifactModel);
-					} else if (selectedModels.size() == 2) {
-						// unpack second element in case it is in a container
-						Object secondElement_unpacked = null;
-						if (handler instanceof IArtifactUnpacker) {
-							secondElement_unpacked = IArtifactUnpacker.class.cast(handler)
-									.unpack(selectedModels.get(1));
-						} else
-							secondElement_unpacked = selectedModels.get(1);
-
-						IArtifactHandler<Object> handlerSecondElement = (IArtifactHandler<Object>) artifactHelper
-								.getHandler(selectedModels.get(1)).orElse(null);
-						if (ToggleTransitivityHandler.isTraceViewTransitive()) {
-							firstModelElements = EMFHelper
-									.linearize(handler.createWrapper(firstElement_unpacked, artifactModel));
-							secondModelElements = EMFHelper.linearize(
-									handlerSecondElement.createWrapper(secondElement_unpacked, artifactModel));
-						} else {
-							List<EObject> firstObject = new ArrayList<>();
-							firstObject.add(handler.createWrapper(firstElement_unpacked, artifactModel));
-							List<EObject> secondObject = new ArrayList<>();
-							secondObject.add(handlerSecondElement.createWrapper(secondElement_unpacked, artifactModel));
-							firstModelElements = firstObject;
-							secondModelElements = secondObject;
-						}
-
-					} else if (selectedModels.size() > 2) {
-						if (ToggleTransitivityHandler.isTraceViewTransitive()) {
-							firstModelElements = selectedModels.stream().flatMap(r -> {
-								IArtifactHandler<Object> individualhandler = (IArtifactHandler<Object>) artifactHelper
-										.getHandler(r).orElse(null);
-								Object object = null;
-								if (individualhandler instanceof IArtifactUnpacker) {
-									object = IArtifactUnpacker.class.cast(individualhandler).unpack(r);
-								} else {
-									object = r;
-								}
-								return EMFHelper.linearize(individualhandler.createWrapper(object, artifactModel))
-										.stream();
-							}).collect(Collectors.toList());
-							secondModelElements = firstModelElements;
-						} else {
-							List<EObject> wrappers = new ArrayList<>();
-							selectedModels.stream().forEach(o -> {
-								IArtifactHandler<Object> individualhandler = (IArtifactHandler<Object>) artifactHelper
-										.getHandler(o).orElse(null);
-								Object object = null;
-								if (individualhandler instanceof IArtifactUnpacker) {
-									object = IArtifactUnpacker.class.cast(individualhandler).unpack(o);
-								} else {
-									object = o;
-								}
-								wrappers.add(individualhandler.createWrapper(object, artifactModel));
-							});
-
-							firstModelElements = wrappers;
-							secondModelElements = firstModelElements;
-
-							// User selected to display a graph with only the
-							// selected elements
-							if (ToggleDisplayGraphHandler.isDisplayGraph()) {
-								for (EObject object : wrappers) {
-									traces.addAll(metamodelAdapter.getConnectedElements(object, traceModel));
-								}
-
-								List<Connection> relevantTraces = new ArrayList<>();
-								for (Connection connection : traces) {
-									if (selectedModels.contains(connection.getOrigin())
-											&& selectedModels.stream().anyMatch(connection.getTargets()::contains)) {
-										Connection newConnection = new Connection(
-												connection.getOrigin(), connection.getTargets().stream()
-														.filter(selectedModels::contains).collect(Collectors.toList()),
-												connection.getTlink());
-										relevantTraces.add(newConnection);
-									}
-								}
-								return VisualizationHelper.createNeighboursView(relevantTraces, wrappers, artifactModel);
-							}
-						}
-
+			// Get the artifact wrappers for all selected elements
+			selectedModels.stream().forEach(obj -> {
+				IArtifactHandler<Object> handler = (IArtifactHandler<Object>) artifactHelper.getHandler(obj)
+						.orElse(null);
+				if (handler != null) {
+					// unpack element in case it is in a container
+					Object unpackedElement = null;
+					if (handler instanceof IArtifactUnpacker) {
+						unpackedElement = IArtifactUnpacker.class.cast(handler).unpack(obj);
+					} else {
+						unpackedElement = obj;
+					}
+					if (ToggleTransitivityHandler.isTraceViewTransitive()) {
+						// Make sure we have all relevant EObjects in the list.
+						selectedEObjects
+								.addAll(EMFHelper.linearize(handler.createWrapper(unpackedElement, artifactModel)));
+					} else {
+						selectedEObjects.add(handler.createWrapper(unpackedElement, artifactModel));
 					}
 				}
+			});
+
+			final EObject selectedObject = selectedEObjects.size() > 0 ? selectedEObjects.get(0) : null;
+			if (selectedObject != null && selectedObject.eResource() != null) {
+				ResourceSet resourceSet = selectedObject.eResource().getResourceSet();
+				traceModel = persistenceAdapter.getTraceModel(resourceSet);
+
+				List<String> selectedRelationshipTypes = SelectRelationshipsHandler.getSelectedRelationshipTypes();
+				for (EObject obj : selectedEObjects) {
+					traces.addAll(getViewableTraceLinks(obj, traceModel, metamodelAdapter, selectedRelationshipTypes));
+				}
+				;
+
+				if (selectedModels.size() == 1) {
+					return VisualizationHelper.createNeighboursView(traces, EMFHelper.linearize(selectedObject),
+							artifactModel);
+
+				} else {
+					// User selected to display a graph with only the selected elements
+					if (ToggleDisplayGraphHandler.isDisplayGraph()) {
+						return renderMultiSelectionGraph(traces, selectedEObjects, artifactHelper);
+					}
+				}
+
 			}
 		}
-		if (DisplayInternalLinksHandler.areInternalLinksShown()) {
-			return VisualizationHelper.createMatrix(traceModel, artifactModel, firstModelElements, secondModelElements, true);
-		} else {
-			return VisualizationHelper.createMatrix(traceModel, artifactModel, firstModelElements, secondModelElements, false);
-		}
 
+		// Standard case is to render a traceability matrix, potentially showing a
+		// message instructing the user to select elements.
+		return VisualizationHelper.createMatrix(traceModel, artifactModel, selectedEObjects, selectedEObjects,
+				DisplayInternalLinksHandler.areInternalLinksShown());
+
+	}
+
+	/**
+	 * Gets the code for a traceability graph that contains all selected objects.
+	 * 
+	 * @param traces
+	 * @param selectedEObjects
+	 * @param artifactHelper
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	protected String renderMultiSelectionGraph(List<Connection> traces, List<EObject> selectedEObjects,
+			ArtifactHelper artifactHelper) {
+		List<Connection> relevantTraces = new ArrayList<>();
+		List<EObject> wrappers = new ArrayList<>();
+		for (Connection connection : traces) {
+			if (selectedEObjects.contains(connection.getOrigin())
+					&& selectedEObjects.stream().anyMatch(connection.getTargets()::contains)) {
+				Connection newConnection = new Connection(connection.getOrigin(), connection.getTargets().stream()
+						.filter(selectedEObjects::contains).collect(Collectors.toList()), connection.getTlink());
+				relevantTraces.add(newConnection);
+				IArtifactHandler<Object> originHandler = (IArtifactHandler<Object>) artifactHelper
+						.getHandler(connection.getOrigin()).orElse(null);
+				wrappers.add(originHandler.createWrapper(connection.getOrigin(), artifactModel));
+				connection.getTargets().stream().filter(selectedEObjects::contains).forEach(t -> {
+					IArtifactHandler<Object> targetHandler = (IArtifactHandler<Object>) artifactHelper
+							.getHandler(connection.getOrigin()).orElse(null);
+					wrappers.add(targetHandler.createWrapper(t, artifactModel));
+				});
+			}
+		}
+		return VisualizationHelper.createNeighboursView(relevantTraces, wrappers, artifactModel);
+	}
+
+	/**
+	 * Get all trace links for the given object from the provided trace model that
+	 * conform to the selected trace link types.
+	 * 
+	 * @param selectedObject
+	 * @param traceModel
+	 * @param metamodelAdapter
+	 * @param selectedRelationshipTypes
+	 * @return
+	 */
+	protected List<Connection> getViewableTraceLinks(EObject selectedObject, EObject traceModel,
+			TraceMetaModelAdapter metamodelAdapter, List<String> selectedRelationshipTypes) {
+		List<Connection> traces;
+		if (ToggleTransitivityHandler.isTraceViewTransitive()) {
+			int transitivityDepth = Integer.parseInt(TransitivityDepthHandler.getTransitivityDepth());
+			traces = metamodelAdapter.getTransitivelyConnectedElements(selectedObject, traceModel,
+					selectedRelationshipTypes, transitivityDepth);
+		} else {
+			traces = metamodelAdapter.getConnectedElements(selectedObject, traceModel, selectedRelationshipTypes);
+		}
+		if (DisplayInternalLinksHandler.areInternalLinksShown() && ToggleTransitivityHandler.isTraceViewTransitive()) {
+			EObject previousElement = SelectRelationshipsHandler.getPreviousElement();
+			int transitivityDepth = Integer.parseInt(TransitivityDepthHandler.getTransitivityDepth());
+			if (previousElement != null) {
+				String previousElementName = EMFHelper.getNameAttribute(previousElement);
+				String currentElementName = EMFHelper.getNameAttribute(selectedObject);
+				if (!previousElementName.equals(currentElementName)) {
+					SelectRelationshipsHandler.clearPossibleRelationsForSelection();
+					SelectRelationshipsHandler.emptySelectedRelationshipTypes();
+					SelectRelationshipsHandler.setPreviousElement(selectedObject);
+				}
+			} else {
+				SelectRelationshipsHandler.setPreviousElement(selectedObject);
+			}
+			traces.addAll(metamodelAdapter.getInternalElementsTransitive(selectedObject, traceModel,
+					selectedRelationshipTypes, transitivityDepth, traces));
+		} else if (DisplayInternalLinksHandler.areInternalLinksShown()) {
+			EObject previousElement = SelectRelationshipsHandler.getPreviousElement();
+			if (previousElement != null) {
+				String previousElementName = EMFHelper.getNameAttribute(previousElement);
+				String currentElementName = EMFHelper.getNameAttribute(selectedObject);
+				if (!previousElementName.equals(currentElementName)) {
+					SelectRelationshipsHandler.clearPossibleRelationsForSelection();
+					SelectRelationshipsHandler.emptySelectedRelationshipTypes();
+					SelectRelationshipsHandler.setPreviousElement(selectedObject);
+				}
+			} else {
+				SelectRelationshipsHandler.setPreviousElement(selectedObject);
+			}
+			traces.addAll(metamodelAdapter.getInternalElements(selectedObject, traceModel, selectedRelationshipTypes,
+					false, 0, traces));
+		}
+		List<EObject> links = extractLinksFromTraces(traces);
+		SelectRelationshipsHandler.addToPossibleRelationsForSelection(links);
+		return traces;
 	}
 
 	@Override
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleDisplayGraphHandler.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleDisplayGraphHandler.java
index 00e9531..d0bdc0c 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleDisplayGraphHandler.java
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleDisplayGraphHandler.java
@@ -41,13 +41,11 @@
 	/**
 	 * Checks whether the trace view is set to show a graph.
 	 * 
-	 * @return {@code true} if the graph view is enabled, {@code false}
-	 *         otherwise
+	 * @return {@code true} if the graph view is enabled, {@code false} otherwise
 	 */
 	public static boolean isDisplayGraph() {
 		Preferences graphDisplay = getPreference();
-
-		return graphDisplay.get("option", "graph").equals("matrix");
+		return graphDisplay.get("option", "matrix").equals("graph");
 	}
 
 	private static Preferences getPreference() {
@@ -59,9 +57,8 @@
 	/**
 	 * Sets whether the trace view is set to show a graph or a matrix.
 	 * 
-	 * @param value
-	 *            {@code true} if the graph view is enabled, {@code false}
-	 *            otherwise
+	 * @param value {@code true} if the graph view is enabled, {@code false}
+	 *              otherwise
 	 * 
 	 */
 	public static void setDisplayGraph(boolean value) {
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleTransitivityHandler.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleTransitivityHandler.java
index 54829df..845bc90 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleTransitivityHandler.java
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleTransitivityHandler.java
@@ -45,8 +45,7 @@
 	 */
 	public static boolean isTraceViewTransitive() {
 		Preferences transitivity = getPreference();
-
-		return transitivity.get("option", "direct").equals("direct");
+		return transitivity.get("option", "direct").equals("transitive");
 	}
 
 	private static Preferences getPreference() {
@@ -58,12 +57,11 @@
 	/**
 	 * Sets whether the trace view is set to show transitive traces.
 	 *
-	 * @param value
-	 *            indicates whether transitive traces should be shown
+	 * @param value indicates whether transitive traces should be shown
 	 */
 	public static void setTraceViewTransitive(boolean value) {
 		Preferences transitivity = getPreference();
-		transitivity.put("option", value ? "direct" : "transitive");
+		transitivity.put("option", value ? "transitive" : "direct");
 
 		try {
 			// forces the application to save the preferences
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend
index 42fbdd7..0b3511f 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend
@@ -9,19 +9,19 @@
 import org.eclipse.capra.core.helpers.ArtifactHelper
 
 class VisualizationHelper {
-	def static String createMatrix(EObject traceModel, EObject artifactModel, Collection<EObject> firstElements, Collection<EObject> secondElements, Boolean internalLinks){	
+	def static String createMatrix(EObject traceModel, EObject artifactModel, Collection<EObject> rows, Collection<EObject> columns, Boolean internalLinks){	
 	val traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get()
 	val artifactHelper = new ArtifactHelper(artifactModel)
 	'''
 	@startuml
 	salt
 	{#
-	«IF firstElements != null»
-	.«FOR e : secondElements»|«artifactHelper.getArtifactLabel(e)»«ENDFOR»
-	«FOR first : firstElements»«artifactHelper.getArtifactLabel(first)»«FOR second : secondElements» |«IF internalLinks»«IF traceAdapter.isThereATraceBetween(first, second, traceModel) || traceAdapter.isThereAnInternalTraceBetween(first, second)»X«ELSE ».«ENDIF»«ELSE»«IF traceAdapter.isThereATraceBetween(first, second, traceModel)»X«ELSE ».«ENDIF»«ENDIF»«ENDFOR»
+	«IF rows !== null && rows.size() > 0»
+	.«FOR e : columns»|«artifactHelper.getArtifactLabel(e)»«ENDFOR»
+	«FOR first : rows»«artifactHelper.getArtifactLabel(first)»«FOR second : columns» |«IF internalLinks»«IF traceAdapter.isThereATraceBetween(first, second, traceModel) || traceAdapter.isThereAnInternalTraceBetween(first, second)»X«ELSE ».«ENDIF»«ELSE»«IF traceAdapter.isThereATraceBetween(first, second, traceModel)»X«ELSE ».«ENDIF»«ENDIF»«ENDFOR»
 	«ENDFOR»
 	«ELSE»
-	Choose two containers to show a traceability matrix of their contents.
+	Choose at least two elements to show their traceability matrix.
 	«ENDIF»
 	}
 	
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/views/CapraPlantUmlView.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/views/CapraPlantUmlView.java
index 478d039..0df9b3e 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/views/CapraPlantUmlView.java
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/views/CapraPlantUmlView.java
@@ -13,6 +13,12 @@
  *******************************************************************************/
 package org.eclipse.capra.ui.plantuml.views;
 
+import org.eclipse.capra.ui.plantuml.ToggleDisplayGraphHandler;
+import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
+import org.eclipse.core.commands.Command;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.commands.ICommandService;
+
 import net.sourceforge.plantuml.eclipse.views.PlantUmlView;
 
 /**
@@ -21,4 +27,19 @@
  */
 public class CapraPlantUmlView extends PlantUmlView {
 
+	@Override
+	public void createPartControl(final Composite parent) {
+		super.createPartControl(parent);
+		ICommandService cmdService = getSite().getService(ICommandService.class);
+		Command toggleTransitivity = cmdService.getCommand("org.eclipse.capra.ui.plantuml.toggleTransitivity");
+		if (toggleTransitivity != null) {
+			toggleTransitivity.getState("org.eclipse.ui.commands.toggleState")
+					.setValue(ToggleTransitivityHandler.isTraceViewTransitive());
+		}
+		Command displayGraph = cmdService.getCommand("org.eclipse.capra.ui.plantuml.displayGraph");
+		if (displayGraph != null) {
+			displayGraph.getState("org.eclipse.ui.commands.toggleState")
+					.setValue(ToggleDisplayGraphHandler.isDisplayGraph());
+		}
+	}
 }
diff --git a/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
index bd8f942..d12d914 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
+++ b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java
index e818162..393dd4a 100644
--- a/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java
+++ b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java
@@ -1,9 +1,7 @@
 package org.eclipse.capra.ui.plantuml;
 
-import com.google.common.base.Objects;
 import java.util.Collection;
 import java.util.List;
-import java.util.Optional;
 import org.eclipse.capra.core.adapters.Connection;
 import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
 import org.eclipse.capra.core.helpers.ArtifactHelper;
@@ -14,11 +12,10 @@
 
 @SuppressWarnings("all")
 public class VisualizationHelper {
-  public static String createMatrix(final EObject traceModel, final EObject artifactModel, final Collection<EObject> firstElements, final Collection<EObject> secondElements, final Boolean internalLinks) {
+  public static String createMatrix(final EObject traceModel, final EObject artifactModel, final Collection<EObject> rows, final Collection<EObject> columns, final Boolean internalLinks) {
     String _xblockexpression = null;
     {
-      Optional<TraceMetaModelAdapter> _traceMetamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter();
-      final TraceMetaModelAdapter traceAdapter = _traceMetamodelAdapter.get();
+      final TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
       final ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
       StringConcatenation _builder = new StringConcatenation();
       _builder.append("@startuml");
@@ -28,23 +25,22 @@
       _builder.append("{#");
       _builder.newLine();
       {
-        boolean _notEquals = (!Objects.equal(firstElements, null));
-        if (_notEquals) {
+        if (((rows != null) && (rows.size() > 0))) {
           _builder.append(".");
           {
-            for(final EObject e : secondElements) {
+            for(final EObject e : columns) {
               _builder.append("|");
               String _artifactLabel = artifactHelper.getArtifactLabel(e);
-              _builder.append(_artifactLabel, "");
+              _builder.append(_artifactLabel);
             }
           }
           _builder.newLineIfNotEmpty();
           {
-            for(final EObject first : firstElements) {
+            for(final EObject first : rows) {
               String _artifactLabel_1 = artifactHelper.getArtifactLabel(first);
-              _builder.append(_artifactLabel_1, "");
+              _builder.append(_artifactLabel_1);
               {
-                for(final EObject second : secondElements) {
+                for(final EObject second : columns) {
                   _builder.append(" |");
                   {
                     if ((internalLinks).booleanValue()) {
@@ -72,7 +68,7 @@
             }
           }
         } else {
-          _builder.append("Choose two containers to show a traceability matrix of their contents.");
+          _builder.append("Choose at least two elements to show their traceability matrix.");
           _builder.newLine();
         }
       }
@@ -95,19 +91,19 @@
       _builder.newLine();
       _builder.append("object \"");
       String _originLabel = helper.originLabel();
-      _builder.append(_originLabel, "");
+      _builder.append(_originLabel);
       {
         boolean _originHasLocation = helper.originHasLocation();
         if (_originHasLocation) {
           _builder.append(" [[");
           String _originLocation = helper.originLocation();
-          _builder.append(_originLocation, "");
+          _builder.append(_originLocation);
           _builder.append(" (Go to)]]");
         }
       }
       _builder.append("\" as ");
       String _originId = helper.originId();
-      _builder.append(_originId, "");
+      _builder.append(_originId);
       _builder.append(" #pink");
       _builder.newLineIfNotEmpty();
       {
@@ -115,25 +111,25 @@
         for(final String id : _objectIdsWithoutOrigin) {
           _builder.append("object \"");
           String _label = helper.label(id);
-          _builder.append(_label, "");
+          _builder.append(_label);
           {
             boolean _hasLocation = helper.hasLocation(id);
             if (_hasLocation) {
               _builder.append(" [[");
               String _location = helper.location(id);
-              _builder.append(_location, "");
+              _builder.append(_location);
               _builder.append(" (Go to)]]");
             }
           }
           _builder.append("\" as ");
-          _builder.append(id, "");
+          _builder.append(id);
           _builder.newLineIfNotEmpty();
         }
       }
       {
         List<String> _arrows = helper.arrows();
         for(final String a : _arrows) {
-          _builder.append(a, "");
+          _builder.append(a);
           _builder.newLineIfNotEmpty();
         }
       }
diff --git a/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF
index 50abc56..09fd7b2 100644
--- a/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.ui.reqif;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.jface,
  org.eclipse.ui.workbench,
  org.eclipse.equinox.preferences,
diff --git a/bundles/org.eclipse.capra.ui.reqif/pom.xml b/bundles/org.eclipse.capra.ui.reqif/pom.xml
index 6428f8f..d085842 100644
--- a/bundles/org.eclipse.capra.ui.reqif/pom.xml
+++ b/bundles/org.eclipse.capra.ui.reqif/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.reqif</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.sunburst/.classpath b/bundles/org.eclipse.capra.ui.sunburst/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.ui.sunburst/.project b/bundles/org.eclipse.capra.ui.sunburst/.project
new file mode 100644
index 0000000..1805f47
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.sunburst</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/bundles/org.eclipse.capra.ui.sunburst/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.sunburst/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.capra.ui.sunburst/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.capra.ui.sunburst/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..e8ff8be
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+pluginProject.equinox=false
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/bundles/org.eclipse.capra.ui.sunburst/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.sunburst/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1f111ab
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.sunburst;singleton:=true
+Bundle-Version: 0.8.1.qualifier
+Require-Bundle: org.eclipse.ui.workbench,
+ org.eclipse.jface,
+ org.eclipse.capra.core,
+ org.eclipse.emf.ecore.editor,
+ org.eclipse.ui,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.capra.ui,
+ org.eclipse.capra.generic.artifactmodel
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.ui.sunburst.view
+Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/org.eclipse.capra.ui.sunburst/OSGI-INF/I10n/bundle.properties b/bundles/org.eclipse.capra.ui.sunburst/OSGI-INF/I10n/bundle.properties
new file mode 100644
index 0000000..1409b26
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/OSGI-INF/I10n/bundle.properties
@@ -0,0 +1,17 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+view.name = Capra Sunburst viewer
+category.name = Capra Traceability
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Trace Visualisation Support (Sunburst)
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.sunburst/build.properties b/bundles/org.eclipse.capra.ui.sunburst/build.properties
new file mode 100644
index 0000000..2ccc38c
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/build.properties
@@ -0,0 +1,21 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#   
+# SPDX-License-Identifier: EPL-2.0
+#   
+# Contributors:
+#     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#     Chalmers | University of Gothenburg - additional features, updated API
+#     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Sunburst View
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               OSGI-INF/,\
+               OSGI-INF/I10n/bundle.properties
+               
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.sunburst/plugin.xml b/bundles/org.eclipse.capra.ui.sunburst/plugin.xml
new file mode 100644
index 0000000..08518a3
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/plugin.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            category="org.eclipse.capra.ui.views"
+            class="org.eclipse.capra.ui.sunburst.view.SunburstView"
+            icon="platform:/plugin/org.eclipse.capra.ui/icons/capra.png"
+            id="org.eclipse.capra.ui.sunburst.view.SunburstView"
+            name="Capra Sunburst viewer">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.eclipse.capra.generic.perspective.CapraPerspective">
+         <view
+               id="org.eclipse.capra.ui.sunburst.view.SunburstView"
+               ratio="0.5"
+               relationship="right"
+               relative="org.eclipse.ui.views.ProblemView">
+         </view>
+      </perspectiveExtension>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.sunburst/pom.xml b/bundles/org.eclipse.capra.ui.sunburst/pom.xml
new file mode 100644
index 0000000..ed5b7ff
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<relativePath>../../pom.xml</relativePath>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.8.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.sunburst</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.sunburst/src/html/index.html b/bundles/org.eclipse.capra.ui.sunburst/src/html/index.html
new file mode 100644
index 0000000..be0eccd
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/src/html/index.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!--
+ Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v2.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v20.html
+
+ SPDX-License-Identifier: EPL-2.0
+
+ Contributors:
+     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+     Chalmers | University of Gothenburg - additional features, updated API
+     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Sunburst View
+-->
+<head>
+	<title>Eclipse Capra Sunburst View</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<script src="https://unpkg.com/d3"></script>
+	<script src="https://unpkg.com/sunburst-chart"></script>
+	<style>body { margin: 0 }</style>
+</head>
+<body>
+	<div id="chart"></div>
+	<script>
+		const color = d3.scaleOrdinal(d3.schemePaired);
+		const nodeData;
+
+	    Sunburst()
+    	  .data(nodeData)
+	      .size('size')
+    	  .color(d => color(d.name))
+	      (document.getElementById('chart'));
+	</script>
+</body>
+</html>
diff --git a/bundles/org.eclipse.capra.ui.sunburst/src/org/eclipse/capra/ui/sunburst/SunburstPreferences.java b/bundles/org.eclipse.capra.ui.sunburst/src/org/eclipse/capra/ui/sunburst/SunburstPreferences.java
new file mode 100644
index 0000000..517b759
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/src/org/eclipse/capra/ui/sunburst/SunburstPreferences.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *  
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ * Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *      Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.ui.sunburst;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+public class SunburstPreferences {
+
+	public static final IScopeContext SCOPE_CONTEXT = InstanceScope.INSTANCE;
+	public static final String PREFERENCE_NODE = "org.eclipse.capra.ui.sunburst";
+
+	// Maximum recursion depth for drawing sunburst
+	public static final String MAX_RECURSION_LEVEL = "MAX_RECURSION_LEVEL";
+	public static final int MAX_RECURSION_LEVEL_DEFAULT = 5;
+
+	public static IEclipsePreferences getPreferences() {
+		return SCOPE_CONTEXT.getNode(PREFERENCE_NODE);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.sunburst/src/org/eclipse/capra/ui/sunburst/view/SunburstView.java b/bundles/org.eclipse.capra.ui.sunburst/src/org/eclipse/capra/ui/sunburst/view/SunburstView.java
new file mode 100644
index 0000000..e2965c9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.sunburst/src/org/eclipse/capra/ui/sunburst/view/SunburstView.java
@@ -0,0 +1,410 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *     Fredrik Johansson and Themistoklis Ntoukolis - initial implementation of the Sunburst View
+ *******************************************************************************/
+package org.eclipse.capra.ui.sunburst.view;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.handlers.IArtifactUnpacker;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.core.helpers.TraceHelper;
+import org.eclipse.capra.ui.helpers.SelectionSupportHelper;
+import org.eclipse.capra.ui.sunburst.SunburstPreferences;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+import org.osgi.service.prefs.BackingStoreException;
+
+/**
+ * Provides a view of the trace model using a navigable sunburst view.
+ * <p>
+ * The sunburst view visualises the traced artifacts as circle segments centred
+ * around a circle that represents the currently selected artifact. Each circle
+ * segment is in turn surrounded by circle fragments that represent the
+ * artifacts that are traced from it. This way, it is possible to visualise even
+ * complex trace models in a compact way.
+ * <p>
+ * The view is navigable. When clicking on one of the circle segments, the view
+ * centres on the artifact represented by the circle segment. Clicking on the
+ * centre zooms out again.
+ * <p>
+ * The sunburst view is based on <a href="https://d3js.org/d3.js</a> and
+ * <a href="https://github.com/vasturiano/sunburst-chart">sunburst-chart</a>.
+ * The library d3.js is licensed under BSD-3-Clause and sunburst-chart is
+ * licensed under MIT.
+ * 
+ * 
+ * @author Fredrik Johansson
+ * @author Themistoklis Ntoukolis
+ *
+ */
+public class SunburstView extends ViewPart {
+
+	/**
+	 * The location of the HTML file the JSON code of the sunburst data will be
+	 * injected in.
+	 */
+	private static final String HTML_SOURCE_LOCATION = "platform:/plugin/org.eclipse.capra.ui.sunburst/src/html/index.html";
+
+	private int maxRecursionLevel;
+	IEclipsePreferences preferences = SunburstPreferences.getPreferences();
+
+	private Browser browser;
+	private Action selectDepthAction;
+
+	final TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+	TraceMetaModelAdapter metamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+	TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+
+	private ResourceSet resourceSet = new ResourceSetImpl();
+	private EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
+	private EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+
+	private ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+	private TraceHelper traceHelper = new TraceHelper(traceModel);
+
+	private List<Object> selectedModels = new ArrayList<>();
+
+	private ISelectionListener listener = new ISelectionListener() {
+		@Override
+		public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+			getSelected(part, selection);
+			browser.setText(createHTML());
+		}
+	};
+
+	/**
+	 * Retrieves the selected elements from {@code selection} and stores them in
+	 * {@link #selectedModels}.
+	 * 
+	 * @param part      the workbench part
+	 * @param selection the selection
+	 */
+	private void getSelected(IWorkbenchPart part, ISelection selection) {
+		selectedModels.clear();
+		if (part.getSite().getSelectionProvider() != null) {
+			selectedModels.addAll(SelectionSupportHelper
+					.extractSelectedElements(part.getSite().getSelectionProvider().getSelection(), part));
+		}
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+		this.maxRecursionLevel = preferences.getInt(SunburstPreferences.MAX_RECURSION_LEVEL,
+				SunburstPreferences.MAX_RECURSION_LEVEL_DEFAULT);
+		browser = new Browser(parent, SWT.NONE);
+		browser.setText(createHTML());
+		makeActions();
+		contributeToActionBars();
+		getViewSite().getPage().addSelectionListener(listener);
+	}
+
+	/**
+	 * Disposes the internal browser widget.
+	 */
+	@Override
+	public void dispose() {
+		getViewSite().getPage().removeSelectionListener(listener);
+		browser.dispose();
+		browser = null;
+		super.dispose();
+	}
+
+	@Override
+	public void setFocus() {
+		// Deliberately do nothing.
+	}
+
+	/**
+	 * Creates the actions for the toolbar and the menu.
+	 */
+	private void makeActions() {
+		selectDepthAction = new SelectDepthAction();
+		selectDepthAction.setText("Set recursion depth...");
+		selectDepthAction.setToolTipText("Select the maximum depth until which traceability links will be traversed.");
+	}
+
+	/**
+	 * Adds the relevant actions to the pull down menu.
+	 * 
+	 * @param manager the menu manager for the pull down menu
+	 */
+	private void fillLocalPullDown(IMenuManager manager) {
+		manager.removeAll();
+		manager.add(selectDepthAction);
+	}
+
+	/**
+	 * Adds relevant entries to the tool bar and pull down menu.
+	 */
+	private void contributeToActionBars() {
+		IActionBars bars = getViewSite().getActionBars();
+		fillLocalPullDown(bars.getMenuManager());
+	}
+
+	/**
+	 * Retrieves the code of the HTML container for the sunburst view from the
+	 * filesystem.
+	 * 
+	 * @return the HMTL code stored in {@link SunburstView#HTML_SOURCE_LOCATION}
+	 */
+	private String getHTML() {
+		URL url;
+		StringBuilder html = new StringBuilder();
+		try {
+			url = new URL(HTML_SOURCE_LOCATION);
+			InputStream inputStream = url.openConnection().getInputStream();
+			BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
+			String inputLine;
+
+			while ((inputLine = in.readLine()) != null) {
+				html.append(inputLine);
+				html.append(System.lineSeparator());
+			}
+
+			in.close();
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return html.toString();
+	}
+
+	/**
+	 * Injects the generated JSON code into the HTML page and returns the full page
+	 * to be displayed in the browser.
+	 * 
+	 * @return the HTML code to display in the browser
+	 */
+	private String createHTML() {
+		String json = convertToJSON();
+		String html = getHTML();
+		return html.replace("const nodeData;", "const nodeData = " + json + ";");
+	}
+
+	/**
+	 * Converts the trace model into a JSON format that serves as input for the
+	 * sunburst visualisation.
+	 * 
+	 * @return the trace model in JSON format
+	 */
+	@SuppressWarnings("unchecked")
+	private String convertToJSON() {
+		List<EObject> secondLevelNodes = new ArrayList<>();
+		String start = "";
+		String end = "]}";
+		StringBuilder inner = new StringBuilder();
+
+		EObject selectedObject;
+		List<EObject> alreadySeen = new ArrayList<>();
+
+		if (!selectedModels.isEmpty()) {
+			ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+			for (Object selection : selectedModels) {
+
+				IArtifactHandler<Object> handler = (IArtifactHandler<Object>) artifactHelper.getHandler(selection)
+						.orElse(null);
+				if (handler != null) {
+					Object unpackedElement = null;
+					if (handler instanceof IArtifactUnpacker) {
+						unpackedElement = IArtifactUnpacker.class.cast(handler).unpack(selection);
+					} else {
+						unpackedElement = selection;
+					}
+					EObject wrappedElement = handler.createWrapper(unpackedElement, artifactModel);
+					if (traceHelper.isArtifactInTraceModel(wrappedElement)) {
+						selectedObject = wrappedElement;
+						if (selectedModels.size() == 1) {
+							secondLevelNodes = getUniqueChildren(null, selectedObject);
+							start = "{\"name\": \"" + artifactHelper.getArtifactLabel(selectedObject)
+									+ "\",\"children\":[";
+							alreadySeen.add(selectedObject);
+						} else {
+							// if more than one artifact is selected, we introduce a "virtual" node and add
+							// them both to the second level
+							start = "{\"name\":\"\",\"children\":[";
+							secondLevelNodes.add(selectedObject);
+						}
+					}
+				}
+			}
+		}
+		for (int secondLevelIndex = 0; secondLevelIndex < secondLevelNodes.size(); secondLevelIndex++) {
+			processHierarchyLevel(inner, secondLevelNodes.get(secondLevelIndex), alreadySeen, 1);
+			if (secondLevelIndex < secondLevelNodes.size() - 1) {
+				inner.append(",");
+			}
+		}
+
+		String json = start + inner.toString() + end;
+		return json;
+	}
+
+	/**
+	 * Recursive method that traverses the trace model starting from {@code parent}.
+	 * It adds the JSON code for the parent and all children to the given
+	 * {@link StringBuilder} as long as the maximum recursion depth has not been
+	 * reached.
+	 * 
+	 * @param builder      the {@code StringBuilder} to which the JSON code should
+	 *                     be added
+	 * @param parent       the node that should be traversed in this iteration of
+	 *                     the recursion
+	 * @param alreadySeen  a list of nodes that have already been treated
+	 * @param currentLevel the current recursion level
+	 */
+	private void processHierarchyLevel(StringBuilder builder, EObject parent, List<EObject> alreadySeen,
+			int currentLevel) {
+		if (alreadySeen == null)
+			alreadySeen = new ArrayList<>();
+
+		// Add the current parent to the view
+		String text = artifactHelper.getArtifactLabel(parent);
+		getEntryJSON(builder, text);
+		alreadySeen.add(parent);
+
+		// Stop the recursion if we have reached the maximum depth
+		if (currentLevel < this.maxRecursionLevel) {
+			List<EObject> children = getUniqueChildren(alreadySeen, parent);
+			if (!children.isEmpty()) {
+				builder.append("\"children\":[");
+				// Go through the children and recurse
+				for (int childLevelIndex = 0; childLevelIndex < children.size(); childLevelIndex++) {
+					processHierarchyLevel(builder, children.get(childLevelIndex), alreadySeen, currentLevel + 1);
+					alreadySeen.remove(children.get(childLevelIndex));
+
+					if (childLevelIndex < children.size() - 1) {
+						builder.append(",");
+					}
+				}
+				builder.append("]}");
+			} else {
+				builder.append("\"size\": 1}");
+			}
+		} else {
+			builder.append("\"size\": 1}");
+		}
+	}
+
+	/**
+	 * Adds the JSON code for the entry with the provided {@code name} to the
+	 * provided {@code builder}.
+	 * 
+	 * @param builder   the {@link StringBuilder} to add the code to
+	 * @param entryName the name of the entry to add
+	 */
+	private void getEntryJSON(StringBuilder builder, String entryName) {
+		builder.append("{\"name\":\"").append(entryName).append("\",");
+	}
+
+	/**
+	 * Retrieves a unique list of {@link EObject} instances that are connected to
+	 * the provided {@code artifact}. The elements in the result are unique in the
+	 * sense that they will not contain {@code artifact}, will be free of
+	 * duplicates, and will not contain any elements contained in {@code prev}.
+	 * <p>
+	 * The method will always return a valid list which can be empty.
+	 * 
+	 * @param prev     a list of elements that should be excluded from the result
+	 * @param artifact the artifact whose children are requested
+	 * @return a list of unique elements connected to {@code artifact}
+	 */
+	public List<EObject> getUniqueChildren(List<EObject> prev, EObject artifact) {
+		List<Connection> conNow = traceAdapter.getConnectedElements(artifact, traceModel);
+		List<EObject> allConnected = new ArrayList<>(TraceHelper.getTracedElements(conNow));
+		if (EMFHelper.isElementInList(allConnected, artifact)) {
+			allConnected.remove(artifact);
+		}
+		if (prev != null) {
+			for (EObject x : prev) {
+				if (EMFHelper.isElementInList(allConnected, x)) {
+					allConnected.remove(x);
+				}
+			}
+		}
+		return allConnected;
+	}
+
+	/**
+	 * Class to allow selecting the maximum traversal depth of trace model. Stores
+	 * the selection in the Eclipse Capra preferences.
+	 */
+	private class SelectDepthAction extends Action {
+		@Override
+		public void run() {
+			IInputValidator numberValidator = new IInputValidator() {
+
+				@Override
+				public String isValid(String newText) {
+					boolean validationError = false;
+					try {
+						int i = Integer.parseInt(newText);
+						if (i < 1) {
+							validationError = true;
+						}
+					} catch (NumberFormatException ex) {
+						validationError = true;
+					}
+					if (validationError) {
+						return "Please enter a valid number larger than 0.";
+					}
+					return null;
+				}
+			};
+			InputDialog dialog = new InputDialog(getViewSite().getShell(), "Trace link depth",
+					"Please select the maximum depth until which traceability links will be traversed for the Sunburst view.",
+					String.valueOf(maxRecursionLevel), numberValidator);
+			dialog.setBlockOnOpen(true);
+			dialog.open();
+			if (dialog.getReturnCode() == Dialog.OK) {
+				maxRecursionLevel = Integer.parseInt(dialog.getValue());
+				preferences.putInt(SunburstPreferences.MAX_RECURSION_LEVEL, maxRecursionLevel);
+				try {
+					// forces the application to save the preferences
+					preferences.flush();
+				} catch (BackingStoreException e) {
+					e.printStackTrace();
+				}
+				browser.setText(createHTML());
+			}
+		}
+	};
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.xtext/.classpath b/bundles/org.eclipse.capra.ui.xtext/.classpath
new file mode 100644
index 0000000..b862a29
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/bundles/org.eclipse.capra.ui.xtext/.project b/bundles/org.eclipse.capra.ui.xtext/.project
new file mode 100644
index 0000000..cc57f60
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.capra.ui.xtext</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/bundles/org.eclipse.capra.ui.xtext/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.xtext/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..295926d
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8

+org.eclipse.jdt.core.compiler.compliance=1.8

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.8

diff --git a/bundles/org.eclipse.capra.ui.xtext/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.xtext/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3768ff4
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/META-INF/MANIFEST.MF
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Eclipse Capra Selection Support for Xtext Editors
+Bundle-SymbolicName: org.eclipse.capra.ui.xtext;singleton:=true
+Bundle-Version: 0.8.1.qualifier
+Automatic-Module-Name: org.eclipse.capra.handler.xtext
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.core.runtime,
+ org.eclipse.emf.common.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.resource,
+ org.eclipse.emf.ecore.resource.impl,
+ org.eclipse.jface.text,
+ org.eclipse.jface.viewers,
+ org.eclipse.ui,
+ org.eclipse.ui.editors.text,
+ org.eclipse.ui.views.contentoutline,
+ org.eclipse.xtext.resource,
+ org.eclipse.xtext.ui.editor,
+ org.eclipse.xtext.ui.editor.model,
+ org.eclipse.xtext.ui.editor.outline.impl,
+ org.eclipse.xtext.util.concurrent
+Require-Bundle: org.eclipse.capra.ui
+Bundle-Vendor: Eclipse Capra
+Export-Package: org.eclipse.capra.ui.xtext.selections
diff --git a/bundles/org.eclipse.capra.ui.xtext/build.properties b/bundles/org.eclipse.capra.ui.xtext/build.properties
new file mode 100644
index 0000000..4348b19
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/build.properties
@@ -0,0 +1,17 @@
+###############################################################################

+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs, IRT SystemX, and others.

+# All rights reserved. This program and the accompanying materials

+# are made available under the terms of the Eclipse Public License v2.0

+# which accompanies this distribution, and is available at

+# http://www.eclipse.org/legal/epl-v20.html

+#  

+# SPDX-License-Identifier: EPL-2.0

+#  

+# Contributors:

+#      IRT SystemX - initial API and implementation

+###############################################################################

+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml

diff --git a/bundles/org.eclipse.capra.ui.xtext/plugin.xml b/bundles/org.eclipse.capra.ui.xtext/plugin.xml
new file mode 100644
index 0000000..5e36ffe
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/plugin.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<!--

+  Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs, IRT SystemX, and others.

+  All rights reserved. This program and the accompanying materials

+  are made available under the terms of the Eclipse Public License v2.0

+  which accompanies this distribution, and is available at

+  http://www.eclipse.org/legal/epl-v20.html

+   

+  SPDX-License-Identifier: EPL-2.0

+   

+  Contributors:

+       IRT SystemX - initial API and implementation

+-->

+<plugin>

+   <extension

+         id="org.eclipse.capra.ui.xtext.selections"

+         point="org.eclipse.capra.ui.selectionSupport">

+      <selectionSupport

+            class="org.eclipse.capra.ui.xtext.selections.XtextEditorSelectionSupport">

+      </selectionSupport>

+      <selectionSupport

+            class="org.eclipse.capra.ui.xtext.selections.XtextOutlineSelectionSupport">

+      </selectionSupport>

+   </extension>

+

+</plugin>

diff --git a/bundles/org.eclipse.capra.ui.xtext/pom.xml b/bundles/org.eclipse.capra.ui.xtext/pom.xml
new file mode 100644
index 0000000..4e23a31
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<relativePath>../../pom.xml</relativePath>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.8.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.xtext</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.xtext/src/org/eclipse/capra/ui/xtext/selections/XtextEditorSelectionSupport.java b/bundles/org.eclipse.capra.ui.xtext/src/org/eclipse/capra/ui/xtext/selections/XtextEditorSelectionSupport.java
new file mode 100644
index 0000000..cdaeb1b
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/src/org/eclipse/capra/ui/xtext/selections/XtextEditorSelectionSupport.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs, IRT SystemX, and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *  
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ * Contributors:
+ *      IRT SystemX - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.capra.ui.xtext.selections;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.ui.selections.ISelectionSupport;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.xtext.resource.EObjectAtOffsetHelper;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.IXtextDocument;
+import org.eclipse.xtext.ui.editor.model.XtextDocumentUtil;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+/**
+ * Allows extracting EMF model elements from an {@link ISelection} of
+ * Xtext editors.
+ * 
+ * @author Dominique Blouin
+ *
+ */
+public class XtextEditorSelectionSupport implements ISelectionSupport {
+
+	private final EObjectAtOffsetHelper eObjectOffsetHelper;
+
+	public XtextEditorSelectionSupport() {
+		eObjectOffsetHelper = new EObjectAtOffsetHelper();
+	}
+
+	@Override
+	public boolean supportsWorkbenchPart(final IWorkbenchPart workbenchPart) {
+		return workbenchPart instanceof XtextEditor;
+	}
+
+	@Override
+	public List<Object> extractSelectedElements(final ISelection selection, final IWorkbenchPart workbenchPart) {
+		if (selection instanceof ITextSelection) {
+			final XtextResource resource = getResource(workbenchPart);
+
+			final ITextSelection textselection = (ITextSelection) selection;
+			final EObject selectedElement = eObjectOffsetHelper.resolveElementAt(resource, textselection.getOffset());
+
+			if (selectedElement == null) {
+				return Collections.emptyList();
+			}
+
+			return Collections.singletonList(selectedElement);
+		}
+
+		return null;
+	}
+
+	protected XtextResource getResource(final IWorkbenchPart workbenchPart) {
+		final IXtextDocument document = XtextDocumentUtil.get(workbenchPart);
+
+		if (document == null) {
+			return null;
+		}
+
+		return document.readOnly(new IUnitOfWork<XtextResource, XtextResource>() {
+
+			@Override
+			public XtextResource exec(XtextResource state) throws Exception {
+				return state;
+			}
+		});
+	}
+
+	@Override
+	public ResourceSet getResourceSet(final IWorkbenchPart workbenchPart) {
+		final Resource resource = getResource(workbenchPart);
+
+		return resource == null ? null : resource.getResourceSet();
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.xtext/src/org/eclipse/capra/ui/xtext/selections/XtextOutlineSelectionSupport.java b/bundles/org.eclipse.capra.ui.xtext/src/org/eclipse/capra/ui/xtext/selections/XtextOutlineSelectionSupport.java
new file mode 100644
index 0000000..379dcb6
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.xtext/src/org/eclipse/capra/ui/xtext/selections/XtextOutlineSelectionSupport.java
@@ -0,0 +1,82 @@
+/*******************************************************************************

+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs, IRT SystemX, and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ *  

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ * Contributors:

+ *      IRT SystemX - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.capra.ui.xtext.selections;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.capra.ui.selections.ISelectionSupport;

+import org.eclipse.emf.common.util.URI;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.views.contentoutline.ContentOutline;

+import org.eclipse.xtext.ui.editor.outline.impl.EObjectNode;

+

+/**

+ * Allows extracting EMF model elements from an {@link ISelection} of the

+ * Xtext outline view.

+ * 

+ * @author Dominique Blouin

+ *

+ */

+public class XtextOutlineSelectionSupport implements ISelectionSupport {

+

+	@Override

+	public boolean supportsWorkbenchPart(final IWorkbenchPart workbenchPart) {

+		if (workbenchPart instanceof ContentOutline) {

+			final ISelection selection = ((ContentOutline) workbenchPart).getSelection();

+

+			return !extractSelectedEObjectNodes(selection, workbenchPart).isEmpty();

+		}

+

+		return false;

+	}

+

+	private List<EObjectNode> extractSelectedEObjectNodes(final ISelection selection,

+			final IWorkbenchPart workbenchPart) {

+		final List<EObjectNode> selectedElements = new ArrayList<EObjectNode>();

+

+		if (selection instanceof IStructuredSelection) {

+			for (final Object selectedEleme : ((IStructuredSelection) selection).toList()) {

+				if (selectedEleme instanceof EObjectNode) {

+					selectedElements.add((EObjectNode) selectedEleme);

+				}

+			}

+		}

+

+		return selectedElements;

+	}

+

+	@Override

+	public List<Object> extractSelectedElements(final ISelection selection, final IWorkbenchPart workbenchPart) {

+		final List<Object> selectedElements = new ArrayList<Object>();

+		final List<EObjectNode> selectedEObjectNodes = extractSelectedEObjectNodes(selection, workbenchPart);

+

+		final ResourceSet resSet = getResourceSet(workbenchPart);

+

+		for (final EObjectNode selectedEleme : selectedEObjectNodes) {

+			final URI objectUri = ((EObjectNode) selectedEleme).getEObjectURI();

+			selectedElements.add(resSet.getEObject(objectUri, true));

+		}

+

+		return selectedElements;

+	}

+

+	@Override

+	public ResourceSet getResourceSet(IWorkbenchPart workbenchPart) {

+		return new ResourceSetImpl();

+	}

+}

diff --git a/bundles/org.eclipse.capra.ui.zest/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.zest/META-INF/MANIFEST.MF
index 2eec6a3..fc6a4b2 100644
--- a/bundles/org.eclipse.capra.ui.zest/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui.zest/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui.zest;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.capra.core,
diff --git a/bundles/org.eclipse.capra.ui.zest/pom.xml b/bundles/org.eclipse.capra.ui.zest/pom.xml
index b503dc4..506a011 100644
--- a/bundles/org.eclipse.capra.ui.zest/pom.xml
+++ b/bundles/org.eclipse.capra.ui.zest/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui.zest</artifactId>
diff --git a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ZestView.java b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ZestView.java
index d74a8ac..77a6154 100644
--- a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ZestView.java
+++ b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ZestView.java
@@ -18,7 +18,7 @@
 import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
+import org.eclipse.capra.ui.helpers.SelectionSupportHelper;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.gef4.common.adapt.inject.AdapterInjectionSupport;
@@ -79,7 +79,7 @@
 				TraceMetaModelAdapter metaModelAdapter;
 				ResourceSet resourceSet;
 
-				List<Object> selectedModels = TraceCreationHelper.extractSelectedElements(selection);
+				List<Object> selectedModels = SelectionSupportHelper.extractSelectedElements(selection, part);
 
 				if (selectedModels.size() >= 1 && selectedModels.get(0) instanceof EObject) {
 					EObject selectedEObject = (EObject) selectedModels.get(0);
diff --git a/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF
index 368dc94..566db7f 100644
--- a/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.capra.ui;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -24,10 +24,12 @@
  org.eclipse.core.commands,
  org.eclipse.capra.core
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.capra.ui.handlers,
+Export-Package: org.eclipse.capra.ui.adapters,
+ org.eclipse.capra.ui.handlers,
  org.eclipse.capra.ui.handlers.selection,
  org.eclipse.capra.ui.helpers,
  org.eclipse.capra.ui.operations,
  org.eclipse.capra.ui.perspective,
  org.eclipse.capra.ui.preferences,
+ org.eclipse.capra.ui.selections,
  org.eclipse.capra.ui.views
diff --git a/bundles/org.eclipse.capra.ui/plugin.xml b/bundles/org.eclipse.capra.ui/plugin.xml
index cb0e45f..8f97461 100644
--- a/bundles/org.eclipse.capra.ui/plugin.xml
+++ b/bundles/org.eclipse.capra.ui/plugin.xml
@@ -155,4 +155,5 @@
 			schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" sequence="M2+DEL">
 		</key>
 	</extension>
+	<extension-point id="org.eclipse.capra.ui.selectionSupport" name="Selection Support" schema="schema/org.eclipse.capra.ui.selectionSupport.exsd"/>   
 </plugin>
diff --git a/bundles/org.eclipse.capra.ui/pom.xml b/bundles/org.eclipse.capra.ui/pom.xml
index b11e553..faf8320 100644
--- a/bundles/org.eclipse.capra.ui/pom.xml
+++ b/bundles/org.eclipse.capra.ui/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.ui</artifactId>
diff --git a/bundles/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.selectionSupport.exsd b/bundles/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.selectionSupport.exsd
new file mode 100644
index 0000000..e79973e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.selectionSupport.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.ui" id="org.eclipse.capra.ui.selectionSupport" name="Eclipse Capra Selection Support"/>
+      </appinfo>
+      <documentation>
+         Defines support for extracting elements from selections in WorkbenchPart instances.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="selectionSupport"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="selectionSupport">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.ui.selections.ISelectionSupport"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         0.7.2
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/ArtifactAdapter.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/ArtifactAdapter.java
new file mode 100644
index 0000000..7f8c329
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/ArtifactAdapter.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.ui.adapters;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * An {@link IPropertySource} for artifacts. It provides access to all
+ * properties of the {@link EObject} representing the artifact. In practice,
+ * that means that it either shows the properties of the {@link ArtifactWrapper}
+ * or the {@code EObject} that is linked to.
+ * 
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class ArtifactAdapter implements IPropertySource {
+
+	private static enum DescriptorIDs {
+		LABEL, LOCATION
+	}
+
+	private static final String CATEGORY_NAME = "General";
+
+	private final EObject artifact;
+
+	private final ArtifactHelper artifactHelper;
+
+	/**
+	 * Creates a new {@link ArtifactAdapter} that represents the provided artifact.
+	 * 
+	 * @param theItem the artifact this adapter represents.
+	 */
+	public ArtifactAdapter(EObject theItem) {
+		this.artifact = theItem;
+
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		artifactHelper = new ArtifactHelper(artifactModel);
+	}
+
+	@Override
+	public Object getEditableValue() {
+		return this;
+	}
+
+	@Override
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		List<IPropertyDescriptor> propertyDescriptors = new ArrayList<>();
+		if (!isArtifactWrapper(artifact)) {
+			PropertyDescriptor labelDescriptor = new PropertyDescriptor(DescriptorIDs.LABEL, "Label");
+			labelDescriptor.setCategory(CATEGORY_NAME);
+			propertyDescriptors.add(labelDescriptor);
+			PropertyDescriptor locationDescriptor = new PropertyDescriptor(DescriptorIDs.LOCATION, "Location");
+			locationDescriptor.setCategory(CATEGORY_NAME);
+			propertyDescriptors.add(locationDescriptor);
+		}
+		propertyDescriptors.addAll(artifact.eClass().getEAllAttributes().stream()
+				.map(attribute -> new TextPropertyDescriptor(attribute.getName(), attribute.getName()))
+				.collect(Collectors.toList()));
+
+		IPropertyDescriptor[] dummyList = new IPropertyDescriptor[propertyDescriptors.size()];
+		return propertyDescriptors.toArray(dummyList);
+	}
+
+	@Override
+	public Object getPropertyValue(Object id) {
+		if (id.equals(DescriptorIDs.LABEL)) {
+			return artifactHelper.getArtifactLabel(artifact);
+		} else if (id.equals(DescriptorIDs.LOCATION)) {
+			return artifactHelper.getArtifactLocation(artifact);
+		} else {
+			EStructuralFeature a = artifact.eClass().getEStructuralFeature((String) id);
+			return artifact.eGet(a);
+		}
+	}
+
+	@Override
+	public boolean isPropertySet(Object id) {
+		return false;
+	}
+
+	@Override
+	public void resetPropertyValue(Object id) {
+		// Deliberately do nothing
+	}
+
+	@Override
+	public void setPropertyValue(Object id, Object value) {
+		EStructuralFeature feature = artifact.eClass().getEStructuralFeature((String) id);
+		artifact.eSet(feature, value);
+	}
+
+	private boolean isArtifactWrapper(EObject artifact) {
+		return !artifact.equals(artifactHelper.unwrapWrapper(artifact));
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/ConnectionAdapter.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/ConnectionAdapter.java
new file mode 100644
index 0000000..3c5fe26
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/ConnectionAdapter.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.ui.adapters;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
+/**
+ * An {@link IPropertySource} for trace links. It provides access to all
+ * properties of the underlying {@link Connection}, i.e., all properties that
+ * are defined in the traceability information model.
+ * 
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class ConnectionAdapter implements IPropertySource {
+
+	private static enum DescriptorIDs {
+		ORIGIN, TARGETS, TYPE
+	}
+
+	private static final String CATEGORY_NAME = "General";
+
+	private final Connection connection;
+
+	private final ArtifactHelper artifactHelper;
+
+	/**
+	 * Create a new instance based on the provided {@link Connection}.
+	 * 
+	 * @param theItem the connection this adapter represents
+	 */
+	public ConnectionAdapter(Connection theItem) {
+		this.connection = theItem;
+
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		artifactHelper = new ArtifactHelper(artifactModel);
+	}
+
+	@Override
+	public Object getEditableValue() {
+		return this;
+	}
+
+	@Override
+	public IPropertyDescriptor[] getPropertyDescriptors() {
+		List<IPropertyDescriptor> propertyDescriptors = new ArrayList<>();
+		// Add generic properties of a connection to their own category.
+		PropertyDescriptor originDescriptor = new PropertyDescriptor(DescriptorIDs.ORIGIN, "Origin");
+		originDescriptor.setCategory(CATEGORY_NAME);
+		propertyDescriptors.add(originDescriptor);
+		PropertyDescriptor targetDescriptor = new PropertyDescriptor(DescriptorIDs.TARGETS, "Targets");
+		targetDescriptor.setCategory(CATEGORY_NAME);
+		propertyDescriptors.add(targetDescriptor);
+		PropertyDescriptor typeDescriptor = new PropertyDescriptor(DescriptorIDs.TYPE, "Type");
+		typeDescriptor.setCategory(CATEGORY_NAME);
+		propertyDescriptors.add(typeDescriptor);
+		// All other properties of the underlying class are added without category.
+		propertyDescriptors.addAll(connection.getTlink().eClass().getEAllAttributes().stream()
+				.map(attribute -> new TextPropertyDescriptor(attribute.getName(), attribute.getName()))
+				.collect(Collectors.toList()));
+
+		IPropertyDescriptor[] dummyList = new IPropertyDescriptor[propertyDescriptors.size()];
+		return propertyDescriptors.toArray(dummyList);
+
+	}
+
+	@Override
+	public Object getPropertyValue(Object id) {
+		if (id.equals(DescriptorIDs.ORIGIN)) {
+			return artifactHelper.getArtifactLabel(connection.getOrigin());
+		} else if (id.equals(DescriptorIDs.TARGETS)) {
+			return connection.getTargets().stream().map(t -> artifactHelper.getArtifactLabel(t))
+					.collect(Collectors.toList());
+		} else if (id.equals(DescriptorIDs.TYPE)) {
+			return connection.getTlink().eClass().getName();
+		} else {
+			EStructuralFeature a = connection.getTlink().eClass().getEStructuralFeature((String) id);
+			return connection.getTlink().eGet(a);
+		}
+
+	}
+
+	@Override
+	public boolean isPropertySet(Object id) {
+		return false;
+	}
+
+	@Override
+	public void resetPropertyValue(Object id) {
+		// Deliberately do nothing
+	}
+
+	@Override
+	public void setPropertyValue(Object id, Object value) {
+		EStructuralFeature feature = connection.getTlink().eClass().getEStructuralFeature((String) id);
+		connection.getTlink().eSet(feature, value);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/TraceItemAdapterFactory.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/TraceItemAdapterFactory.java
new file mode 100644
index 0000000..84d950e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/adapters/TraceItemAdapterFactory.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *   
+ * SPDX-License-Identifier: EPL-2.0
+ *   
+ * Contributors:
+ *     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *     Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.ui.adapters;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ui.views.properties.IPropertySource;
+
+/**
+ * Provides adapters for the properties view of trace links and artifacts. This
+ * can be used in visualisations to show the properties of a selected link or a
+ * selected artifact.
+ * <p>
+ * To enable the property view, two conditions have to be met:
+ * <ol>
+ * <li>The view of the visualisation needs to implement a selection provider
+ * that returns a {@link Connection} for a selected trace link and an
+ * {@code EObject} for a selected artifact.
+ * <li>The {@code plugin.xml} of a visualisation needs to contain an extension
+ * of {@code org.eclipse.core.runtime.adapters} that maps the
+ * {@link ConnectionAdapter} and the {@link ArtifactAdapter} to this class.
+ * </ol>
+ * 
+ * @author Jan-Philipp Steghöfer
+ */
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public class TraceItemAdapterFactory implements IAdapterFactory {
+
+	@Override
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		if (adapterType == IPropertySource.class && adaptableObject instanceof Connection) {
+			return new ConnectionAdapter((Connection) adaptableObject);
+		} else if (adapterType == IPropertySource.class && adaptableObject instanceof EObject) {
+			return new ArtifactAdapter((EObject) adaptableObject);
+		}
+		return null;
+	}
+
+	@Override
+	public Class[] getAdapterList() {
+		return new Class[] { ConnectionAdapter.class, ArtifactAdapter.class };
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java
index 1a04062..cc947e0 100644
--- a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java
@@ -15,7 +15,7 @@
 
 import java.util.List;
 
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
+import org.eclipse.capra.ui.helpers.SelectionSupportHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -30,7 +30,7 @@
 
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
+		List<Object> selection = SelectionSupportHelper.extractSelectedElements(event);
 		SelectionView.getOpenedView().dropToSelection(selection);
 		return null;
 	}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
index 5373929..e2e008b 100644
--- a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
@@ -15,7 +15,7 @@
 
 import java.util.List;
 
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
+import org.eclipse.capra.ui.helpers.SelectionSupportHelper;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -30,7 +30,7 @@
 
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
+		List<Object> selection = SelectionSupportHelper.extractSelectedElements(event);
 		if (selection != null) {
 			SelectionView.getOpenedView().removeFromSelection(selection);
 		}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/SelectionSupportHelper.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/SelectionSupportHelper.java
new file mode 100644
index 0000000..dbe776f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/SelectionSupportHelper.java
@@ -0,0 +1,170 @@
+/*******************************************************************************

+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs, IRT SystemX, and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ *  

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ * Contributors:

+ *      IRT SystemX - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.capra.ui.helpers;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.eclipse.capra.core.helpers.ExtensionPointHelper;

+import org.eclipse.capra.ui.selections.ISelectionSupport;

+import org.eclipse.core.commands.ExecutionEvent;

+import org.eclipse.core.runtime.IAdaptable;

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;

+import org.eclipse.emf.edit.domain.IEditingDomainProvider;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.jface.viewers.IStructuredSelection;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.handlers.HandlerUtil;

+import org.eclipse.ui.part.WorkbenchPart;

+import org.eclipse.ui.views.properties.PropertySheet;

+

+/**

+ * A helper for extracting semantic elements from a selection of a workbench

+ * part. Handles the workbench part handler extensions.

+ * 

+ * @author Dominique Blouin

+ *

+ */

+public class SelectionSupportHelper {

+

+	private static final List<ISelectionSupport> SELECTION_SUPPORTS = new ArrayList<ISelectionSupport>();

+

+	static {

+		for (Object extension : ExtensionPointHelper.getExtensions("org.eclipse.capra.ui.selectionSupport",

+				"class")) {

+			SELECTION_SUPPORTS.add((ISelectionSupport) extension);

+		}

+	}

+

+	private SelectionSupportHelper() {

+	}

+

+	/**

+	 * Extract selected elements from an {@link ExecutionEvent}.

+	 * 

+	 * @param event

+	 *            This is the click event to create a trace

+	 * @return A list of all the selected elements

+	 */

+	public static List<Object> extractSelectedElements(final ExecutionEvent event) {

+		final IWorkbenchPart workbenchPart = HandlerUtil.getActivePart(event);

+		final ISelection currentSelection;

+

+		// For some reason HandlerUtil.getCurrentSelection(event) returns the

+		// previous selection in some cases so we look for

+		// the selection from the selection provider first

+		if (workbenchPart.getSite().getSelectionProvider() != null) {

+			currentSelection = workbenchPart.getSite().getSelectionProvider().getSelection();

+		} else {

+			currentSelection = HandlerUtil.getCurrentSelection(event);

+		}

+

+		return extractSelectedElements(currentSelection, workbenchPart);

+	}

+

+	/**

+	 * Extract selected elements from an {@link ISelection} by delegating the

+	 * retrieval and unwrapping of the selection to the registered

+	 * {@link ISelectionSupport} instances. If this fails, the selected

+	 * elements of type {@link IAdaptable} are retrieved using

+	 * {@link IAdaptable#getAdapter(Class)}. If this fails, too, the list is

+	 * either empty or only contains those elements that are instances of type

+	 * {@code IAdaptable}.

+	 * 

+	 * @param selection

+	 *            the selection from the workbench part

+	 * @param workbenchPart

+	 *            the workbench part from which the selection should be

+	 *            extracted

+	 * @return a list of all selected elements retrieved using the first

+	 *         {@code IWorkbenchSelectionSupport} instance registered for the

+	 *         {@code WorkbenchPart} or all selected elements of type

+	 *         {@code IAdaptable}

+	 */

+	public static List<Object> extractSelectedElements(final ISelection selection, final IWorkbenchPart workbenchPart) {

+		List<Object> selectedElem = new ArrayList<>();

+

+		for (final ISelectionSupport handler : SELECTION_SUPPORTS) {

+			if (handler.supportsWorkbenchPart(workbenchPart)) {

+				List<Object> extractedElements = handler.extractSelectedElements(selection, workbenchPart);

+				if (extractedElements != null) {

+					selectedElem.addAll(extractedElements);

+					break;

+				}

+			}

+		}

+

+		if (selectedElem.isEmpty()) {

+			selectedElem = new ArrayList<>();

+

+			if (selection instanceof IStructuredSelection) {

+				for (final Object selElement : ((IStructuredSelection) selection).toList()) {

+					final Object element = AdapterFactoryEditingDomain.unwrap(selElement);

+					Object selectedElement = element;

+

+					if (element instanceof IAdaptable) {

+						final Object adaptedElement = ((IAdaptable) element).getAdapter(Object.class);

+

+						if (adaptedElement != null) {

+							selectedElement = adaptedElement;

+						}

+					}

+

+					selectedElem.add(selectedElement);

+				}

+			}

+		}

+

+		return selectedElem;

+	}

+

+	/**

+	 * Attempts to retrieve the {@link ResourceSet} instance that is used by the

+	 * {@link WorkbenchPart}. The {@code ResourceSet} is only available if the

+	 * {@code WorkbenchPart} handles EMF models. If this is not the case, this

+	 * method returns {@code null}.

+	 * 

+	 * @param part

+	 *            the {@code WorkbenchPart} whose {@code ResourceSet} should be

+	 *            retrieved

+	 * @return the {@code ResourceSet} used by {@code part} or {@code null} if

+	 *         no {@code ResourceSet} can be found

+	 */

+	public static ResourceSet getResourceSet(final IWorkbenchPart part) {

+		ResourceSet resourceSet = null;

+		if (!(part instanceof PropertySheet)) {

+			// Iterate over the WorkbenchPartHandlers and find one that can take

+			// care of the part

+			for (final ISelectionSupport handler : SELECTION_SUPPORTS) {

+				if (handler.supportsWorkbenchPart(part)) {

+					final ResourceSet resSet = handler.getResourceSet(part);

+					if (resSet != null) {

+						resourceSet = resSet;

+					}

+				}

+

+			}

+			// If that fails, see if we can get the resource set from the

+			// EditingDomain

+			if (resourceSet == null) {

+				final IEditingDomainProvider domainProvider = part.getAdapter(IEditingDomainProvider.class);

+

+				if (domainProvider != null) {

+					return domainProvider.getEditingDomain().getResourceSet();

+				}

+			}

+		}

+		return resourceSet;

+	}

+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java
deleted file mode 100644
index b601060..0000000
--- a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v20.html
- *  
- * SPDX-License-Identifier: EPL-2.0
- *  
- * Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *      Chalmers | University of Gothenburg - additional features, updated API
- *******************************************************************************/
-package org.eclipse.capra.ui.helpers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * Contains supporting functionality required when creating trace links.
- */
-public class TraceCreationHelper {
-
-	/**
-	 * Extract selected elements from a selection event.
-	 * 
-	 * @param event
-	 *            This is the click event to create a trace
-	 * @return A list of all the selected elements
-	 */
-	public static List<Object> extractSelectedElements(ExecutionEvent event) {
-		ISelection currentSelection = HandlerUtil.getCurrentSelection(event);
-		return extractSelectedElements(currentSelection);
-	}
-
-	/**
-	 * Extract selected elements from an {@link ISelection}.
-	 * 
-	 * @param selection
-	 * @return A list of all the selected elements
-	 */
-	@SuppressWarnings("unchecked")
-	public static List<Object> extractSelectedElements(ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			IStructuredSelection sselection = (IStructuredSelection) selection;
-			return sselection.toList();
-		} else {
-			return new ArrayList<Object>();
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/selections/ISelectionSupport.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/selections/ISelectionSupport.java
new file mode 100644
index 0000000..d981acb
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/selections/ISelectionSupport.java
@@ -0,0 +1,69 @@
+/*******************************************************************************

+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs, IRT SystemX, and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v2.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v20.html

+ *  

+ * SPDX-License-Identifier: EPL-2.0

+ *  

+ * Contributors:

+ *      IRT SystemX - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.capra.ui.selections;

+

+import java.util.List;

+

+import org.eclipse.emf.ecore.resource.ResourceSet;

+import org.eclipse.jface.viewers.ISelection;

+import org.eclipse.ui.IWorkbenchPart;

+import org.eclipse.ui.part.WorkbenchPart;

+

+/**

+ * Interface for supporting selections in {@link WorkbenchPart} instances. This

+ * allows customization of how semantic objects are extracted from an

+ * {@link ISelection} and is useful when, e.g., the selection contains wrapper

+ * objects that need to be resolved.

+ * 

+ * @author Dominique Blouin

+ *

+ */

+public interface ISelectionSupport {

+

+	/**

+	 * Checks if the given {@link WorkbenchPart} instance is supported.

+	 * 

+	 * @param workbenchPart

+	 *            the workbench part

+	 * @return {@code true} if this handler supports the given workbench part,

+	 *         {@code false} otherwise.

+	 */

+	boolean supportsWorkbenchPart(IWorkbenchPart workbenchPart);

+

+	/**

+	 * Extracts objects from an {@link ISelection}, resolving or unwrapping them

+	 * when necessary to return types that can be handled by one of the Capra

+	 * handlers.

+	 * 

+	 * @param selection

+	 *            the selection from the workbench part

+	 * @param workbenchPart

+	 *            the workbench part

+	 * @return a list of the selected elements

+	 */

+	List<Object> extractSelectedElements(ISelection selection, IWorkbenchPart workbenchPart);

+

+	/**

+	 * Attempts to retrieve the {@link ResourceSet} instance that is used by the

+	 * {@link WorkbenchPart}. The {@code ResourceSet} is only available if the

+	 * {@code WorkbenchPart} handles EMF models. If this is not the case, this

+	 * method returns {@code null}.

+	 * 

+	 * @param workbenchPart

+	 *            the {@code WorkbenchPart} whose {@code ResourceSet} should be

+	 *            retrieved

+	 * @return the {@code ResourceSet} used by {@code part} or {@code null} if

+	 *         no {@code ResourceSet} can be found

+	 */

+	ResourceSet getResourceSet(IWorkbenchPart workbenchPart);

+}

diff --git a/features/org.eclipse.capra.core.feature/feature.xml b/features/org.eclipse.capra.core.feature/feature.xml
index 6b70ca2..05c0858 100644
--- a/features/org.eclipse.capra.core.feature/feature.xml
+++ b/features/org.eclipse.capra.core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.core.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.core.feature/pom.xml b/features/org.eclipse.capra.core.feature/pom.xml
index 49abbde..9137541 100644
--- a/features/org.eclipse.capra.core.feature/pom.xml
+++ b/features/org.eclipse.capra.core.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.core.feature</artifactId>
diff --git a/features/org.eclipse.capra.feature/feature.xml b/features/org.eclipse.capra.feature/feature.xml
index e4fb043..b72e71a 100644
--- a/features/org.eclipse.capra.feature/feature.xml
+++ b/features/org.eclipse.capra.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName"
       plugin="org.eclipse.capra.branding">
 
diff --git a/features/org.eclipse.capra.feature/pom.xml b/features/org.eclipse.capra.feature/pom.xml
index d323f79..fa4dc73 100644
--- a/features/org.eclipse.capra.feature/pom.xml
+++ b/features/org.eclipse.capra.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.feature</artifactId>
diff --git a/features/org.eclipse.capra.generic.feature/feature.xml b/features/org.eclipse.capra.generic.feature/feature.xml
index f07ff9c..cec15a6 100644
--- a/features/org.eclipse.capra.generic.feature/feature.xml
+++ b/features/org.eclipse.capra.generic.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.generic.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.generic.feature/pom.xml b/features/org.eclipse.capra.generic.feature/pom.xml
index 3a52fa4..db338c6 100644
--- a/features/org.eclipse.capra.generic.feature/pom.xml
+++ b/features/org.eclipse.capra.generic.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.generic.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/.project b/features/org.eclipse.capra.handler.app4mc.feature/.project
new file mode 100644
index 0000000..6b5f510
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.app4mc.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/about.html b/features/org.eclipse.capra.handler.app4mc.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/about.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>About</title>
+</head>
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>About This Content</h2>
+
+	<p>November 30, 2017</p>
+	<h3>License</h3>
+
+	<p>
+		The Eclipse Foundation makes available all content in this plug-in
+		("Content"). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 ("EPL"). A copy of the EPL is
+		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		("Redistributor") and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/build.properties b/features/org.eclipse.capra.handler.app4mc.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/build.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+bin.includes = feature.xml,\
+               license.html,\
+               feature.properties,\
+               epl-v20.html,\
+               about.html
+
+src.includes = about.html,\
+               epl-v20.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/epl-v20.html b/features/org.eclipse.capra.handler.app4mc.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/epl-v20.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" class="gr__eclipse_org" lang="en"><head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body data-gr-c-s-loaded="true">
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>“Contribution” means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        “originates” from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor's behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>“Contributor” means any person or entity that Distributes the Program.</p>
+    <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>“Program” means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>“Recipient” means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>“Derivative Works” shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>“Modified Works” shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>“Distribute” means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>“Source Code” means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>“Secondary License” means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient's
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient's receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients' rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (‘notices’) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (“Commercial Contributor”)
+      hereby agrees to defend and indemnify every other Contributor
+      (“Indemnified Contributor”) against any losses, damages and costs
+      (collectively “Losses”) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor's responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient's rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient's obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+    <p>“This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.”
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/feature.properties b/features/org.eclipse.capra.handler.app4mc.feature/feature.properties
new file mode 100644
index 0000000..902bc76
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/feature.properties
@@ -0,0 +1,92 @@
+###############################################################################
+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+
+# "featureName" property - name of the feature
+featureName=Eclipse Capra Traceability for APP4MC Amalthea models
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to APP4MC Amalthea models
+descriptionURL=https://eclipse.org/capra
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateLabel=
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+\n\
+November 22, 2017\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-2.0. For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").\n\
+\n\
+    Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").\n\
+    Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java\u2122 ARchive) in a directory named "plugins".\n\
+    A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+    Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:\n\
+\n\
+    The top-level (root) directory\n\
+    Plug-in and Fragment directories\n\
+    Inside Plug-ins and Fragments packaged as JARs\n\
+    Sub-directories of the directory named "src" of certain Plug-ins\n\
+    Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html)\n\
+    Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+    Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.\n\
+Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+    A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.\n\
+    During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+    Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=Copyright (c) 2016-2019 Chalmers | University of Gothenburg, rt-labs and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-v20.html\n\
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/feature.xml b/features/org.eclipse.capra.handler.app4mc.feature/feature.xml
new file mode 100644
index 0000000..c712eef
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.app4mc.feature"
+      label="%featureName"
+      version="0.8.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%url">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.app4mc"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/license.html b/features/org.eclipse.capra.handler.app4mc.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/license.html
@@ -0,0 +1,181 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2017</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 ("EPL"). A copy of the
+		EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository ("Repository") in software
+		modules ("Modules") and made available as downloadable
+		archives ("Downloads").</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins ("Plug-ins"), plug-in
+			fragments ("Fragments"), and features
+			("Features").</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java™ ARchive) in a directory named
+			"plugins".</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named "features". Within a
+			Feature, files named "feature.xml" may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features ("Included
+			Features"). Within a Feature, files named
+			"feature.xml" may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named "about.html"
+		("Abouts"). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		"license.html" ("Feature Licenses"). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named "src" of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license ("Feature Update License") during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		"license" property of files named
+		"feature.properties" found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager ("Provisioning Technology") for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively "Installable Software"). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		("Specification").
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur ("Provisioning
+			Process") in which a user may execute the Provisioning
+			Technology on a machine ("Target Machine") with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software ("Installable Software Agreement") and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.handler.app4mc.feature/pom.xml b/features/org.eclipse.capra.handler.app4mc.feature/pom.xml
new file mode 100644
index 0000000..d2df9a1
--- /dev/null
+++ b/features/org.eclipse.capra.handler.app4mc.feature/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+        <modelVersion>4.0.0</modelVersion>
+
+        <parent>
+                <relativePath>../../pom.xml</relativePath>
+                <groupId>org.eclipse.capra</groupId>
+                <artifactId>parent</artifactId>
+                <version>0.8.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.app4mc.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.cdt.feature/feature.xml b/features/org.eclipse.capra.handler.cdt.feature/feature.xml
index 13bd947..c485347 100644
--- a/features/org.eclipse.capra.handler.cdt.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.cdt.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.cdt.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.cdt.feature/pom.xml b/features/org.eclipse.capra.handler.cdt.feature/pom.xml
index c965d71..7e884c1 100644
--- a/features/org.eclipse.capra.handler.cdt.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.cdt.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.cdt.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.featureide.feature/feature.xml b/features/org.eclipse.capra.handler.featureide.feature/feature.xml
index 74754ff..5577d43 100644
--- a/features/org.eclipse.capra.handler.featureide.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.featureide.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.featureide.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.featureide.feature/pom.xml b/features/org.eclipse.capra.handler.featureide.feature/pom.xml
index 173e721..ef2246e 100644
--- a/features/org.eclipse.capra.handler.featureide.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.featureide.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.featureide.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.hudson.feature/feature.xml b/features/org.eclipse.capra.handler.hudson.feature/feature.xml
index c9704cb..27a3c91 100644
--- a/features/org.eclipse.capra.handler.hudson.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.hudson.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.hudson.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.hudson.feature/pom.xml b/features/org.eclipse.capra.handler.hudson.feature/pom.xml
index aa2a099..bd138a8 100644
--- a/features/org.eclipse.capra.handler.hudson.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.hudson.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.hudson.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.jdt.feature/feature.xml b/features/org.eclipse.capra.handler.jdt.feature/feature.xml
index 41f0bc4..f2c9f82 100644
--- a/features/org.eclipse.capra.handler.jdt.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.jdt.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.jdt.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.jdt.feature/pom.xml b/features/org.eclipse.capra.handler.jdt.feature/pom.xml
index bc2aaff..d9c0217 100644
--- a/features/org.eclipse.capra.handler.jdt.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.jdt.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.jdt.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.office.feature/feature.xml b/features/org.eclipse.capra.handler.office.feature/feature.xml
index a750651..145541e 100644
--- a/features/org.eclipse.capra.handler.office.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.office.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.office.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.office.feature/pom.xml b/features/org.eclipse.capra.handler.office.feature/pom.xml
index 6a1fbd9..4fc5d7f 100644
--- a/features/org.eclipse.capra.handler.office.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.office.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.office.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.papyrus.feature/feature.xml b/features/org.eclipse.capra.handler.papyrus.feature/feature.xml
index 8f59dcc..aa4c7fd 100644
--- a/features/org.eclipse.capra.handler.papyrus.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.papyrus.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.papyrus.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.papyrus.feature/pom.xml b/features/org.eclipse.capra.handler.papyrus.feature/pom.xml
index 635967e..73afdae 100644
--- a/features/org.eclipse.capra.handler.papyrus.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.papyrus.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.papyrus.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.php.feature/feature.xml b/features/org.eclipse.capra.handler.php.feature/feature.xml
index a408024..b23984f 100644
--- a/features/org.eclipse.capra.handler.php.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.php.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.php.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.php.feature/pom.xml b/features/org.eclipse.capra.handler.php.feature/pom.xml
index 925ca2a..72cf4c0 100644
--- a/features/org.eclipse.capra.handler.php.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.php.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.php.feature</artifactId>
diff --git a/features/org.eclipse.capra.handler.reqIf.feature/feature.xml b/features/org.eclipse.capra.handler.reqIf.feature/feature.xml
index 1434d9e..a596afc 100644
--- a/features/org.eclipse.capra.handler.reqIf.feature/feature.xml
+++ b/features/org.eclipse.capra.handler.reqIf.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.handler.reqif.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.handler.reqIf.feature/pom.xml b/features/org.eclipse.capra.handler.reqIf.feature/pom.xml
index 1b171e5..ae7cb61 100644
--- a/features/org.eclipse.capra.handler.reqIf.feature/pom.xml
+++ b/features/org.eclipse.capra.handler.reqIf.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.handler.reqif.feature</artifactId>
diff --git a/features/org.eclipse.capra.ui.feature/feature.xml b/features/org.eclipse.capra.ui.feature/feature.xml
index 5e48114..dae84fd 100644
--- a/features/org.eclipse.capra.ui.feature/feature.xml
+++ b/features/org.eclipse.capra.ui.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.ui.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.ui.feature/pom.xml b/features/org.eclipse.capra.ui.feature/pom.xml
index d4b1d57..beb98ef 100644
--- a/features/org.eclipse.capra.ui.feature/pom.xml
+++ b/features/org.eclipse.capra.ui.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.ui.feature</artifactId>
diff --git a/features/org.eclipse.capra.ui.matrix.feature/.project b/features/org.eclipse.capra.ui.matrix.feature/.project
new file mode 100644
index 0000000..7765e72
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.matrix.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.capra.ui.matrix.feature/about.html b/features/org.eclipse.capra.ui.matrix.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/about.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>About</title>
+</head>
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>About This Content</h2>
+
+	<p>November 30, 2017</p>
+	<h3>License</h3>
+
+	<p>
+		The Eclipse Foundation makes available all content in this plug-in
+		("Content"). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 ("EPL"). A copy of the EPL is
+		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		("Redistributor") and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.matrix.feature/build.properties b/features/org.eclipse.capra.ui.matrix.feature/build.properties
new file mode 100644
index 0000000..9a0fac4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/build.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+bin.includes = feature.xml,\
+               license.html,\
+               feature.properties,\
+               epl-v20.html,\
+               about.html
+
+src.includes = about.html,\
+               epl-v20.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.capra.ui.matrix.feature/epl-v20.html b/features/org.eclipse.capra.ui.matrix.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/epl-v20.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" class="gr__eclipse_org" lang="en"><head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body data-gr-c-s-loaded="true">
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>“Contribution” means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        “originates” from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor's behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>“Contributor” means any person or entity that Distributes the Program.</p>
+    <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>“Program” means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>“Recipient” means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>“Derivative Works” shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>“Modified Works” shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>“Distribute” means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>“Source Code” means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>“Secondary License” means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient's
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient's receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients' rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (‘notices’) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (“Commercial Contributor”)
+      hereby agrees to defend and indemnify every other Contributor
+      (“Indemnified Contributor”) against any losses, damages and costs
+      (collectively “Losses”) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor's responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient's rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient's obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+    <p>“This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.”
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.matrix.feature/feature.properties b/features/org.eclipse.capra.ui.matrix.feature/feature.properties
new file mode 100644
index 0000000..576bb45
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/feature.properties
@@ -0,0 +1,91 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+# "featureName" property - name of the feature
+featureName=Eclipse Capra Interactive Traceability Matrix
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra
+ 
+# "description" property - description of the feature
+description=Provides an interactive traceability matrix that shows the relationships between the selected artifacts or between all artifacts in the trace model.
+descriptionURL=https://eclipse.org/capra
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateLabel=
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+\n\
+November 22, 2017\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-2.0. For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").\n\
+\n\
+    Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").\n\
+    Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java\u2122 ARchive) in a directory named "plugins".\n\
+    A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+    Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:\n\
+\n\
+    The top-level (root) directory\n\
+    Plug-in and Fragment directories\n\
+    Inside Plug-ins and Fragments packaged as JARs\n\
+    Sub-directories of the directory named "src" of certain Plug-ins\n\
+    Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html)\n\
+    Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+    Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.\n\
+Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+    A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.\n\
+    During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+    Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=Copyright (c) 2016-2019 Chalmers | University of Gothenburg, rt-labs and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-v20.html\n\
diff --git a/features/org.eclipse.capra.ui.matrix.feature/feature.xml b/features/org.eclipse.capra.ui.matrix.feature/feature.xml
new file mode 100644
index 0000000..01cb613
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.ui.matrix.feature"
+      label="%featureName"
+      version="0.8.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.ui.matrix"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.ui.matrix.feature/license.html b/features/org.eclipse.capra.ui.matrix.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/license.html
@@ -0,0 +1,181 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2017</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 ("EPL"). A copy of the
+		EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository ("Repository") in software
+		modules ("Modules") and made available as downloadable
+		archives ("Downloads").</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins ("Plug-ins"), plug-in
+			fragments ("Fragments"), and features
+			("Features").</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java™ ARchive) in a directory named
+			"plugins".</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named "features". Within a
+			Feature, files named "feature.xml" may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features ("Included
+			Features"). Within a Feature, files named
+			"feature.xml" may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named "about.html"
+		("Abouts"). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		"license.html" ("Feature Licenses"). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named "src" of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license ("Feature Update License") during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		"license" property of files named
+		"feature.properties" found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager ("Provisioning Technology") for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively "Installable Software"). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		("Specification").
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur ("Provisioning
+			Process") in which a user may execute the Provisioning
+			Technology on a machine ("Target Machine") with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software ("Installable Software Agreement") and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.matrix.feature/pom.xml b/features/org.eclipse.capra.ui.matrix.feature/pom.xml
new file mode 100644
index 0000000..9c4ea54
--- /dev/null
+++ b/features/org.eclipse.capra.ui.matrix.feature/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+        <modelVersion>4.0.0</modelVersion>
+
+        <parent>
+                <relativePath>../../pom.xml</relativePath>
+                <groupId>org.eclipse.capra</groupId>
+                <artifactId>parent</artifactId>
+                <version>0.8.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.ui.matrix.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.ui.plantuml.feature/feature.xml b/features/org.eclipse.capra.ui.plantuml.feature/feature.xml
index 8b10137..f3b9876 100644
--- a/features/org.eclipse.capra.ui.plantuml.feature/feature.xml
+++ b/features/org.eclipse.capra.ui.plantuml.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.ui.plantuml.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.ui.plantuml.feature/pom.xml b/features/org.eclipse.capra.ui.plantuml.feature/pom.xml
index 5f84151..ecacb31 100644
--- a/features/org.eclipse.capra.ui.plantuml.feature/pom.xml
+++ b/features/org.eclipse.capra.ui.plantuml.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.ui.plantuml.feature</artifactId>
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/.project b/features/org.eclipse.capra.ui.sunburst.feature/.project
new file mode 100644
index 0000000..165b725
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.sunburst.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/about.html b/features/org.eclipse.capra.ui.sunburst.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/about.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>About</title>
+</head>
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>About This Content</h2>
+
+	<p>November 30, 2017</p>
+	<h3>License</h3>
+
+	<p>
+		The Eclipse Foundation makes available all content in this plug-in
+		("Content"). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 ("EPL"). A copy of the EPL is
+		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		("Redistributor") and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/build.properties b/features/org.eclipse.capra.ui.sunburst.feature/build.properties
new file mode 100644
index 0000000..9a0fac4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/build.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+bin.includes = feature.xml,\
+               license.html,\
+               feature.properties,\
+               epl-v20.html,\
+               about.html
+
+src.includes = about.html,\
+               epl-v20.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/epl-v20.html b/features/org.eclipse.capra.ui.sunburst.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/epl-v20.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" class="gr__eclipse_org" lang="en"><head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body data-gr-c-s-loaded="true">
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>“Contribution” means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        “originates” from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor's behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>“Contributor” means any person or entity that Distributes the Program.</p>
+    <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>“Program” means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>“Recipient” means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>“Derivative Works” shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>“Modified Works” shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>“Distribute” means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>“Source Code” means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>“Secondary License” means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient's
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient's receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients' rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (‘notices’) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (“Commercial Contributor”)
+      hereby agrees to defend and indemnify every other Contributor
+      (“Indemnified Contributor”) against any losses, damages and costs
+      (collectively “Losses”) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor's responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient's rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient's obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+    <p>“This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.”
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/feature.properties b/features/org.eclipse.capra.ui.sunburst.feature/feature.properties
new file mode 100644
index 0000000..d22b535
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/feature.properties
@@ -0,0 +1,91 @@
+###############################################################################
+# Copyright (c) 2016, 2020 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+# "featureName" property - name of the feature
+featureName=Eclipse Capra Traceability Sunburst Visualisation
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra
+ 
+# "description" property - description of the feature
+description=Visualisation of trace links with a navigable sunburst chart. The chart shows the currently selected artifact in the center and the hierarchy of related artifacts as circle segments around it.
+descriptionURL=https://eclipse.org/capra
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateLabel=
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+\n\
+November 22, 2017\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-2.0. For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").\n\
+\n\
+    Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").\n\
+    Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java\u2122 ARchive) in a directory named "plugins".\n\
+    A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+    Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:\n\
+\n\
+    The top-level (root) directory\n\
+    Plug-in and Fragment directories\n\
+    Inside Plug-ins and Fragments packaged as JARs\n\
+    Sub-directories of the directory named "src" of certain Plug-ins\n\
+    Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html)\n\
+    Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+    Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.\n\
+Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+    A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.\n\
+    During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+    Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=Copyright (c) 2016-2019 Chalmers | University of Gothenburg, rt-labs and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-v20.html\n\
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/feature.xml b/features/org.eclipse.capra.ui.sunburst.feature/feature.xml
new file mode 100644
index 0000000..32ec6a7
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.ui.sunburst.feature"
+      label="%featureName"
+      version="0.8.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.ui.sunburst"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/license.html b/features/org.eclipse.capra.ui.sunburst.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/license.html
@@ -0,0 +1,181 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2017</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 ("EPL"). A copy of the
+		EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository ("Repository") in software
+		modules ("Modules") and made available as downloadable
+		archives ("Downloads").</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins ("Plug-ins"), plug-in
+			fragments ("Fragments"), and features
+			("Features").</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java™ ARchive) in a directory named
+			"plugins".</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named "features". Within a
+			Feature, files named "feature.xml" may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features ("Included
+			Features"). Within a Feature, files named
+			"feature.xml" may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named "about.html"
+		("Abouts"). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		"license.html" ("Feature Licenses"). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named "src" of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license ("Feature Update License") during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		"license" property of files named
+		"feature.properties" found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager ("Provisioning Technology") for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively "Installable Software"). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		("Specification").
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur ("Provisioning
+			Process") in which a user may execute the Provisioning
+			Technology on a machine ("Target Machine") with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software ("Installable Software Agreement") and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.sunburst.feature/pom.xml b/features/org.eclipse.capra.ui.sunburst.feature/pom.xml
new file mode 100644
index 0000000..c2e9113
--- /dev/null
+++ b/features/org.eclipse.capra.ui.sunburst.feature/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+        <modelVersion>4.0.0</modelVersion>
+
+        <parent>
+                <relativePath>../../pom.xml</relativePath>
+                <groupId>org.eclipse.capra</groupId>
+                <artifactId>parent</artifactId>
+                <version>0.8.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.ui.sunburst.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.ui.xtext.feature/.project b/features/org.eclipse.capra.ui.xtext.feature/.project
new file mode 100644
index 0000000..32eb9d1
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.xtext.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/features/org.eclipse.capra.ui.xtext.feature/about.html b/features/org.eclipse.capra.ui.xtext.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/about.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>About</title>
+</head>
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>About This Content</h2>
+
+	<p>November 30, 2017</p>
+	<h3>License</h3>
+
+	<p>
+		The Eclipse Foundation makes available all content in this plug-in
+		("Content"). Unless otherwise indicated below, the Content
+		is provided to you under the terms and conditions of the Eclipse
+		Public License Version 2.0 ("EPL"). A copy of the EPL is
+		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>
+		If you did not receive this Content directly from the Eclipse
+		Foundation, the Content is being redistributed by another party
+		("Redistributor") and different terms and conditions may
+		apply to your use of any object code in the Content. Check the
+		Redistributor's license that was provided with the Content. If no such
+		license exists, contact the Redistributor. Unless otherwise indicated
+		below, the terms and conditions of the EPL still apply to any source
+		code in the Content and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.xtext.feature/build.properties b/features/org.eclipse.capra.ui.xtext.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/build.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+bin.includes = feature.xml,\
+               license.html,\
+               feature.properties,\
+               epl-v20.html,\
+               about.html
+
+src.includes = about.html,\
+               epl-v20.html,\
+               feature.properties,\
+               feature.xml,\
+               license.html
diff --git a/features/org.eclipse.capra.ui.xtext.feature/epl-v20.html b/features/org.eclipse.capra.ui.xtext.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/epl-v20.html
@@ -0,0 +1,299 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" class="gr__eclipse_org" lang="en"><head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body data-gr-c-s-loaded="true">
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>“Contribution” means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        “originates” from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor's behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>“Contributor” means any person or entity that Distributes the Program.</p>
+    <p>“Licensed Patents” mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>“Program” means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>“Recipient” means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>“Derivative Works” shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>“Modified Works” shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>“Distribute” means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>“Source Code” means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>“Secondary License” means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient's
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient's receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients' rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (‘notices’) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (“Commercial Contributor”)
+      hereby agrees to defend and indemnify every other Contributor
+      (“Indemnified Contributor”) against any losses, damages and costs
+      (collectively “Losses”) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor's responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient's patent(s), then such Recipient's rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient's rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient's rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient's obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
+    <p>“This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.”
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.xtext.feature/feature.properties b/features/org.eclipse.capra.ui.xtext.feature/feature.properties
new file mode 100644
index 0000000..e744172
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/feature.properties
@@ -0,0 +1,91 @@
+###############################################################################
+# Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v2.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v20.html
+#  
+# SPDX-License-Identifier: EPL-2.0
+#  
+# Contributors:
+#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+#      Chalmers | University of Gothenburg - additional features, updated API
+###############################################################################
+# "featureName" property - name of the feature
+featureName=Eclipse Capra Selection Support for Xtext
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra
+ 
+# "description" property - description of the feature
+description=Allows selecting elements in Xtext editors and the Xtext outline view to create trace links
+descriptionURL=https://eclipse.org/capra
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+updateLabel=
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+\n\
+November 22, 2017\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 2.0 ("EPL"). A copy of the EPL is provided with this Content and is also available at http://www.eclipse.org/legal/epl-2.0. For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").\n\
+\n\
+    Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").\n\
+    Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java\u2122 ARchive) in a directory named "plugins".\n\
+    A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+    Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module including, but not limited to the following locations:\n\
+\n\
+    The top-level (root) directory\n\
+    Plug-in and Fragment directories\n\
+    Inside Plug-ins and Fragments packaged as JARs\n\
+    Sub-directories of the directory named "src" of certain Plug-ins\n\
+    Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature. Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+    Eclipse Public License Version 1.0 (available at http://www.eclipse.org/legal/epl-v10.html)\n\
+    Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+    Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+    Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+    Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+    Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.\n\
+Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to install, extend and update Eclipse-based products. Information about packaging Installable Software is available at http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+    A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based product.\n\
+    During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+    Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=Copyright (c) 2016-2019 Chalmers | University of Gothenburg, rt-labs and others.\n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v2.0\n\
+which accompanies this distribution, and is available at\n\
+https://www.eclipse.org/legal/epl-v20.html\n\
diff --git a/features/org.eclipse.capra.ui.xtext.feature/feature.xml b/features/org.eclipse.capra.ui.xtext.feature/feature.xml
new file mode 100644
index 0000000..8ab1203
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.ui.xtext.feature"
+      label="%featureName"
+      version="0.8.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.ui.xtext"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.ui.xtext.feature/license.html b/features/org.eclipse.capra.ui.xtext.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/license.html
@@ -0,0 +1,181 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" class="gr__eclipse_org"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body data-gr-c-s-loaded="true" lang="EN-US">
+	<h2>Eclipse Foundation Software User Agreement</h2>
+	<p>November 22, 2017</p>
+
+	<h3>Usage Of Content</h3>
+
+	<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION,
+		INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+		(COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY
+		THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+		CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS
+		GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY
+		APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED
+		BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS
+		AGREEMENT AND THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE
+		AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT
+		USE THE CONTENT.</p>
+
+	<h3>Applicable Licenses</h3>
+
+	<p>
+		Unless otherwise indicated, all Content made available by the Eclipse
+		Foundation is provided to you under the terms and conditions of the
+		Eclipse Public License Version 2.0 ("EPL"). A copy of the
+		EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
+		For purposes of the EPL, "Program" will mean the Content.
+	</p>
+
+	<p>Content includes, but is not limited to, source code, object
+		code, documentation and other files maintained in the Eclipse
+		Foundation source code repository ("Repository") in software
+		modules ("Modules") and made available as downloadable
+		archives ("Downloads").</p>
+
+	<ul>
+		<li>Content may be structured and packaged into modules to
+			facilitate delivering, extending, and upgrading the Content. Typical
+			modules may include plug-ins ("Plug-ins"), plug-in
+			fragments ("Fragments"), and features
+			("Features").</li>
+		<li>Each Plug-in or Fragment may be packaged as a sub-directory
+			or JAR (Java™ ARchive) in a directory named
+			"plugins".</li>
+		<li>A Feature is a bundle of one or more Plug-ins and/or
+			Fragments and associated material. Each Feature may be packaged as a
+			sub-directory in a directory named "features". Within a
+			Feature, files named "feature.xml" may contain a list of
+			the names and version numbers of the Plug-ins and/or Fragments
+			associated with that Feature.</li>
+		<li>Features may also include other Features ("Included
+			Features"). Within a Feature, files named
+			"feature.xml" may contain a list of the names and version
+			numbers of Included Features.</li>
+	</ul>
+
+	<p>The terms and conditions governing Plug-ins and Fragments should
+		be contained in files named "about.html"
+		("Abouts"). The terms and conditions governing Features and
+		Included Features should be contained in files named
+		"license.html" ("Feature Licenses"). Abouts and
+		Feature Licenses may be located in any directory of a Download or
+		Module including, but not limited to the following locations:</p>
+
+	<ul>
+		<li>The top-level (root) directory</li>
+		<li>Plug-in and Fragment directories</li>
+		<li>Inside Plug-ins and Fragments packaged as JARs</li>
+		<li>Sub-directories of the directory named "src" of
+			certain Plug-ins</li>
+		<li>Feature directories</li>
+	</ul>
+
+	<p>Note: if a Feature made available by the Eclipse Foundation is
+		installed using the Provisioning Technology (as defined below), you
+		must agree to a license ("Feature Update License") during
+		the installation process. If the Feature contains Included Features,
+		the Feature Update License should either provide you with the terms
+		and conditions governing the Included Features or inform you where you
+		can locate them. Feature Update Licenses may be found in the
+		"license" property of files named
+		"feature.properties" found within a Feature. Such Abouts,
+		Feature Licenses, and Feature Update Licenses contain the terms and
+		conditions (or references to such terms and conditions) that govern
+		your use of the associated Content in that directory.</p>
+
+	<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY
+		REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND
+		CONDITIONS. SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT
+		ARE NOT LIMITED TO):</p>
+
+	<ul>
+		<li>Eclipse Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>)
+		</li>
+		<li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)
+		</li>
+		<li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)
+		</li>
+		<li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)
+		</li>
+		<li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)
+		</li>
+		<li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)
+		</li>
+	</ul>
+
+	<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND
+		CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License,
+		or Feature Update License is provided, please contact the Eclipse
+		Foundation to determine what terms and conditions govern that
+		particular Content.</p>
+
+
+	<h3>Use of Provisioning Technology</h3>
+
+	<p>
+		The Eclipse Foundation makes available provisioning software, examples
+		of which include, but are not limited to, p2 and the Eclipse Update
+		Manager ("Provisioning Technology") for the purpose of
+		allowing users to install software, documentation, information and/or
+		other materials (collectively "Installable Software"). This
+		capability is provided with the intent of allowing such users to
+		install, extend and update Eclipse-based products. Information about
+		packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+		("Specification").
+	</p>
+
+	<p>You may use Provisioning Technology to allow other parties to
+		install Installable Software. You shall be responsible for enabling
+		the applicable license agreements relating to the Installable Software
+		to be presented to, and accepted by, the users of the Provisioning
+		Technology in accordance with the Specification. By using Provisioning
+		Technology in such a manner and making it available in accordance with
+		the Specification, you further acknowledge your agreement to, and the
+		acquisition of all necessary rights to permit the following:</p>
+
+	<ol>
+		<li>A series of actions may occur ("Provisioning
+			Process") in which a user may execute the Provisioning
+			Technology on a machine ("Target Machine") with the intent
+			of installing, extending or updating the functionality of an
+			Eclipse-based product.</li>
+		<li>During the Provisioning Process, the Provisioning Technology
+			may cause third party Installable Software or a portion thereof to be
+			accessed and copied to the Target Machine.</li>
+		<li>Pursuant to the Specification, you will provide to the user
+			the terms and conditions that govern the use of the Installable
+			Software ("Installable Software Agreement") and such
+			Installable Software Agreement shall be accessed from the Target
+			Machine in accordance with the Specification. Such Installable
+			Software Agreement must inform the user of the terms and conditions
+			that govern the Installable Software and must solicit acceptance by
+			the end user in the manner prescribed in such Installable Software
+			Agreement. Upon such indication of agreement by the user, the
+			provisioning Technology will complete installation of the Installable
+			Software.</li>
+	</ol>
+
+	<h3>Cryptography</h3>
+
+	<p>Content may contain encryption software. The country in which
+		you are currently may have restrictions on the import, possession, and
+		use, and/or re-export to another country, of encryption software.
+		BEFORE using any encryption software, please check the country's laws,
+		regulations and policies concerning the import, possession, or use,
+		and re-export of encryption software, to see if this is permitted.</p>
+
+	<p>
+		<small>Java and all Java-based trademarks are trademarks of
+			Oracle Corporation in the United States, other countries, or both.</small>
+	</p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.capra.ui.xtext.feature/pom.xml b/features/org.eclipse.capra.ui.xtext.feature/pom.xml
new file mode 100644
index 0000000..129e96c
--- /dev/null
+++ b/features/org.eclipse.capra.ui.xtext.feature/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+    Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+    All rights reserved. This program and the accompanying materials
+    are made available under the terms of the Eclipse Public License v2.0
+    which accompanies this distribution, and is available at
+    http://www.eclipse.org/legal/epl-v20.html
+     
+    SPDX-License-Identifier: EPL-2.0
+     
+    Contributors:
+         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+         Chalmers | University of Gothenburg - additional features, updated API
+ --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+        <modelVersion>4.0.0</modelVersion>
+
+        <parent>
+                <relativePath>../../pom.xml</relativePath>
+                <groupId>org.eclipse.capra</groupId>
+                <artifactId>parent</artifactId>
+                <version>0.8.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.ui.xtext.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.ui.zest.feature/feature.xml b/features/org.eclipse.capra.ui.zest.feature/feature.xml
index 2a48fa4..44ba549 100644
--- a/features/org.eclipse.capra.ui.zest.feature/feature.xml
+++ b/features/org.eclipse.capra.ui.zest.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.capra.ui.zest.feature"
       label="%featureName"
-      version="0.7.2.qualifier"
+      version="0.8.1.qualifier"
       provider-name="%providerName">
 
    <description url="%descriptionURL">
diff --git a/features/org.eclipse.capra.ui.zest.feature/pom.xml b/features/org.eclipse.capra.ui.zest.feature/pom.xml
index 5a4adbe..7c03055 100644
--- a/features/org.eclipse.capra.ui.zest.feature/pom.xml
+++ b/features/org.eclipse.capra.ui.zest.feature/pom.xml
@@ -18,7 +18,7 @@
                 <relativePath>../../pom.xml</relativePath>
                 <groupId>org.eclipse.capra</groupId>
                 <artifactId>parent</artifactId>
-                <version>0.7.2-SNAPSHOT</version>
+                <version>0.8.1-SNAPSHOT</version>
         </parent>
 
         <artifactId>org.eclipse.capra.ui.zest.feature</artifactId>
diff --git a/pom.xml b/pom.xml
index fa517bd..e88cb2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
 
 	<groupId>org.eclipse.capra</groupId>
 	<artifactId>parent</artifactId>
-	<version>0.7.2-SNAPSHOT</version>
+	<version>0.8.1-SNAPSHOT</version>
 	<packaging>pom</packaging>
     <name>Capra</name>
 
@@ -23,6 +23,7 @@
 		<module>bundles/org.eclipse.capra.generic.priority</module>
 		<module>bundles/org.eclipse.capra.generic.tracemodel</module>
 		<module>bundles/org.eclipse.capra.generic.artifactmodel</module>
+		<module>bundles/org.eclipse.capra.handler.app4mc</module>
 		<module>bundles/org.eclipse.capra.handler.cdt</module>
 		<module>bundles/org.eclipse.capra.handler.emf</module>
 		<module>bundles/org.eclipse.capra.handler.file</module>
@@ -46,7 +47,10 @@
 		<module>bundles/org.eclipse.capra.ui.drive</module>
 		<module>bundles/org.eclipse.capra.ui.zest</module>
 		<module>bundles/org.eclipse.capra.ui.reqif</module>
-		
+		<module>bundles/org.eclipse.capra.ui.xtext</module>
+		<module>bundles/org.eclipse.capra.ui.sunburst</module>
+		<module>bundles/org.eclipse.capra.ui.matrix</module>
+
 		<!-- Tests -->
 		<module>tests/org.eclipse.capra.testsuite</module>
 		<module>tests/org.eclipse.capra.handler.cdt.tests</module>
@@ -61,6 +65,7 @@
 		<module>features/org.eclipse.capra.feature</module>
 		<module>features/org.eclipse.capra.core.feature</module>
 		<module>features/org.eclipse.capra.generic.feature</module>
+		<module>features/org.eclipse.capra.handler.app4mc.feature</module>
 		<module>features/org.eclipse.capra.handler.cdt.feature</module>
 		<module>features/org.eclipse.capra.handler.hudson.feature</module>
 		<module>features/org.eclipse.capra.handler.office.feature</module>
@@ -72,7 +77,10 @@
 		<module>features/org.eclipse.capra.ui.feature</module>
 		<module>features/org.eclipse.capra.ui.plantuml.feature</module>
 		<module>features/org.eclipse.capra.ui.zest.feature</module>
-		
+		<module>features/org.eclipse.capra.ui.xtext.feature</module>
+		<module>features/org.eclipse.capra.ui.sunburst.feature</module>
+		<module>features/org.eclipse.capra.ui.matrix.feature</module>
+
 		<!-- Releng -->
 		<module>releng/org.eclipse.capra.releng.target</module>
 		<module>releng/org.eclipse.capra.releng.p2</module>
@@ -155,7 +163,7 @@
 						<artifact>
 							<groupId>org.eclipse.capra</groupId>
 							<artifactId>org.eclipse.capra.releng.target</artifactId>
-							<version>0.7.2-SNAPSHOT</version>
+							<version>0.8.1-SNAPSHOT</version>
 						</artifact>
 					</target>
 					<environments>
diff --git a/releng/org.eclipse.capra.branding/META-INF/MANIFEST.MF b/releng/org.eclipse.capra.branding/META-INF/MANIFEST.MF
index 77d828c..3ba30d1 100644
--- a/releng/org.eclipse.capra.branding/META-INF/MANIFEST.MF
+++ b/releng/org.eclipse.capra.branding/META-INF/MANIFEST.MF
@@ -4,4 +4,4 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.branding
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
diff --git a/releng/org.eclipse.capra.branding/pom.xml b/releng/org.eclipse.capra.branding/pom.xml
index d3a1149..265c6ee 100644
--- a/releng/org.eclipse.capra.branding/pom.xml
+++ b/releng/org.eclipse.capra.branding/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>org.eclipse.capra.branding</artifactId>
diff --git a/releng/org.eclipse.capra.releng.p2/category.xml b/releng/org.eclipse.capra.releng.p2/category.xml
index 5235dae..2c94500 100644
--- a/releng/org.eclipse.capra.releng.p2/category.xml
+++ b/releng/org.eclipse.capra.releng.p2/category.xml
@@ -1,36 +1,48 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <site>
-   <feature url="features/org.eclipse.capra.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.cdt.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.cdt.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.cdt.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.cdt.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.hudson.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.hudson.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.hudson.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.hudson.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.featureide.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.featureide.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.featureide.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.featureide.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.jdt.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.jdt.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.jdt.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.jdt.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.papyrus.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.papyrus.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.papyrus.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.papyrus.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.reqif.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.reqif.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.reqif.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.reqif.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.office.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.office.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.office.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.office.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.handler.php.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.handler.php.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.php.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.php.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.handler"/>
    </feature>
-   <feature url="features/org.eclipse.capra.ui.plantuml.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.ui.plantuml.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.handler.app4mc.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.handler.app4mc.feature" version="0.8.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.ui.plantuml.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.ui.plantuml.feature" version="0.8.1.qualifier">
       <category name="org.eclipse.capra.ui"/>
    </feature>
-   <feature url="features/org.eclipse.capra.ui.zest.feature_0.7.2.qualifier.jar" id="org.eclipse.capra.ui.zest.feature" version="0.7.2.qualifier">
+   <feature url="features/org.eclipse.capra.ui.zest.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.ui.zest.feature" version="0.8.1.qualifier">
+      <category name="org.eclipse.capra.ui"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.ui.xtext.feature_0.8.1.qualifier.jar" id="org.eclipse.capra.ui.xtext.feature" version="0.8.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature id="org.eclipse.capra.ui.matrix.feature">
+      <category name="org.eclipse.capra.ui"/>
+   </feature>
+   <feature id="org.eclipse.capra.ui.sunburst.feature">
       <category name="org.eclipse.capra.ui"/>
    </feature>
    <category-def name="org.eclipse.capra" label="Eclipse Capra Traceability">
@@ -44,7 +56,7 @@
       </description>
    </category-def>
    <category-def name="org.eclipse.capra.ui" label="Eclipse Capra Traceability Visualisation">
-   	<description>
+      <description>
          Features to visualise traceability links and perform change impact analysis.
       </description>
    </category-def>
diff --git a/releng/org.eclipse.capra.releng.p2/pom.xml b/releng/org.eclipse.capra.releng.p2/pom.xml
index c507a5e..07abd67 100644
--- a/releng/org.eclipse.capra.releng.p2/pom.xml
+++ b/releng/org.eclipse.capra.releng.p2/pom.xml
@@ -11,11 +11,11 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 	<groupId>org.eclipse.capra</groupId>
 	<artifactId>org.eclipse.capra.p2</artifactId>
-	<version>0.7.2-SNAPSHOT</version>
+	<version>0.8.1-SNAPSHOT</version>
 	<packaging>eclipse-repository</packaging>
 	<name>Eclipse Capra Update Site</name>
 
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.target
index c63c404..35f4e56 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.10" sequenceNumber="1565593799">
+<target name="eclipse-capra-e4.10" sequenceNumber="1593287263">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.6.0.201812111211"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.16.0.v20181203-1555"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.13.300.v20181206-0815"/>
       <repository id="eclipse-2018-12" location="http://download.eclipse.org/releases/2018-12/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -50,8 +51,8 @@
       <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.8.1.201409171422"/>
-      <repository location="http://download.eclipse.org/sphinx/releases/0.8.x"/>
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
@@ -59,12 +60,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.tpd
index 0556713..0230263 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -46,7 +47,7 @@
 	org.mortbay.jetty.server
 }
 
-location "http://download.eclipse.org/sphinx/releases/0.8.x" {
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
 	org.eclipse.sphinx.sdk.feature.group
 }
 
@@ -56,9 +57,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.target
index b756544..a163249 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.11" sequenceNumber="1565593884">
+<target name="eclipse-capra-e4.11" sequenceNumber="1593270336">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.7.0.201903092251"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.17.0.v20190304-1445"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.13.400.v20190307-0943"/>
       <repository id="eclipse-2019-03" location="http://download.eclipse.org/releases/2019-03/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -50,8 +51,8 @@
       <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.8.1.201409171422"/>
-      <repository location="http://download.eclipse.org/sphinx/releases/0.8.x"/>
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
@@ -59,12 +60,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.tpd
index 1d86b72..028b705 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group	
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -46,7 +47,7 @@
 	org.mortbay.jetty.server
 }
 
-location "http://download.eclipse.org/sphinx/releases/0.8.x" {
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
 	org.eclipse.sphinx.sdk.feature.group
 }
 
@@ -56,9 +57,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.target
index e1d34b6..1caa2ff 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.12" sequenceNumber="1565170693">
+<target name="eclipse-capra-e4.12" sequenceNumber="1593287278">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.8.0.201906071757"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.18.0.v20190528-0716"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.14.0.v20190605-1800"/>
       <repository id="eclipse-2019-06" location="http://download.eclipse.org/releases/2019-06/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -50,8 +51,8 @@
       <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.8.1.201409171422"/>
-      <repository location="http://download.eclipse.org/sphinx/releases/0.8.x"/>
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
@@ -59,12 +60,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.tpd
index 228ffe8..df1493a 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.12.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -46,7 +47,7 @@
 	org.mortbay.jetty.server
 }
 
-location "http://download.eclipse.org/sphinx/releases/0.8.x" {
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
 	org.eclipse.sphinx.sdk.feature.group
 }
 
@@ -56,9 +57,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.13.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.13.target
new file mode 100644
index 0000000..8e423c9
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.13.target
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="eclipse-capra-e4.13" sequenceNumber="1593287642">
+  <locations>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.cdt.sdk.feature.group" version="9.9.0.201909091956"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.9.0.201908121431"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.8.201909101346"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.11.0.v20190822-1451"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.19.0.v20190824-1315"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.5.0.201909110825"/>
+      <unit id="org.eclipse.php.feature.group" version="6.3.0.201909061650"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.19.0.v20190902-1322"/>
+      <unit id="org.eclipse.mylyn.gerrit.feature.feature.group" version="2.15.0.v20180322-1946"/>
+      <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
+      <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
+      <unit id="org.eclipse.xtend.sdk.feature.group" version="2.19.0.v20190902-1322"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.14.100.v20190916-1045"/>
+      <repository id="eclipse-2019-09" location="http://download.eclipse.org/releases/2019-09/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.gef4.common.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.geometry.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.fx.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.layout.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.graph.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.dot.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.cloudio.sdk.feature.group" version="1.0.1.201609060946"/>
+      <repository id="eclipse-gef4" location="http://download.eclipse.org/tools/gef/gef4/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.apache.poi.ooxml" version="3.9.0.v201405241905"/>
+      <unit id="org.apache.xmlbeans" version="2.3.0.v201605172150"/>
+      <unit id="com.google.guava" version="27.1.0.v20190517-1946"/>
+      <unit id="org.apache.commons.collections" version="3.2.2.v201511171945"/>
+      <unit id="org.apache.poi.ooxml.schemas" version="3.9.0.v201405241750"/>
+      <unit id="org.apache.poi" version="3.9.0.v201405241750"/>
+      <unit id="com.fasterxml.jackson.core.jackson-core" version="2.9.2.v20180207-1730"/>
+      <unit id="org.slf4j.api" version="1.7.10.v20170428-1633"/>
+      <unit id="ch.qos.logback.slf4j" version="1.1.2.v20160301-0943"/>
+      <repository id="eclipse-orbit-2019-09" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20190827152740/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.mortbay.jetty.util" version="6.1.23.v201012071420"/>
+      <unit id="org.mortbay.jetty.server" version="6.1.23.v201012071420"/>
+      <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <unit id="org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <repository location="http://download.eclipse.org/rmf/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
+      <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
+  </locations>
+</target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.13.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.13.tpd
new file mode 100644
index 0000000..a4baec3
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.13.tpd
@@ -0,0 +1,73 @@
+target "eclipse-capra-e4.13" with source requirements
+
+location "http://download.eclipse.org/releases/2019-09/" eclipse-2019-09 {
+	org.eclipse.cdt.sdk.feature.group
+	org.eclipse.cdt.testsrunner.feature.feature.group
+	org.eclipse.emf.compare.ide.ui.feature.group
+	org.eclipse.emf.ecore.xcore.sdk.feature.group
+	org.eclipse.emf.sdk.feature.group
+	org.eclipse.papyrus.sdk.feature.feature.group
+	org.eclipse.php.feature.group
+	org.eclipse.xtext.sdk.feature.group
+	org.eclipse.mylyn.gerrit.feature.feature.group
+	org.eclipse.mylyn.hudson.feature.group
+	org.eclipse.gef.sdk.feature.group
+	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
+}
+
+location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
+	org.eclipse.gef4.common.sdk.feature.group
+	org.eclipse.gef4.geometry.sdk.feature.group
+	org.eclipse.gef4.fx.sdk.feature.group
+	org.eclipse.gef4.mvc.sdk.feature.group
+	org.eclipse.gef4.mvc.examples.source.feature.group
+	org.eclipse.gef4.layout.sdk.feature.group
+	org.eclipse.gef4.graph.sdk.feature.group
+	org.eclipse.gef4.zest.sdk.feature.group
+	org.eclipse.gef4.zest.examples.source.feature.group
+	org.eclipse.gef4.dot.sdk.feature.group
+	org.eclipse.gef4.cloudio.sdk.feature.group
+}
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20190827152740/repository/" eclipse-orbit-2019-09 {
+	org.apache.poi.ooxml
+	org.apache.xmlbeans
+	com.google.guava
+	org.apache.commons.collections
+	org.apache.poi.ooxml.schemas
+	org.apache.poi
+	com.fasterxml.jackson.core.jackson-core
+	org.slf4j.api
+	ch.qos.logback.slf4j
+}
+
+location "http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/" eclipse-orbit-mars2 {
+	org.mortbay.jetty.util
+	org.mortbay.jetty.server
+}
+
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
+	org.eclipse.sphinx.sdk.feature.group
+}
+
+location "http://download.eclipse.org/rmf/updates/releases" {
+	org.eclipse.rmf.reqif10.sdk.feature.feature.group
+	org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group
+}
+
+location "http://hallvard.github.io/plantuml/" plantuml {
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
+}
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.14.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.14.target
new file mode 100644
index 0000000..67f3139
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.14.target
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="eclipse-capra-e4.14" sequenceNumber="1593287718">
+  <locations>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.cdt.sdk.feature.group" version="9.10.0.201912051559"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.10.0.201910161455"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.9.201911051515"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.12.0.v20190924-0817"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.20.0.v20191028-0905"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.6.0.201912110926"/>
+      <unit id="org.eclipse.php.feature.group" version="7.0.0.201912041612"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.20.0.v20191202-1256"/>
+      <unit id="org.eclipse.mylyn.gerrit.feature.feature.group" version="2.15.0.v20180322-1946"/>
+      <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
+      <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
+      <unit id="org.eclipse.xtend.sdk.feature.group" version="2.20.0.v20191202-1256"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.14.200.v20191210-0610"/>
+      <repository id="eclipse-2019-12" location="http://download.eclipse.org/releases/2019-12/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.gef4.common.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.geometry.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.fx.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.layout.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.graph.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.dot.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.cloudio.sdk.feature.group" version="1.0.1.201609060946"/>
+      <repository id="eclipse-gef4" location="http://download.eclipse.org/tools/gef/gef4/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.apache.poi.ooxml" version="3.9.0.v201405241905"/>
+      <unit id="org.apache.xmlbeans" version="2.3.0.v201605172150"/>
+      <unit id="com.google.guava" version="27.1.0.v20190517-1946"/>
+      <unit id="org.apache.commons.collections" version="3.2.2.v201511171945"/>
+      <unit id="org.apache.poi.ooxml.schemas" version="3.9.0.v201405241750"/>
+      <unit id="org.apache.poi" version="3.9.0.v201405241750"/>
+      <unit id="com.fasterxml.jackson.core.jackson-core" version="2.9.9.v20190906-1522"/>
+      <unit id="org.slf4j.api" version="1.7.10.v20170428-1633"/>
+      <unit id="ch.qos.logback.slf4j" version="1.1.2.v20160301-0943"/>
+      <repository id="eclipse-orbit-2019-12" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.mortbay.jetty.util" version="6.1.23.v201012071420"/>
+      <unit id="org.mortbay.jetty.server" version="6.1.23.v201012071420"/>
+      <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <unit id="org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <repository location="http://download.eclipse.org/rmf/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
+      <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
+  </locations>
+</target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.14.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.14.tpd
new file mode 100644
index 0000000..9d48685
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.14.tpd
@@ -0,0 +1,73 @@
+target "eclipse-capra-e4.14" with source requirements
+
+location "http://download.eclipse.org/releases/2019-12/" eclipse-2019-12 {
+	org.eclipse.cdt.sdk.feature.group
+	org.eclipse.cdt.testsrunner.feature.feature.group
+	org.eclipse.emf.compare.ide.ui.feature.group
+	org.eclipse.emf.ecore.xcore.sdk.feature.group
+	org.eclipse.emf.sdk.feature.group
+	org.eclipse.papyrus.sdk.feature.feature.group
+	org.eclipse.php.feature.group
+	org.eclipse.xtext.sdk.feature.group
+	org.eclipse.mylyn.gerrit.feature.feature.group
+	org.eclipse.mylyn.hudson.feature.group
+	org.eclipse.gef.sdk.feature.group
+	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
+}
+
+location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
+	org.eclipse.gef4.common.sdk.feature.group
+	org.eclipse.gef4.geometry.sdk.feature.group
+	org.eclipse.gef4.fx.sdk.feature.group
+	org.eclipse.gef4.mvc.sdk.feature.group
+	org.eclipse.gef4.mvc.examples.source.feature.group
+	org.eclipse.gef4.layout.sdk.feature.group
+	org.eclipse.gef4.graph.sdk.feature.group
+	org.eclipse.gef4.zest.sdk.feature.group
+	org.eclipse.gef4.zest.examples.source.feature.group
+	org.eclipse.gef4.dot.sdk.feature.group
+	org.eclipse.gef4.cloudio.sdk.feature.group
+}
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository/" eclipse-orbit-2019-12 {
+	org.apache.poi.ooxml
+	org.apache.xmlbeans
+	com.google.guava
+	org.apache.commons.collections
+	org.apache.poi.ooxml.schemas
+	org.apache.poi
+	com.fasterxml.jackson.core.jackson-core
+	org.slf4j.api
+	ch.qos.logback.slf4j
+}
+
+location "http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/" eclipse-orbit-mars2 {
+	org.mortbay.jetty.util
+	org.mortbay.jetty.server
+}
+
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
+	org.eclipse.sphinx.sdk.feature.group
+}
+
+location "http://download.eclipse.org/rmf/updates/releases" {
+	org.eclipse.rmf.reqif10.sdk.feature.feature.group
+	org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group
+}
+
+location "http://hallvard.github.io/plantuml/" plantuml {
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
+}
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.15.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.15.target
new file mode 100644
index 0000000..b4e984a
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.15.target
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="eclipse-capra-e4.15" sequenceNumber="1593287779">
+  <locations>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.cdt.sdk.feature.group" version="9.11.0.202003091030"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.11.0.202002041243"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.10.202003070301"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.13.0.v20200127-1346"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.21.0.v20200205-0529"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.7.0.202003111106"/>
+      <unit id="org.eclipse.php.feature.group" version="7.1.0.202002212050"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.21.0.v20200302-1509"/>
+      <unit id="org.eclipse.mylyn.gerrit.feature.feature.group" version="2.15.0.v20180322-1946"/>
+      <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
+      <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
+      <unit id="org.eclipse.xtend.sdk.feature.group" version="2.21.0.v20200302-1509"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.14.300.v20200305-0155"/>
+      <repository id="eclipse-2020-03" location="http://download.eclipse.org/releases/2020-03/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.gef4.common.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.geometry.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.fx.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.layout.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.graph.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.dot.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.cloudio.sdk.feature.group" version="1.0.1.201609060946"/>
+      <repository id="eclipse-gef4" location="http://download.eclipse.org/tools/gef/gef4/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.apache.poi.ooxml" version="3.9.0.v201405241905"/>
+      <unit id="org.apache.xmlbeans" version="2.3.0.v201605172150"/>
+      <unit id="com.google.guava" version="27.1.0.v20190517-1946"/>
+      <unit id="org.apache.commons.collections" version="3.2.2.v201511171945"/>
+      <unit id="org.apache.poi.ooxml.schemas" version="3.9.0.v201405241750"/>
+      <unit id="org.apache.poi" version="3.9.0.v201405241750"/>
+      <unit id="com.fasterxml.jackson.core.jackson-core" version="2.9.9.v20190906-1522"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
+      <unit id="ch.qos.logback.slf4j" version="1.1.2.v20160301-0943"/>
+      <repository id="eclipse-orbit-2020-03" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20200224183213/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.mortbay.jetty.util" version="6.1.23.v201012071420"/>
+      <unit id="org.mortbay.jetty.server" version="6.1.23.v201012071420"/>
+      <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <unit id="org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <repository location="http://download.eclipse.org/rmf/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
+      <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
+  </locations>
+</target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.15.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.15.tpd
new file mode 100644
index 0000000..c586421
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.15.tpd
@@ -0,0 +1,73 @@
+target "eclipse-capra-e4.15" with source requirements
+
+location "http://download.eclipse.org/releases/2020-03/" eclipse-2020-03 {
+	org.eclipse.cdt.sdk.feature.group
+	org.eclipse.cdt.testsrunner.feature.feature.group
+	org.eclipse.emf.compare.ide.ui.feature.group
+	org.eclipse.emf.ecore.xcore.sdk.feature.group
+	org.eclipse.emf.sdk.feature.group
+	org.eclipse.papyrus.sdk.feature.feature.group
+	org.eclipse.php.feature.group
+	org.eclipse.xtext.sdk.feature.group
+	org.eclipse.mylyn.gerrit.feature.feature.group
+	org.eclipse.mylyn.hudson.feature.group
+	org.eclipse.gef.sdk.feature.group
+	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
+}
+
+location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
+	org.eclipse.gef4.common.sdk.feature.group
+	org.eclipse.gef4.geometry.sdk.feature.group
+	org.eclipse.gef4.fx.sdk.feature.group
+	org.eclipse.gef4.mvc.sdk.feature.group
+	org.eclipse.gef4.mvc.examples.source.feature.group
+	org.eclipse.gef4.layout.sdk.feature.group
+	org.eclipse.gef4.graph.sdk.feature.group
+	org.eclipse.gef4.zest.sdk.feature.group
+	org.eclipse.gef4.zest.examples.source.feature.group
+	org.eclipse.gef4.dot.sdk.feature.group
+	org.eclipse.gef4.cloudio.sdk.feature.group
+}
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20200224183213/repository/" eclipse-orbit-2020-03 {
+	org.apache.poi.ooxml
+	org.apache.xmlbeans
+	com.google.guava
+	org.apache.commons.collections
+	org.apache.poi.ooxml.schemas
+	org.apache.poi
+	com.fasterxml.jackson.core.jackson-core
+	org.slf4j.api
+	ch.qos.logback.slf4j
+}
+
+location "http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/" eclipse-orbit-mars2 {
+	org.mortbay.jetty.util
+	org.mortbay.jetty.server
+}
+
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
+	org.eclipse.sphinx.sdk.feature.group
+}
+
+location "http://download.eclipse.org/rmf/updates/releases" {
+	org.eclipse.rmf.reqif10.sdk.feature.feature.group
+	org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group
+}
+
+location "http://hallvard.github.io/plantuml/" plantuml {
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
+}
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.16.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.16.target
new file mode 100644
index 0000000..e307376
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.16.target
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="eclipse-capra-e4.16" sequenceNumber="1593287837">
+  <locations>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.cdt.sdk.feature.group" version="9.11.1.202006011430"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.11.1.202004012021"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.11.202005260905"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.14.0.v20200424-0456"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.22.0.v20200519-1135"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.8.0.202006100749"/>
+      <unit id="org.eclipse.php.feature.group" version="7.2.0.202005271851"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.22.0.v20200602-1533"/>
+      <unit id="org.eclipse.mylyn.gerrit.feature.feature.group" version="2.16.0.v20190327-0002"/>
+      <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.17.0.v20190115-0250"/>
+      <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
+      <unit id="org.eclipse.xtend.sdk.feature.group" version="2.22.0.v20200602-1533"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.14.400.v20200604-0540"/>
+      <repository id="eclipse-2020-06" location="http://download.eclipse.org/releases/2020-06/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.gef4.common.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.geometry.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.fx.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.mvc.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.layout.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.graph.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.sdk.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.zest.examples.source.feature.group" version="1.1.0.201609060946"/>
+      <unit id="org.eclipse.gef4.dot.sdk.feature.group" version="1.0.1.201609060946"/>
+      <unit id="org.eclipse.gef4.cloudio.sdk.feature.group" version="1.0.1.201609060946"/>
+      <repository id="eclipse-gef4" location="http://download.eclipse.org/tools/gef/gef4/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.apache.poi.ooxml" version="3.9.0.v201405241905"/>
+      <unit id="org.apache.xmlbeans" version="2.6.0.v20200418-0047"/>
+      <unit id="com.google.guava" version="27.1.0.v20190517-1946"/>
+      <unit id="org.apache.commons.collections" version="3.2.2.v201511171945"/>
+      <unit id="org.apache.poi.ooxml.schemas" version="3.9.0.v201405241750"/>
+      <unit id="org.apache.poi" version="4.1.1.v20200420-1729"/>
+      <unit id="com.fasterxml.jackson.core.jackson-core" version="2.10.3.v20200512-1600"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
+      <unit id="ch.qos.logback.slf4j" version="1.2.3.v20200428-2012"/>
+      <repository id="eclipse-orbit-2020-06" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20200529191137/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.mortbay.jetty.util" version="6.1.23.v201012071420"/>
+      <unit id="org.mortbay.jetty.server" version="6.1.23.v201012071420"/>
+      <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <unit id="org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+      <repository location="http://download.eclipse.org/rmf/updates/releases"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
+      <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.7.202001311433"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
+  </locations>
+</target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.16.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.16.tpd
new file mode 100644
index 0000000..054b6cf
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.16.tpd
@@ -0,0 +1,73 @@
+target "eclipse-capra-e4.16" with source requirements
+
+location "http://download.eclipse.org/releases/2020-06/" eclipse-2020-06 {
+	org.eclipse.cdt.sdk.feature.group
+	org.eclipse.cdt.testsrunner.feature.feature.group
+	org.eclipse.emf.compare.ide.ui.feature.group
+	org.eclipse.emf.ecore.xcore.sdk.feature.group
+	org.eclipse.emf.sdk.feature.group
+	org.eclipse.papyrus.sdk.feature.feature.group
+	org.eclipse.php.feature.group
+	org.eclipse.xtext.sdk.feature.group
+	org.eclipse.mylyn.gerrit.feature.feature.group
+	org.eclipse.mylyn.hudson.feature.group
+	org.eclipse.gef.sdk.feature.group
+	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
+}
+
+location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
+	org.eclipse.gef4.common.sdk.feature.group
+	org.eclipse.gef4.geometry.sdk.feature.group
+	org.eclipse.gef4.fx.sdk.feature.group
+	org.eclipse.gef4.mvc.sdk.feature.group
+	org.eclipse.gef4.mvc.examples.source.feature.group
+	org.eclipse.gef4.layout.sdk.feature.group
+	org.eclipse.gef4.graph.sdk.feature.group
+	org.eclipse.gef4.zest.sdk.feature.group
+	org.eclipse.gef4.zest.examples.source.feature.group
+	org.eclipse.gef4.dot.sdk.feature.group
+	org.eclipse.gef4.cloudio.sdk.feature.group
+}
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20200529191137/repository/" eclipse-orbit-2020-06 {
+	org.apache.poi.ooxml
+	org.apache.xmlbeans
+	com.google.guava
+	org.apache.commons.collections
+	org.apache.poi.ooxml.schemas
+	org.apache.poi
+	com.fasterxml.jackson.core.jackson-core
+	org.slf4j.api
+	ch.qos.logback.slf4j
+}
+
+location "http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/" eclipse-orbit-mars2 {
+	org.mortbay.jetty.util
+	org.mortbay.jetty.server
+}
+
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
+	org.eclipse.sphinx.sdk.feature.group
+}
+
+location "http://download.eclipse.org/rmf/updates/releases" {
+	org.eclipse.rmf.reqif10.sdk.feature.feature.group
+	org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group
+}
+
+location "http://hallvard.github.io/plantuml/" plantuml {
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.7/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
+}
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.target
index 64f4286..766c1b3 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.6" sequenceNumber="1565593951">
+<target name="eclipse-capra-e4.6" sequenceNumber="1593287331">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.2.1.201703062208"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.13.0.v20160806-1446"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.10.0.v201605250459"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.12.3.v20170301-0400"/>
       <repository id="eclipse-neon" location="http://download.eclipse.org/releases/neon/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -55,12 +56,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.5.201907311248"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.tpd
index db85e2e..c3b7a0f 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -52,9 +53,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.target
index 0ac6c72..e12f9c6 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.7" sequenceNumber="1565593925">
+<target name="eclipse-capra-e4.7" sequenceNumber="1593287322">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.4.3.201802261533"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.15.0.v20170411-2141"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.12.0.v20170519-1412"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.13.4.v20180330-0640"/>
       <repository id="eclipse-oxygen" location="http://download.eclipse.org/releases/oxygen/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -59,12 +60,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.5.201907311248"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.tpd
index 3f89112..1f01ba1 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -56,9 +57,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.target
index 89425d8..56315cb 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.8" sequenceNumber="1565593905">
+<target name="eclipse-capra-e4.8" sequenceNumber="1593287315">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.5.0.201806170908"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.14.0.v20180523-0937"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.13.100.v20180611-0826"/>
       <repository id="eclipse-photon" location="http://download.eclipse.org/releases/photon/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -50,8 +51,8 @@
       <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.8.1.201409171422"/>
-      <repository location="http://download.eclipse.org/sphinx/releases/0.8.x"/>
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
@@ -59,12 +60,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.5.201907311248"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.tpd
index a1f5ee9..c037635 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -46,7 +47,7 @@
 	org.mortbay.jetty.server
 }
 
-location "http://download.eclipse.org/sphinx/releases/0.8.x" {
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
 	org.eclipse.sphinx.sdk.feature.group
 }
 
@@ -56,9 +57,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.target b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.target
index 24e8367..cc6c9e9 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.target
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="eclipse-capra-e4.9" sequenceNumber="1565593910">
+<target name="eclipse-capra-e4.9" sequenceNumber="1593287320">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.sdk.feature.group" version="9.5.3.201809121146"/>
@@ -16,6 +16,7 @@
       <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.16.0.v20180403-2055"/>
       <unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
       <unit id="org.eclipse.xtend.sdk.feature.group" version="2.15.0.v20180916-1232"/>
+      <unit id="org.eclipse.pde.source.feature.group" version="3.13.200.v20180906-0745"/>
       <repository id="eclipse-2018-09" location="http://download.eclipse.org/releases/2018-09/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
@@ -50,8 +51,8 @@
       <repository id="eclipse-orbit-mars2" location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.8.1.201409171422"/>
-      <repository location="http://download.eclipse.org/sphinx/releases/0.8.x"/>
+      <unit id="org.eclipse.sphinx.sdk.feature.group" version="0.9.2.201601200932"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.9.x"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
@@ -59,12 +60,20 @@
       <repository location="http://download.eclipse.org/rmf/updates/releases"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
       <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.5.201906282321"/>
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.6.3.202005292234"/>
       <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
     </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.5.201907311248"/>
+      <repository id="APP4MC" location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/"/>
+    </location>
+    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
+      <unit id="I201709292011.Core" version="1.0.0.07I-cLTz768IE7AY7gAeAOG9"/>
+      <repository id="EASE" location="http://download.eclipse.org/ease/update/release"/>
+    </location>
   </locations>
 </target>
diff --git a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.tpd b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.tpd
index 31b435f..168e664 100644
--- a/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.tpd
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.tpd
@@ -13,6 +13,7 @@
 	org.eclipse.mylyn.hudson.feature.group
 	org.eclipse.gef.sdk.feature.group
 	org.eclipse.xtend.sdk.feature.group
+	org.eclipse.pde.source.feature.group
 }
 
 location "http://download.eclipse.org/tools/gef/gef4/updates/releases" eclipse-gef4 {
@@ -46,7 +47,7 @@
 	org.mortbay.jetty.server
 }
 
-location "http://download.eclipse.org/sphinx/releases/0.8.x" {
+location "http://download.eclipse.org/sphinx/releases/0.9.x" {
 	org.eclipse.sphinx.sdk.feature.group
 }
 
@@ -56,9 +57,17 @@
 }
 
 location "http://hallvard.github.io/plantuml/" plantuml {
-	net.sourceforge.plantuml.feature.feature.group 1.1.23
+	net.sourceforge.plantuml.feature.feature.group 1.1.24
 }
 
 location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
 	de.ovgu.featureide.featuremodeling.feature.group 3.5.4
+}
+
+location "http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/" APP4MC {
+	org.eclipse.app4mc.platform.sdk.feature.group
+}
+
+location "http://download.eclipse.org/ease/update/release" EASE {
+	I201709292011.Core
 }
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target b/releng/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target
index 3d2dc90..38f29e0 100644
--- a/releng/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target
+++ b/releng/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Neon" sequenceNumber="61">
+<?pde version="3.8"?>
+<target name="Neon" sequenceNumber="77">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
 <unit id="org.eclipse.gef4.common.sdk.feature.group" version="0.0.0"/>
@@ -40,9 +41,9 @@
 <unit id="org.eclipse.mylyn_feature.feature.group" version="3.21.0.v20160914-0252"/>
 <unit id="org.eclipse.mylyn.hudson.feature.group" version="1.13.0.v20160806-1446"/>
 <unit id="org.eclipse.emf.sdk.feature.group" version="2.12.0.v20160526-0356"/>
-<unit id="org.eclipse.xtext.sdk.feature.group" version="2.10.0.v201605250459"/>
 <unit id="org.eclipse.zest.sdk.feature.group" version="1.7.0.201606061308"/>
 <unit id="org.eclipse.mylyn.trac_feature.feature.group" version="3.21.0.v20160630-2019"/>
+<unit id="org.eclipse.pde.source.feature.group" version="3.12.3.v20170301-0400"/>
 <repository location="http://download.eclipse.org/releases/neon"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
@@ -60,11 +61,29 @@
 <unit id="ch.qos.logback.slf4j" version="1.0.7.v201505121915"/>
 <unit id="org.apache.poi" version="3.9.0.v201405241750"/>
 <unit id="com.fasterxml.jackson.core.jackson-core" version="2.5.0.v201504151636"/>
+<unit id="javax.xml.bind" version="2.2.0.v201105210648"/>
 <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository"/>
 </location>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+<unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.24"/>
 <repository location="http://hallvard.github.io/plantuml/"/>
 </location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<repository location="http://download.eclipse.org/ease/update/release"/>
+<unit id="org.eclipse.ease.feature.feature.group" version="0.6.0.I201802271533"/>
+<unit id="org.eclipse.ease.ui.feature.feature.group" version="0.6.0.I201804241621"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<repository location="http://download.eclipse.org/app4mc/updatesites/releases/0.9.5/"/>
+<unit id="org.eclipse.app4mc.platform.sdk.feature.group" version="0.9.5.201907311248"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<repository location="http://download.eclipse.org/tools/orbit/R-builds/R20170307180635/repository"/>
+<unit id="org.apache.commons.math3" version="3.5.0.v20160301-1110"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<repository location="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/"/>
+<unit id="org.eclipse.xtext.sdk.feature.group" version="2.15.0.v20180916-1232"/>
+</location>
 </locations>
-</target>
+</target>
\ No newline at end of file
diff --git a/releng/org.eclipse.capra.releng.target/pom.xml b/releng/org.eclipse.capra.releng.target/pom.xml
index 7db4f0c..e65ea84 100644
--- a/releng/org.eclipse.capra.releng.target/pom.xml
+++ b/releng/org.eclipse.capra.releng.target/pom.xml
@@ -16,11 +16,11 @@
     <relativePath>../../pom.xml</relativePath>
     <groupId>org.eclipse.capra</groupId>
     <artifactId>parent</artifactId>
-    <version>0.7.2-SNAPSHOT</version>
+    <version>0.8.1-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.capra</groupId>
   <artifactId>org.eclipse.capra.releng.target</artifactId>
   <packaging>eclipse-target-definition</packaging>
   <name>Eclipse Capra Target Definitions</name>
-  <version>0.7.2-SNAPSHOT</version>
+  <version>0.8.1-SNAPSHOT</version>
 </project>
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
index de36b79..81e31fd 100644
--- a/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.cdt.tests
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Fragment-Host: org.eclipse.capra.handler.cdt
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.resources,
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/pom.xml b/tests/org.eclipse.capra.handler.cdt.tests/pom.xml
index b0b453f..c4d0d39 100644
--- a/tests/org.eclipse.capra.handler.cdt.tests/pom.xml
+++ b/tests/org.eclipse.capra.handler.cdt.tests/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>org.eclipse.capra.handler.cdt.tests</artifactId>
diff --git a/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF
index c228c70..3b745d1 100644
--- a/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.featureide.tests/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.featureide.tests
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: 
  org.eclipse.capra.core,
  org.eclipse.capra.generic.tracemodel,
diff --git a/tests/org.eclipse.capra.handler.featureide.tests/pom.xml b/tests/org.eclipse.capra.handler.featureide.tests/pom.xml
index 39a9cf5..c9bc48e 100644
--- a/tests/org.eclipse.capra.handler.featureide.tests/pom.xml
+++ b/tests/org.eclipse.capra.handler.featureide.tests/pom.xml
@@ -15,7 +15,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>org.eclipse.capra.handler.featureide.tests</artifactId>
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
index a9d5a07..006a285 100644
--- a/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.jdt.tests
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Fragment-Host: org.eclipse.capra.handler.jdt
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.junit,
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/pom.xml b/tests/org.eclipse.capra.handler.jdt.tests/pom.xml
index 779f63c..6ec4a08 100644
--- a/tests/org.eclipse.capra.handler.jdt.tests/pom.xml
+++ b/tests/org.eclipse.capra.handler.jdt.tests/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>org.eclipse.capra.handler.jdt.tests</artifactId>
diff --git a/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
index fbc1aaf..36a7957 100644
--- a/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.handler.uml.tests
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Require-Bundle: 
  org.eclipse.capra.core,
  org.eclipse.capra.generic.tracemodel,
@@ -17,6 +17,7 @@
  org.eclipse.ui,
  org.eclipse.uml2.uml,
  org.junit,
- ch.qos.logback.slf4j;resolution:=optional
+ ch.qos.logback.slf4j;resolution:=optional,
+ net.sourceforge.plantuml.eclipse;bundle-version="1.1.24"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.capra.handler.uml.tests;x-internal:=true
diff --git a/tests/org.eclipse.capra.handler.uml.tests/pom.xml b/tests/org.eclipse.capra.handler.uml.tests/pom.xml
index 87c7405..d0c025a 100644
--- a/tests/org.eclipse.capra.handler.uml.tests/pom.xml
+++ b/tests/org.eclipse.capra.handler.uml.tests/pom.xml
@@ -15,7 +15,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>org.eclipse.capra.handler.uml.tests</artifactId>
diff --git a/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
index 9e1ec77..3ae4ace 100644
--- a/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
+++ b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
@@ -34,6 +35,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.uml2.uml.Class;
 import org.eclipse.uml2.uml.Model;
 import org.junit.Before;
@@ -119,7 +121,7 @@
 		ToggleTransitivityHandler.setTraceViewTransitive(false);
 		DisplayInternalLinksHandler.showInternalLinks(true);
 		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
-		String directlyConnectedElements = provider.getDiagramText(selection);
+		String directlyConnectedElements = provider.getDiagramText(selection, Optional.<IWorkbenchPart>empty());
 		assertTrue(directlyConnectedElements.equals(EXPECTED_TEXT_FOR_INTERNAL_LINKS));
 
 	}
diff --git a/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
index 36947d1..b75e66f 100644
--- a/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Name: %Bundle-Name
 Bundle-Vendor: %Bundle-Vendor
 Bundle-SymbolicName: org.eclipse.capra.testsuite;singleton:=true
-Bundle-Version: 0.7.2.qualifier
+Bundle-Version: 0.8.1.qualifier
 Export-Package: org.eclipse.capra.testsuite,
  org.eclipse.capra.testsuite.extension;x-internal:=true,
  org.eclipse.capra.testsuite.notification;x-internal:=true
@@ -17,6 +17,7 @@
  org.eclipse.emf.edit,
  org.eclipse.emf.ecore,
  org.eclipse.emf.ecore.editor,
+ org.eclipse.ui,
  org.eclipse.ui.workbench,
  org.eclipse.ui.ide,
  org.eclipse.cdt.core,
@@ -39,7 +40,8 @@
  org.eclipse.capra.handler.file,
  org.eclipse.capra.ui,
  org.eclipse.capra.ui.notification,
- ch.qos.logback.slf4j;resolution:=optional
+ ch.qos.logback.slf4j;resolution:=optional,
+ net.sourceforge.plantuml.eclipse;bundle-version="1.1.24"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.eclipse.swt.dnd,
  org.slf4j
diff --git a/tests/org.eclipse.capra.testsuite/pom.xml b/tests/org.eclipse.capra.testsuite/pom.xml
index 684f4c1..7051bfa 100644
--- a/tests/org.eclipse.capra.testsuite/pom.xml
+++ b/tests/org.eclipse.capra.testsuite/pom.xml
@@ -18,7 +18,7 @@
 		<relativePath>../../pom.xml</relativePath>
 		<groupId>org.eclipse.capra</groupId>
 		<artifactId>parent</artifactId>
-		<version>0.7.2-SNAPSHOT</version>
+		<version>0.8.1-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>org.eclipse.capra.testsuite</artifactId>
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
index 6fc4109..181d76c 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
@@ -33,6 +33,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
@@ -51,6 +52,7 @@
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.ui.IWorkbenchPart;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -71,18 +73,22 @@
 	private static final String TEST_PROJECT_NAME_C = "TestProject_C";
 	private static final String TEST_C_CLASS = "CClass.c";
 
-	private static final String EXPECTED_TEXT_FOR_DIRECT_CONNECTIONS = "@startuml\n"
-			+ "object \"A : EClass\" as o0 #pink\n" + "object \"B : EClass\" as o1\n"
-			+ "o0--o1: A : EClass B : EClass : RelatedTo\n" + "@enduml\n";
+	private static final String LINE_SEPARATOR = System.lineSeparator();
 
-	private static final String EXPECTED_TEXT_FOR_TRANSITIVE_CONNECTIONS = "@startuml\n"
-			+ "object \"A : EClass\" as o0 #pink\n" + "object \"B : EClass\" as o1\n" + "object \"C : EClass\" as o2\n"
-			+ "o0--o1: A : EClass B : EClass : RelatedTo\n" + "o1--o2: B : EClass C : EClass : RelatedTo\n"
-			+ "@enduml\n";
-	private static final String EXPECTED_TEXT_FOR_GOTO_LINKS = "@startuml\n"
-			+ "object \"TestClass [[platform:/resource/TestProject_java/src/org/eclipse/capra/test/TestClass.java#org.eclipse.capra.test.TestClass (Go to)]]\" as o0 #pink\n"
-			+ "object \"CClass.c [[platform:/resource/TestProject_C/CClass.c#CClass.c (Go to)]]\" as o1\n"
-			+ "o0--o1: TestClass CClass.c : RelatedTo\n" + "@enduml\n";
+	private static final String EXPECTED_TEXT_FOR_DIRECT_CONNECTIONS = "@startuml" + LINE_SEPARATOR
+			+ "object \"A : EClass\" as o0 #pink" + LINE_SEPARATOR + "object \"B : EClass\" as o1" + LINE_SEPARATOR
+			+ "o0--o1: A : EClass B : EClass : RelatedTo" + LINE_SEPARATOR + "@enduml" + LINE_SEPARATOR;
+
+	private static final String EXPECTED_TEXT_FOR_TRANSITIVE_CONNECTIONS = "@startuml" + LINE_SEPARATOR
+			+ "object \"A : EClass\" as o0 #pink" + LINE_SEPARATOR + "object \"B : EClass\" as o1" + LINE_SEPARATOR
+			+ "object \"C : EClass\" as o2" + LINE_SEPARATOR + "o0--o1: A : EClass B : EClass : RelatedTo"
+			+ LINE_SEPARATOR + "o1--o2: B : EClass C : EClass : RelatedTo" + LINE_SEPARATOR + "@enduml"
+			+ LINE_SEPARATOR;
+	private static final String EXPECTED_TEXT_FOR_GOTO_LINKS = "@startuml" + LINE_SEPARATOR
+			+ "object \"TestClass [[platform:/resource/TestProject_java/src/org/eclipse/capra/test/TestClass.java#org.eclipse.capra.test.TestClass (Go to)]]\" as o0 #pink"
+			+ LINE_SEPARATOR
+			+ "object \"CClass.c [[platform:/resource/TestProject_C/CClass.c#CClass.c (Go to)]]\" as o1"
+			+ LINE_SEPARATOR + "o0--o1: TestClass CClass.c : RelatedTo" + LINE_SEPARATOR + "@enduml" + LINE_SEPARATOR;
 
 	@Before
 	public void init() throws CoreException {
@@ -153,12 +159,12 @@
 		// Test directly connected Elements
 		ToggleTransitivityHandler.setTraceViewTransitive(false);
 		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
-		String DirectlyConnectedElements = provider.getDiagramText(selection);
+		String DirectlyConnectedElements = provider.getDiagramText(selection, Optional.<IWorkbenchPart>empty());
 		assertTrue(DirectlyConnectedElements.equals(EXPECTED_TEXT_FOR_DIRECT_CONNECTIONS));
 
 		// Test transitively connected Elements
 		ToggleTransitivityHandler.setTraceViewTransitive(true);
-		String transitivelysConnectedElements = provider.getDiagramText(selection);
+		String transitivelysConnectedElements = provider.getDiagramText(selection, Optional.<IWorkbenchPart>empty());
 		assertTrue(transitivelysConnectedElements.equals(EXPECTED_TEXT_FOR_TRANSITIVE_CONNECTIONS));
 
 	}
@@ -195,7 +201,7 @@
 		// Test directly connected Elements
 		ToggleTransitivityHandler.setTraceViewTransitive(false);
 		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
-		String directlyConnectedElements = provider.getDiagramText(selection);
+		String directlyConnectedElements = provider.getDiagramText(selection, Optional.<IWorkbenchPart>empty());
 		assertTrue(directlyConnectedElements.equals(EXPECTED_TEXT_FOR_GOTO_LINKS));
 
 	}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java
new file mode 100644
index 0000000..ebb2c34
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceHelper.java
@@ -0,0 +1,162 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2019 Chalmers | University of Gothenburg, rt-labs and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *  
+ * SPDX-License-Identifier: EPL-2.0
+ *  
+ * Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *      Chalmers | University of Gothenburg - additional features, updated API
+ *******************************************************************************/
+package org.eclipse.capra.testsuite;
+
+import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsuite.TestHelper.createEmptyFileInProject;
+import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.core.helpers.TraceHelper;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * A class to test the helper methods in the {@link TraceHelper} class.
+ * 
+ * @author Salome Maro
+ *
+ */
+
+public class TestTraceHelper {
+
+	private static final String PROJECT_NAME = "TestProject";
+	private static final String FILE_A = "FILE_A";
+	private static final String FILE_B = "FILE_B";
+	private static final String FILE_C = "FILE_C";
+	private static final String FILE_D = "FILE_D";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	/**
+	 * Tests for the getTraces(List<EObject> artifacts) method.
+	 * 
+	 * @throws CoreException
+	 * @throws BuildException
+	 */
+	@Test
+	public void testgetTracesMethod() throws CoreException, BuildException {
+
+		// create a simple project
+		createSimpleProject(PROJECT_NAME);
+		// create some files in the project
+		IFile fileA = createEmptyFileInProject(FILE_A, PROJECT_NAME);
+		IFile fileB = createEmptyFileInProject(FILE_B, PROJECT_NAME);
+		IFile fileC = createEmptyFileInProject(FILE_C, PROJECT_NAME);
+		IFile fileD = createEmptyFileInProject(FILE_D, PROJECT_NAME);
+
+		// create a trace link between File A and B
+		SelectionView.getOpenedView().dropToSelection(fileA);
+		SelectionView.getOpenedView().dropToSelection(fileB);
+		assertFalse(thereIsATraceBetween(fileA, fileB));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(fileA, fileB));
+
+		// clear selection
+		SelectionView.getOpenedView().clearSelection();
+
+		// create a trace link between File B and C
+		SelectionView.getOpenedView().dropToSelection(fileB);
+		SelectionView.getOpenedView().dropToSelection(fileC);
+		assertFalse(thereIsATraceBetween(fileB, fileC));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(fileB, fileC));
+
+		// clear selection
+		SelectionView.getOpenedView().clearSelection();
+
+		// create a list with wrappers of File A and B
+		ResourceSet resourceSet = new ResourceSetImpl();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		List<Object> artifactsA_B = new ArrayList<Object>(Arrays.asList(fileA, fileB));
+
+		List<EObject> A_B_wrappers = artifactHelper.createWrappers(artifactsA_B);
+
+		// get trace link related to fileA and file B
+		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
+		TraceHelper traceHelper = new TraceHelper(traceModel);
+		List<Connection> traceLinks = traceHelper.getTraces(A_B_wrappers);
+
+		// check that only one link is returned
+		assertTrue(traceLinks.size() == 1);
+		// check that the trace link returned is between file A and file B
+		assertTrue(traceLinks.get(0).getOrigin().equals(A_B_wrappers.get(0)));
+		assertTrue(traceLinks.get(0).getTargets().get(0).equals(A_B_wrappers.get(1)));
+
+		// create a list with wrappers of file A, B and C
+		List<Object> artifactsA_B_C = new ArrayList<Object>(Arrays.asList(fileA, fileB, fileC));
+
+		// create wrappers
+		List<EObject> A_B_Cwrappers = artifactHelper.createWrappers(artifactsA_B_C);
+		// get trace links related to file A, B and C
+		List<Connection> traceLinksA_B_C = traceHelper.getTraces(A_B_Cwrappers);
+
+		// check that only two links are returned
+		assertTrue(traceLinksA_B_C.size() == 2);
+		// check that the first link is between file A and B
+		assertTrue(traceLinksA_B_C.get(0).getOrigin().equals(A_B_wrappers.get(0)));
+		assertTrue(traceLinksA_B_C.get(0).getTargets().get(0).equals(A_B_wrappers.get(1)));
+		// check that the second link is between file B and C
+		assertTrue(traceLinksA_B_C.get(1).getOrigin().equals(A_B_Cwrappers.get(1)));
+		assertTrue(traceLinksA_B_C.get(1).getTargets().get(0).equals(A_B_Cwrappers.get(2)));
+
+		// Testing edge cases
+
+		// Null sent to the method
+		List<Connection> null_connections = traceHelper.getTraces(null);
+		// Check that an empty list is returned.
+		assertTrue(null_connections.size() == 0);
+
+		// An element that is not in the trace model
+		List<EObject> artifact_D = new ArrayList<EObject>(Arrays.asList(artifactHelper.createWrapper(fileD)));
+		List<Connection> traceLinksD = traceHelper.getTraces(artifact_D);
+		// Check that an empty list is returned
+		assertTrue(traceLinksD.size() == 0);
+
+		// One element in the traceModel and one not in the trace model
+		List<Object> artifactsC_D = new ArrayList<Object>(Arrays.asList(fileC, fileD));
+		List<EObject> C_D_wrappers = artifactHelper.createWrappers(artifactsC_D);
+		// get trace links related to file C and D
+		List<Connection> traceLinksC_D = traceHelper.getTraces(C_D_wrappers);
+		// check that the list of links is null
+		assertTrue(traceLinksC_D.size() == 0);
+	}
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
index 903f252..cd729af 100644
--- a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
@@ -31,11 +31,13 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
 import org.eclipse.capra.core.helpers.ExtensionPointHelper;
 import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
 import org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler;
+import org.eclipse.capra.ui.plantuml.ToggleDisplayGraphHandler;
 import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
 import org.eclipse.capra.ui.views.SelectionView;
 import org.eclipse.core.resources.IProject;
@@ -45,6 +47,7 @@
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.ui.IWorkbenchPart;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -63,16 +66,26 @@
 
 	private static final String TEST_PROJECT_NAME = "TestProject";
 
-	private static final String EXPECTED_TEXT_FOR_SELECTED_PACKAGES_DIRECT = "@startuml\n" + "salt\n" + "{#\n"
-			+ ".|modelB : EPackage\n" + "modelA : EPackage |X\n" + "}\n" + "\n" + "@enduml\n";
+	private static final String LINE_SEPARATOR = System.lineSeparator();
 
-	private static final String EXPECTED_TEXT_FOR_SELECTED_PACKAGES_TRANSITIVE = "@startuml\n" + "salt\n" + "{#\n"
-			+ ".|B : EClass|BB : EClass|modelB : EPackage\n" + "A : EClass |X |. |.\n" + "AA : EClass |. |X |.\n"
-			+ "modelA : EPackage |. |. |X\n" + "}\n" + "\n" + "@enduml\n";
+	private static final String EXPECTED_TEXT_FOR_SELECTED_PACKAGES_DIRECT = "@startuml" + LINE_SEPARATOR + "salt"
+			+ LINE_SEPARATOR + "{#" + LINE_SEPARATOR + ".|modelA : EPackage|modelB : EPackage" + LINE_SEPARATOR
+			+ "modelA : EPackage |. |X" + LINE_SEPARATOR + "modelB : EPackage |X |." + LINE_SEPARATOR + "}"
+			+ LINE_SEPARATOR + LINE_SEPARATOR + "@enduml" + LINE_SEPARATOR;
 
-	private static final String EXPECTED_TEXT_FOR_SELECTED_CLASSES = "@startuml\n" + "salt\n" + "{#\n"
-			+ ".|A : EClass|B : EClass|AA : EClass|BB : EClass\n" + "A : EClass |. |X |. |.\n" + "B : EClass |X |. |. |.\n"
-			+ "AA : EClass |. |. |. |X\n" + "BB : EClass |. |. |X |.\n" + "}\n" + "\n" + "@enduml\n";
+	private static final String EXPECTED_TEXT_FOR_SELECTED_PACKAGES_TRANSITIVE = "@startuml" + LINE_SEPARATOR + "salt"
+			+ LINE_SEPARATOR + "{#" + LINE_SEPARATOR
+			+ ".|A : EClass|AA : EClass|modelA : EPackage|B : EClass|BB : EClass|modelB : EPackage" + LINE_SEPARATOR
+			+ "A : EClass |. |. |. |X |. |." + LINE_SEPARATOR + "AA : EClass |. |. |. |. |X |." + LINE_SEPARATOR
+			+ "modelA : EPackage |. |. |. |. |. |X" + LINE_SEPARATOR + "B : EClass |X |. |. |. |. |." + LINE_SEPARATOR
+			+ "BB : EClass |. |X |. |. |. |." + LINE_SEPARATOR + "modelB : EPackage |. |. |X |. |. |." + LINE_SEPARATOR
+			+ "}" + LINE_SEPARATOR + LINE_SEPARATOR + "@enduml" + LINE_SEPARATOR;
+
+	private static final String EXPECTED_TEXT_FOR_SELECTED_CLASSES = "@startuml" + LINE_SEPARATOR + "salt"
+			+ LINE_SEPARATOR + "{#" + LINE_SEPARATOR + ".|A : EClass|B : EClass|AA : EClass|BB : EClass"
+			+ LINE_SEPARATOR + "A : EClass |. |X |. |." + LINE_SEPARATOR + "B : EClass |X |. |. |." + LINE_SEPARATOR
+			+ "AA : EClass |. |. |. |X" + LINE_SEPARATOR + "BB : EClass |. |. |X |." + LINE_SEPARATOR + "}"
+			+ LINE_SEPARATOR + LINE_SEPARATOR + "@enduml" + LINE_SEPARATOR;
 
 	@Before
 	public void init() throws CoreException {
@@ -167,13 +180,16 @@
 
 		// Test directly connected Elements
 		ToggleTransitivityHandler.setTraceViewTransitive(false);
+		ToggleDisplayGraphHandler.setDisplayGraph(false);
 		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
-		String plantUMLTextForSelectedPackages_Direct = provider.getDiagramText(selectedPackages);
+		String plantUMLTextForSelectedPackages_Direct = provider.getDiagramText(selectedPackages,
+				Optional.<IWorkbenchPart>empty());
 		assertTrue(plantUMLTextForSelectedPackages_Direct.equals(EXPECTED_TEXT_FOR_SELECTED_PACKAGES_DIRECT));
 
 		// Test transitively connected Elements
 		ToggleTransitivityHandler.setTraceViewTransitive(true);
-		String plantUMLTextForSelectedPackages_Transitive = provider.getDiagramText(selectedPackages);
+		String plantUMLTextForSelectedPackages_Transitive = provider.getDiagramText(selectedPackages,
+				Optional.<IWorkbenchPart>empty());
 		assertTrue(plantUMLTextForSelectedPackages_Transitive.equals(EXPECTED_TEXT_FOR_SELECTED_PACKAGES_TRANSITIVE));
 
 		// test multiple classes selected
@@ -183,7 +199,8 @@
 		selectedClasses.add(_AA);
 		selectedClasses.add(_BB);
 
-		String plantUMLTextForSelectedClasses = provider.getDiagramText(selectedClasses);
+		String plantUMLTextForSelectedClasses = provider.getDiagramText(selectedClasses,
+				Optional.<IWorkbenchPart>empty());
 		assertTrue(plantUMLTextForSelectedClasses.equals(EXPECTED_TEXT_FOR_SELECTED_CLASSES));
 	}