Merge branch 'develop'
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 7a9fc07..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-sudo: false  
-language: java    
-cache:  
-  directories:  
-    - $HOME/.m2
-script: mvn clean verify -DskipTests
-jdk:
-- oraclejdk8
diff --git a/CapraArchitecture.png b/CapraArchitecture.png
deleted file mode 100644
index 9e60a1b..0000000
--- a/CapraArchitecture.png
+++ /dev/null
Binary files differ
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e23ece2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    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.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  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.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"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.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"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.
+
+"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.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"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.
+
+"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.
+
+2. GRANT OF RIGHTS
+
+  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.
+
+  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.
+
+  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.
+
+  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.
+
+  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).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  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
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     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;
+
+     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;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  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
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+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.
+
+4. COMMERCIAL DISTRIBUTION
+
+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.
+
+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.
+
+5. NO WARRANTY
+
+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.
+
+6. DISCLAIMER OF LIABILITY
+
+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.
+
+7. GENERAL
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"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}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  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.
+
+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/README.md b/README.md
index 13616d4..0bc0f10 100644
--- a/README.md
+++ b/README.md
@@ -1,40 +1,35 @@
-# Capra - A Traceability Management Tool
+# Eclipse Capra - A Traceability Management Tool
 
 ## Background
-Capra is a configurable and extendable traceability management tool. It is created in the context of an ITEA funded project called AMALTHEA4Public whose main aim is to develop a platform that will improve the development of embedded multicore and many core systems.
+Eclipse Capra is a configurable and extendable traceability management tool. Eclipse Capra is a traceability management tool. It allows the creation of trace links between arbitrary artefacts, provides features to edit them and keep them consistent, and visualise the relationships between them. This includes traceability matrices and graph visualisations that are helpful for reporting and change impact analysis.
 
 ## How it works
 
-Capra uses the Eclipse Modelling Framework (EMF) as its base technology and stores the traceability model as an EMF model. The traceability metamodel is not fixed and can be defined by the user. It relies on the Eclipse Extension mechanism and provides an extension point for artifacts types to be supported. To add a new type of artifact, one simply needs to add an extension to this extension point and implement the provided interfaces.
+In essence, Eclipse Capra allows the creation of trace links between arbitrary artefacts, as long as an adapter for these artefacts is available. This way, a trace link can be created between EMF model elements, source code files supported by the Eclipse Platform (e.g., Java, C, Python), or tasks from an issue tracking system supported by Eclipse Mylyn. External artefacts for which the Eclipse Platform does not offer built-in support can also be linked if a fitting adapter is provided. Built-in capabilities allow linking to Office documents and documents hosted by Google Docs. Through its EMF adapter, Capra currently supports elements from UML, SysML, AADL, EAST-ADL, or AUTOSAR models created in, e.g., Eclipse Papyrus, Eclipse EATOP, or ARTOP. The same adapter allows tracing from and to requirements modelled in ProR. Furthermore, adapters for test case executions managed by a continuous integration server like Hudson or Jenkins can be traced to.
 
+Once these trace links are established, Capra offers features to manage them. If a model element that is linked to is moved, e.g., Capra will notify the user and allow changing the link accordingly. The same support is given for model elements that are deleted or renamed. Quick fixes are available to fix most isses in a semi-automatic fashion.
 
-# Installing Capra from Sourcecode
+Capra also offers a visualisation of the trace links that allows developers to traverse the relationships established through the links and understand how the different artefacts are connected. This is helpful when assessing the impact a change has (e.g., which design artefacts need to be adapted when a requirement has changed?) or when trying to understand how the design artefacts in a complex development project are connected. In addition, Capra can display traceability matrices, as requested by standards like ISO 26262.
 
-## Pre-requisites
+The tool is highly extensible. The meta-model used for the traceability links can easily be adapted to a specific end-user's needs. Capra's modular architecture allows exchanging the persistence, the visualisation, and the management modules easily. New adapters for additional artefacts can easily be added without re-compilation. This allows end-users to customise almost every aspect of the tool if needed. At the same time, we provide sensible defaults that will allow the majority of users to use Capra out of the box without extensive configuration.
 
-Before downloading and using Capra, download Eclipse Modelling Environment and make sure you have the listed dependencies installed.
+## Building the Eclipse Capra source distribution
 
-* [Xcore](https://wiki.eclipse.org/Xcore): Install through Eclipse's "Install new software..." feature
-* [Xtend](https://eclipse.org/xtend/): Install through the Eclipse Market Place
+Please note that the `master` branch of Eclipse Capra always contains the latest stable release. All development takes place in the `develop` branch, following a [gitflow](http://nvie.com/posts/a-successful-git-branching-model/) model.
 
-## Get the source code
+To build Eclipse Capra, follow these steps:
 
 * Open your Eclipse Environment
 * Go to File --> Import and select Git --> Projects from Git
-* Use the [Capra Git repository](https://git.eclipse.org/r/capra/org.eclipse.capra) and import all available projects to your workspace. Information about the developer resources and the source code repositories is available at [the project website](https://projects.eclipse.org/projects/modeling.capra/developer).
-* All dependencies are listed in the target platform file org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target. Set it as the active target platform by opening it and clicking on "Set as Target Platform" in the upper right corner. Eclipse will now download all dependencies. Note that this will take a while. Check the progress in the lower right corner.
+* Clone the [Eclipse Capra Git repository](https://git.eclipse.org/c/capra/org.eclipse.capra) and import all available projects to your workspace. Information about the developer resources and the source code repositories is available at [the project website](https://projects.eclipse.org/projects/modeling.capra/developer).
+* Make sure to switch to the *develop* branch if you want to use the current version of Eclipse Capra
+* To make sure Eclipse can resolve all dependencies, set the correct target platform file for your version of Eclipse. All target platform files can be found in `releng/org.eclipse.capra.releng.target`. Open the correct file and set it as the active target platform by opening it and clicking on "Set as Target Platform" in the upper right corner. Eclipse will now download all dependencies. Note that this will take a while. Check the progress in the lower right corner.
 * Build your workspace
 * Make sure that all the projects have no errors.
-* Click on Run --> Run Configurations and create a new Eclipse Application Configuration
-* Select your running workspace
-* Click Finish
-* Once the new workspace opens, create or import projects that you want to use to create traceability links
-* Go to perspectives and switch to the Capra perspective
-* Now you can create traceability links as described in [Creating Traceability Links](#create-trace-links).
 
 If compilation errors occur during the first build, check if any of the dependencies above are missing. Cleaning all binaries also often helps resolve issues.
 
-## Run Capra
+To start Eclipse Capra, follow these steps:
 
 * Make sure that all the projects have no errors.
 * Click on Run --> Run Configurations and create a new Eclipse Application Configuration
@@ -42,98 +37,17 @@
 * Click "Apply", then "Run"
 * Once the new workspace opens, create or import projects that you want to  use to create traceability links
 * Go to perspectives and switch to the Capra perspective
-* Follow [this video](https://www.dropbox.com/s/9p76ebqvax16uc1/HVAC-Capra%20Incomplete1.mov?dl=0) to create and visualize traceability links  
-**NOTE:** For better resolution, download the video first. 
+* Follow [this video](https://youtu.be/XRtLs5OT_yM) to create and visualize traceability links.
 
+## More information about Eclipse Capra
 
+The Eclipse Capra team maintains a number of wiki page that describe how to install and run Eclipse Capra from source code, how to extend Eclipse Capra with a custom traceability model, how to contribute to Eclipse Capra, and how to prepare a release. You can find these pages here:
 
-# Contributing to Capra
+ * https://wiki.eclipse.org/Capra
+ * https://wiki.eclipse.org/Capra/CustomTraceabilityMetaModel
+ * https://wiki.eclipse.org/Capra/Contributing
+ * https://wiki.eclipse.org/Capra/PreparingForRelease
 
-## Becoming a member of the Eclipse Community
+## License
 
-In order to use the Eclipse development infrastructure and to contribute to Capra (and other Eclipse projects), it is necessary to create an [Eclipse account](https://dev.eclipse.org/site_login/createaccount.php). With this account, you will be able to log in to the different services (such as [Bugzilla](https://bugs.eclipse.org/bugs/describecomponents.cgi?product=Capra), the [Eclipse Wiki](https://wiki.eclipse.org/Main_Page), or [Hudson](https://hudson.eclipse.org/capra/)) and push code changes to [Gerrit](https://git.eclipse.org/r/#/admin/projects/capra/org.eclipse.capra).
-
-After you have created the account, you need to sign the [Eclipse Committer Agreement](https://eclipse.org/legal/#CommitterAgreements) (ECA). Depending on whether you work on your own time or for a company, different conditions apply. Please familiarise yourself with the legal issues, ask your employer for help if required, and then sign the ECA [here](https://dev.eclipse.org/site_login/myaccount.php#open_tab_cla).
-
-## Cloning from Git/Gerrit
-
-Instead of using the Git repository listed above, use the Gerrit repository. You can copy the SSH or HTTPS links from the [Capra Gerrit page](https://git.eclipse.org/r/#/admin/projects/capra/org.eclipse.capra). This will allow you to push your changes to Gerrit where the project committers can review them before adding them to the codebase.
-
-* Switch to the Git Perspective, select Clone a Git Repository (icon with a blue arrow), then select Gerrit and follow the wizard.
-* Import all projects into your work space
-* Create a branch based on the `develop` branch. All development should be based on this branch, following the [GitFlow](http://nvie.com/posts/a-successful-git-branching-model/) approach. Your local changes should go into your own branch. We suggest to use the format `<username>/feature/<feature-name>`. Instead of `feature`, other identifiers such as `fix` can be used.
-
-## Sharing your Idea with the Community
-
-We keep track of the features for Capra in our [Bugzilla](https://bugs.eclipse.org/bugs/describecomponents.cgi?product=Capra). If you plan to contribute your own features, please open a bug in the correct component there. The bug summary should contain the "[feature]" keyword so we know that this is not indeed a bug report. Please provide a short summary and a description of what you are doing. Use the comments of the bug to describe your progress. Other members of the community might engage you for discussions, so please take their opinions into account and react to their suggestions and feedback.
-
-## Building and Testing
-
-Capra uses Maven/Tycho. To check if your changes work, run maven in the root folder:
-
-    mvn clean verify
-
-This will create binaries for Capra and run all tests. Code should only be committed if all tests passed!
-
-To run Capra from within Eclipse, see the instructions above.
-
-## Before committing
-
-Please make sure that *all* points in the following checklist are fullfilled before committing your work to a Capra repository:
-
-* The code is formatted according to the built-in Eclipse code formatting rules.
-* All classes and all public methods are documented.
-* Each source code file has a copyright header (see below).
-* The imports are organised.
-
-Organisation of imports and code formatting can be automated by selecting them as save actions for the Java editor in the Eclipse preferences.
-
-## Adding new source files
-
-It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.
-
-Install the [Eclipse Releng Tools](https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool). They contain the copyright tool. Use the following copyright header:
-
-
-    Copyright (c) ${date} 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-    
-    Contributors:
-       Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-
-The Contributors entry can be replaced with the appropriate names. Use "Fix copyrights" from the context menu to add the copyrights to all relevant files in a project or folder.
-
-## Pushing changes to Gerrit
-
-If all pre-requisites listed above are fulfilled, the code can be pushed to Gerrit. Please note that Gerrit combines several commits into one change that will show up using the commit message of the last commit. Make sure that this commit message actually describes the changes you are pushing. Optionally, you can squash all commits into one before pushing to Gerrit.
-
-These are the steps to push a change to Gerrit:
-
-* Make sure that the code compiles and the tests run through by running `mvn clean verify` 
-* (Optional) Squash all local commits into one
-* Make sure your commit message describes the feature you contribute
-* Sign-off the commit: add a Signed-off-by footer to the commit message. If this is missing, Gerrit will not accept your push!
-* Push your changes to Gerrit. You can either do this through Eclipse or manually on the command line with a command like this: `git push ssh://<username>@git.eclipse.org:29418/capra/org.eclipse.capra.git HEAD:refs/for/develop` Please note that it is important to use the `HEAD:refs/for/develop` addition which indicates that the push is to Gerrit (`refs/for/`) and which branch the changes should be merged to (`develop`).
-
-The Sign-off needs to be in the footer of the commit message, i.e., separated from the commit message by a new line and in the same block.
-
-Once your change has been pushed to Gerrit, one of the committers in the project will review the change and Hudson will try to build your code. You will be notified about the progress by email, using the email address you used in the Signed-off-by message. If your change is accepted, it will be merged into one of the branches in the main Git repository. If there are comments or Hudson fails to build the code, you need to make the necessary changes, amend your commit, and push again.
-
-* Make the necessary local changes
-* Amend last commit via `git commit --amend`
-* Add Gerrit Change-Id to your commit message 
-
-Change-Id and sign-off both need to be in the footer.
-
-## Additional information
-
-More information about contributing code via Gerrit and how to use the Eclipse Git repositories can be found here:
-
-* A good overview of a workflow with Gerrit/Bugzilla/Hudson is provided [here](https://www.eclipse.org/community/eclipse_newsletter/2013/september/article4.php)
-* https://wiki.eclipse.org/Gerrit
-* https://wiki.eclipse.org/Development_Resources/Contributing_via_Git
-* https://wiki.eclipse.org/Stardust/Contributing_via_Gerrit
-* https://wiki.eclipse.org/CDT/contributing
\ No newline at end of file
+Eclipse Capra is licensed under [EPL 2.0](https://www.eclipse.org/legal/epl-v20.html).
\ No newline at end of file
diff --git a/org.eclipse.capra.core/.classpath b/bundles/org.eclipse.capra.core/.classpath
similarity index 100%
rename from org.eclipse.capra.core/.classpath
rename to bundles/org.eclipse.capra.core/.classpath
diff --git a/org.eclipse.capra.core/.gitignore b/bundles/org.eclipse.capra.core/.gitignore
similarity index 100%
rename from org.eclipse.capra.core/.gitignore
rename to bundles/org.eclipse.capra.core/.gitignore
diff --git a/org.eclipse.capra.core/.project b/bundles/org.eclipse.capra.core/.project
similarity index 100%
rename from org.eclipse.capra.core/.project
rename to bundles/org.eclipse.capra.core/.project
diff --git a/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..40c806e
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Core Functionality
+Bundle-SymbolicName: org.eclipse.capra.core;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.core.resources
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.capra.core.adapters,
+ org.eclipse.capra.core.handlers,
+ org.eclipse.capra.core.helpers
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.core/build.properties b/bundles/org.eclipse.capra.core/build.properties
new file mode 100644
index 0000000..a197515
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/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,\
+               schema/
diff --git a/bundles/org.eclipse.capra.core/plugin.xml b/bundles/org.eclipse.capra.core/plugin.xml
new file mode 100644
index 0000000..65571b5
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension-point id="org.eclipse.capra.configuration.traceabilityMetaModel" name="Traceability Meta-Model" schema="schema/org.eclipse.capra.configuration.traceabilityMetaModel.exsd"/>
+   <extension-point id="org.eclipse.capra.configuration.persistenceHandler" name="Trace Persistence Handler" schema="schema/org.eclipse.capra.configuration.persistenceHandler.exsd"/>
+   <extension-point id="org.eclipse.capra.configuration.artifactHandlers" name="Artifact Handlers" schema="schema/org.eclipse.capra.configuration.artifactHandlers.exsd"/>
+   <extension-point id="org.eclipse.capra.configuration.priorityHandlers" name="Priority Handlers for Artifact Handlers" schema="schema/org.eclipse.capra.configuration.priorityHandlers.exsd"/>
+   <extension-point id="org.eclipse.capra.configuration.artifactMetaModel" name="Artifact Meta-Model" schema="schema/org.eclipse.capra.configuration.artifactMetaModel.exsd"/>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.core/pom.xml b/bundles/org.eclipse.capra.core/pom.xml
new file mode 100644
index 0000000..cdefe78
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.core</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactHandlers.exsd b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactHandlers.exsd
new file mode 100644
index 0000000..5df15e9
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactHandlers.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.artifactHandlers" name="Capra Artifact Handlers"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="artifactHandler"/>
+         </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="artifactHandler">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.handlers.IArtifactHandler"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </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.core/schema/org.eclipse.capra.configuration.artifactMetaModel.exsd b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactMetaModel.exsd
new file mode 100644
index 0000000..712ec0c
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactMetaModel.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.artifactMetaModel" name="Capra Artifact Metamodel"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="ArtifactMetaModelAdapter"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <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="ArtifactMetaModelAdapter">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </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.core/schema/org.eclipse.capra.configuration.persistenceHandler.exsd b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.persistenceHandler.exsd
new file mode 100644
index 0000000..efcfd31
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.persistenceHandler.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.persistenceHandler" name="Capra Traceability Model Persistance Handler"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="persistenceHandler"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <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="persistenceHandler">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.adapters.TracePersistenceAdapter"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </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.core/schema/org.eclipse.capra.configuration.priorityHandlers.exsd b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.priorityHandlers.exsd
new file mode 100644
index 0000000..63e16c6
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.priorityHandlers.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.priorityHandlers" name="Priority Handlers for Artifact Handlers"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="PriorityHandler"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <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="PriorityHandler">
+      <complexType>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.handlers.PriorityHandler"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </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.core/schema/org.eclipse.capra.configuration.traceabilityMetaModel.exsd b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.traceabilityMetaModel.exsd
new file mode 100644
index 0000000..753dcfc
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.traceabilityMetaModel.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.traceabilityMetaModel" name="Traceability Meta-Model"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice>
+            <element ref="TraceabilityMetaModelAdapter"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <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="TraceabilityMetaModelAdapter">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.adapters.TraceMetaModelAdapter"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </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.core/src/org/eclipse/capra/core/adapters/AbstractArtifactMetaModelAdapter.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractArtifactMetaModelAdapter.java
new file mode 100644
index 0000000..0d61635
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractArtifactMetaModelAdapter.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.core.adapters;
+
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Base class for the definition of a custom {@link ArtifactMetaModelAdapter}.
+ * Implements a simple strategy to retrieve artifact handlers through the
+ * registered extensions.
+ */
+public abstract class AbstractArtifactMetaModelAdapter implements ArtifactMetaModelAdapter {
+
+	@Override
+	public IArtifactHandler<?> getArtifactHandlerInstance(EObject artifact) {
+		String handler = getArtifactHandler(artifact);
+		return ExtensionPointHelper.getArtifactHandler(handler).orElse(null);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java
new file mode 100644
index 0000000..d8b068f
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractMetaModelAdapter.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * 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.core.adapters;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+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.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+/**
+ * Implements standard functionality for the methods defined in the
+ * {@link TraceMetaModelAdapter}.
+ */
+public abstract class AbstractMetaModelAdapter implements TraceMetaModelAdapter {
+
+	private List<Connection> getInternalElementsTransitive(EObject element, EObject traceModel,
+			List<Object> accumulator, List<String> selectedRelationshipTypes, int currentDepth, int maximumDepth,
+			List<Connection> existingTraces) {
+		List<Connection> directElements = getInternalElements(element, traceModel, selectedRelationshipTypes, true,
+				maximumDepth, existingTraces);
+		List<Connection> allElements = new ArrayList<>();
+		int currDepth = currentDepth + 1;
+		for (Connection connection : directElements) {
+			if (!accumulator.contains(connection.getTlink())) {
+				allElements.add(connection);
+				accumulator.add(connection.getTlink());
+				for (EObject e : connection.getTargets()) {
+					if (maximumDepth == 0 || currDepth < (maximumDepth + 2)) {
+						allElements.addAll(getInternalElementsTransitive(e, traceModel, accumulator,
+								selectedRelationshipTypes, currDepth, maximumDepth, existingTraces));
+					}
+				}
+			}
+		}
+
+		return allElements;
+	}
+
+	/**
+	 * Used to get internal links connected to a selected element.
+	 * 
+	 * @param element
+	 *            the selected element
+	 * @param traceModel
+	 *            the current trace model
+	 * @param selectedRelationshipTypes
+	 *            the selected relationship types from the filter, if the user
+	 *            has selected any
+	 * @param maximumDepth
+	 *            The maximum depth the transitivity should go. 0 means show all
+	 *            the links
+	 * @param existingTraces
+	 *            The trace links that have been created manually by the user,
+	 *            these are obtained from the trace model
+	 */
+	public List<Connection> getInternalElementsTransitive(EObject element, EObject traceModel,
+			List<String> selectedRelationshipTypes, int maximumDepth, List<Connection> existingTraces) {
+		List<Object> accumulator = new ArrayList<>();
+		return getInternalElementsTransitive(element, traceModel, accumulator, selectedRelationshipTypes, 0,
+				maximumDepth, existingTraces);
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<Connection> getInternalElements(EObject element, EObject traceModel,
+			List<String> selectedRelationshipTypes, boolean traceLinksTransitive, int transitivityDepth,
+			List<Connection> existingTraces) {
+		List<Connection> allElements = new ArrayList<>();
+		List<Connection> directElements;
+		if (traceLinksTransitive) {
+			directElements = getTransitivelyConnectedElements(element, traceModel, selectedRelationshipTypes,
+					transitivityDepth);
+		} else {
+			directElements = getConnectedElements(element, traceModel, selectedRelationshipTypes);
+		}
+		List<Integer> hashCodes = new ArrayList<>();
+
+		for (Connection conn : existingTraces) {
+			int connectionHash = conn.getOrigin().hashCode() + conn.getTlink().hashCode();
+			for (EObject targ : conn.getTargets()) {
+				connectionHash += targ.hashCode();
+			}
+			hashCodes.add(connectionHash);
+		}
+
+		ResourceSet resourceSet = new ResourceSetImpl();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		for (Connection conn : directElements) {
+			int connectionHash = conn.getOrigin().hashCode() + conn.getTlink().hashCode();
+			for (EObject targ : conn.getTargets()) {
+				connectionHash += targ.hashCode();
+			}
+			if (!hashCodes.contains(connectionHash)) {
+				allElements.add(conn);
+			}
+			// get internal links from source
+			Object origin = artifactHelper.unwrapWrapper(conn.getOrigin());
+			IArtifactHandler<?> originHandler = artifactHelper.getHandler(origin).get();
+			if (originHandler != null) {
+				allElements.addAll(originHandler.addInternalLinks(conn.getOrigin(), selectedRelationshipTypes));
+			}
+			// get internal links from targets
+			for (EObject o : conn.getTargets()) {
+				Object originalObject = artifactHelper.unwrapWrapper(o);
+				IArtifactHandler<?> handler = artifactHelper.getHandler(originalObject).get();
+				if (handler != null) {
+					allElements.addAll(handler.addInternalLinks(o, selectedRelationshipTypes));
+				}
+			}
+		}
+		// show internal links even when no Capra links are present
+		if (directElements.size() == 0) {
+			Object originalObject = artifactHelper.unwrapWrapper(element);
+			IArtifactHandler<?> handler = artifactHelper.getHandler(originalObject).get();
+			if (handler != null) {
+				allElements.addAll(handler.addInternalLinks(element, selectedRelationshipTypes));
+			}
+
+		}
+
+		if (element.getClass().getPackage().toString().contains("org.eclipse.eatop")) {
+			IArtifactHandler<Object> handler = (IArtifactHandler<Object>) artifactHelper.getHandler(element)
+					.orElse(null);
+			allElements.addAll(handler.addInternalLinks(element, selectedRelationshipTypes));
+		}
+		return allElements;
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+
+		ResourceSet resourceSet = new ResourceSetImpl();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		IArtifactHandler<?> handlerFirstElement = artifactHelper.getHandler(first).orElse(null);
+		IArtifactHandler<?> handlerSecondElement = artifactHelper.getHandler(second).orElse(null);
+
+		return handlerFirstElement.isThereAnInternalTraceBetween(first, second)
+				|| handlerSecondElement.isThereAnInternalTraceBetween(first, second);
+	}
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/ArtifactMetaModelAdapter.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/ArtifactMetaModelAdapter.java
new file mode 100644
index 0000000..6f2e640
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/ArtifactMetaModelAdapter.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * 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.core.adapters;
+
+import java.util.List;
+
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * This interface defines the functionality necessary to deal with meta models
+ * that describe the artifacts to and from which trace links are created.
+ */
+public interface ArtifactMetaModelAdapter {
+
+	/**
+	 * Create a new model for artifacts.
+	 *
+	 * @return the new model
+	 */
+	EObject createModel();
+
+	/**
+	 * TODO: The implementation of this method delegates to the other methods
+	 * with the same name. It exists to enables implementing objects to work
+	 * with both the old and the new API during a transmission period.
+	 */
+	default EObject createArtifact(EObject artifactModel, String artifactHandler, String artifactUri, 
+		String artifactName, String artifactFilePath) {
+		return createArtifact(artifactModel, artifactHandler, artifactUri, artifactUri, artifactName, artifactFilePath);
+	}
+
+	/**
+	 * Create a new artifact. The list of artifacts is searched for an existing
+	 * artifact with the same handler and URI. If found, the existing artifact
+	 * is returned, otherwise a new artifact is created.
+	 * <p/>
+	 * TODO: The implementation of this method delegates to the other methods
+	 * with the same name. It exists to enables implementing objects to work
+	 * with both the old and the new API during a transmission period.
+	 */
+	default EObject createArtifact(EObject artifactModel, String artifactHandler, String artifactUri, 
+		String artifactId, String artifactName, String artifactFilePath) {
+		return createArtifact(artifactModel, artifactHandler, artifactId, artifactName, artifactFilePath);
+	}
+
+	/**
+	 * Get artifact with given handler and URI.
+	 *
+	 * @param artifactHandler
+	 *            Handler of artifact
+	 * @param artifactUri
+	 *            URI of artifact
+	 * @return artifact if found, null otherwise
+	 */
+	EObject getArtifact(EObject artifactModel, String artifactHandler, String artifactUri);
+
+	/**
+	 * Get a handler for the given artifact
+	 *
+	 * @param artifact
+	 * @return artifact handler
+	 */
+	String getArtifactHandler(EObject artifact);
+
+	/**
+	 * Get the name of the given artifact.
+	 *
+	 * @param artifact
+	 * @return artifact name
+	 */
+	String getArtifactName(EObject artifact);
+
+	/**
+	 * Get the URI of the given artifact. The URI be a string with a valid URI
+	 * syntax. 
+	 * <p/>
+	 * The path part should refer to a concrete resource, such as a
+	 * file or a web page. 
+	 * <p/>
+	 * The fragment part should (if necessary) uniquely
+	 * identify the artifact within the resource. It can consists of a sequence of sub-parts separated '/'. In that
+	 * way tools that work with artifacts can used the sub-parts of the fragment for their own purposes.
+	 * <p/>
+	 * Example: The JDT artifact handler uses the following encoding scheme for artifact URI:s:
+	 * {@code platform:/Project_name/path/to/file.java#com.pack.ClassName/methodName(int, String)}.
+	 *
+	 * @param artifact
+	 * @return artifact uri
+	 */
+	String getArtifactUri(EObject artifact);
+
+	/**
+	 * @return An internal string that handlers use to locate and reconstruct the artifact.
+	 */
+	default String getArtifactIdentifier(EObject artifact) {
+		return getArtifactUri(artifact);
+	}
+	
+	/**
+	 * Get the path of the given artifact.
+	 *
+	 * @param artifact
+	 * @return path of the file, referenced by the artifact
+	 */
+	IPath getArtifactPath(EObject artifact);
+
+	/**
+	 * Get an instance of the artifact handler.
+	 *
+	 * @param artifact
+	 * @return artifact handler instance
+	 */
+	IArtifactHandler<?> getArtifactHandlerInstance(EObject artifact);
+
+	/**
+	 * Returns a list of all artifacts in an artifact model
+	 *
+	 * @param artifactModel
+	 * @return a list of all artifacts in the artifact model as EObjects
+	 */
+	List<EObject> getAllArtifacts(EObject artifactModel);
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/Connection.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/Connection.java
new file mode 100644
index 0000000..8d5699d
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/Connection.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * 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.core.adapters;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * An minimal abstraction of a traceability link used in
+ * {@link TraceMetaModelAdapter}, to retain independence of a concrete trace
+ * metamodel.
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class Connection {
+	private EObject origin;
+	private List<EObject> targets;
+	private EObject tlink;
+
+	public Connection(EObject origin, List<EObject> targets, EObject tlink) {
+		this.origin = origin;
+		this.targets = targets;
+		this.tlink = tlink;
+	}
+
+	public EObject getOrigin() {
+		return origin;
+	}
+
+	public List<EObject> getTargets() {
+		return targets;
+	}
+
+	public EObject getTlink() {
+		return tlink;
+	}
+
+	@Override
+	public boolean equals(Object object) {
+		if (object == null) {
+			return false;
+		}
+		if (!(object instanceof Connection)) {
+			return false;
+		}
+		if (object == this) {
+			return true;
+		}
+		Connection connection = (Connection) object;
+
+		List<EObject> allFirstElements = new ArrayList<>(this.getTargets());
+		allFirstElements.add(this.getOrigin());
+
+		List<EObject> allSecondElements = new ArrayList<>(connection.getTargets());
+		allSecondElements.add(connection.getOrigin());
+
+		String firstTraceType = EMFHelper.getIdentifier(this.getTlink().eClass());
+		String secondTracetype = EMFHelper.getIdentifier(connection.getTlink().eClass());
+		if (!(firstTraceType.equals(secondTracetype))) {
+			return false;
+		}
+
+		List<String> firstElementsIds = allFirstElements.stream().map(e -> EMFHelper.getIdentifier(e))
+				.collect(Collectors.toList());
+		List<String> secondElementsIds = allSecondElements.stream().map(e -> EMFHelper.getIdentifier(e))
+				.collect(Collectors.toList());
+		return firstElementsIds.containsAll(secondElementsIds);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TraceMetaModelAdapter.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TraceMetaModelAdapter.java
new file mode 100644
index 0000000..0e2c08a
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TraceMetaModelAdapter.java
@@ -0,0 +1,228 @@
+/*******************************************************************************
+ * 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.core.adapters;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * This interface defines all functionality that must be implemented to support
+ * a specific trace metamodel. This enables swapping the concept of what a
+ * "trace" is, as long as these methods can be implemented.
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ *
+ */
+public interface TraceMetaModelAdapter {
+	
+	/**
+	 * Create a new model for the trace links.
+	 * 
+	 * @return the new trace model
+	 */
+
+	EObject createModel();
+
+	/**
+	 * Used to retrieve a set of types of traces that can be created for the
+	 * given selection of objects in the Eclipse workspace
+	 * 
+	 * @param selection
+	 *            The selection of objects the user has made and wants to create
+	 *            a trace for in the Eclipse workspace
+	 * @return A collection of possible types of traces that can be created for
+	 *         the given selection
+	 */
+	Collection<EClass> getAvailableTraceTypes(List<EObject> selection);
+
+	/**
+	 * Used to create a trace of the given type
+	 * 
+	 * @param traceType
+	 *            The type of the trace to be created
+	 * @param traceModel
+	 *            The root of the trace model that should contain the trace
+	 *            type. If this is empty, then a new root is to be created and
+	 *            returned.
+	 * @param selection
+	 *            Objects to create the trace for
+	 * @return the trace link that has just been created
+	 */
+	EObject createTrace(EClass traceType, EObject traceModel, List<EObject> selection);
+
+	/** Decide if two objects are connected according to the given trace model
+	* 
+	* @param first
+	*            First object
+	* @param second
+	*            Second object
+	* @param traceModel
+	*            Trace model to base decision on
+	* @return <code>true</code> if object are connected, <code>false</code>
+	*         otherwise
+	*/
+	boolean isThereATraceBetween(EObject first, EObject second, EObject traceModel);
+
+	/**
+	 * Determine a list of all objects connected to element according to the
+	 * given trace model
+	 * 
+	 * @param element
+	 *            The element used to determine the list of connected objects.
+	 *            Note that this element could be a trace in the trace model
+	 * @param traceModel
+	 *            Trace model to base calculation on
+	 * @return A Map with the following structure: [Trace object t -> {list of
+	 *         all objects connected to element via t}]
+	 */
+	List<Connection> getConnectedElements(EObject element, EObject traceModel);
+	
+	/**
+	 * Determine a list of all objects connected to element according to the
+	 * given trace model
+	 * 
+	 * @param element
+	 *            The element used to determine the list of connected objects.
+	 *            Note that this element could be a trace in the trace model
+	 * @param traceModel
+	 *            Trace model to base calculation on
+	 * @param selectedRelationshipTypes
+	 *            List of selected relationship types from the context menu of
+	 *            plantuml
+	 * @return A Map with the following structure: [Trace object t -> {list of
+	 *         all objects connected to element via t}]
+	 */
+	List<Connection> getConnectedElements(EObject element, EObject traceModel, List<String> selectedRelationshipTypes);
+
+	/**
+	 * Determine a list of all objects connected to element according to the
+	 * given trace model
+	 * 
+	 * @param element
+	 *            The element used to determine the list of connected objects.
+	 *            Note that this element could be a trace in the trace model
+	 * @param traceModel
+	 *            Trace model to base calculation on
+	 * @param transitivityDepth
+	 *            The maximum depth the user wants to go down transitively. 0
+	 *            indicates no limit.
+	 * @return A Map with the following structure: [Trace object t -> {list of
+	 *         all objects connected to element via t}]
+	 */
+	List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel, int transitivityDepth);
+
+	/**
+	 * Determine a list of all objects connected to element according to the
+	 * given trace model
+	 * 
+	 * @param element
+	 *            The element used to determine the list of connected objects.
+	 *            Note that this element could be a trace in the trace model
+	 * @param traceModel
+	 *            Trace model to base calculation on
+	 * @param selectedRelationshipTypes
+	 *            List of selected relationship types from the context menu of
+	 *            plantuml
+	 * @param transitivityDepth
+	 *            The maximum depth the user wants to go down transitively. 0
+	 *            indicates no limit.
+	 * @return A Map with the following structure: [Trace object t -> {list of
+	 *         all objects connected to element via t}]
+	 */
+	List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel,
+			List<String> selectedRelationshipTypes, int transitivityDepth);
+	
+	/**
+	 * Given a trace model, this method returns a list of all trace links in the
+	 * model
+	 * 
+	 * @param traceModel
+	 * @return A list of all connections in the trace model with the following
+	 *         structure [Source, target(s) and the connecting trace link]
+	 */
+	List<Connection> getAllTraceLinks(EObject traceModel);
+
+	/**
+	 * Deletes specific trace links from a given trace model. This is useful for
+	 * example when you want to delete links based on a quick fix from the
+	 * notification feature
+	 * 
+	 * @param toDelete
+	 *            a list of links to be deleted
+	 * @param traceModel
+	 *            the trace model to delete the links from
+	 */
+	void deleteTrace(List<Connection> toDelete, EObject traceModel);
+	
+	/**
+	 * Determine a list of all objects internally connected to element (e.g.
+	 * UML)
+	 * 
+	 * @param element
+	 *            The element used to determine the list of connected objects.
+	 *            Note that this element could be a trace in the trace model
+	 * @param traceModel
+	 *            Trace model to base calculation on
+	 * @param selectedRelationshipTypes
+	 *            List of selected relationship types from the context menu of
+	 *            plantuml
+	 * @param traceLinksTransitive
+	 *            Used to determine if tracelink elements should be received
+	 *            transitively
+	 * @param transitivityDepth
+	 *            Used to in case tracelinks are received transivitely in order
+	 *            to set the depth
+	 * @return A Map with the following structure: [Trace object t -> {list of
+	 *         all objects connected to element via t}]
+	 */
+	List<Connection> getInternalElements(EObject element, EObject traceModel, List<String> selectedRelationshipTypes,
+			boolean traceLinksTransitive, int transitivityDepth, List<Connection> existingTraces);
+
+	/**
+	 * Determine a list of elements internally connected to the selected one
+	 * transitively
+	 * 
+	 * @param element
+	 *            The element used to determine the list of connected objects.
+	 *            Note that this element could be a trace in the trace model
+	 * @param traceModel
+	 *            Trace model to base calculation on
+	 * @param transitivityDepth
+	 *            The maximum depth the user wants to go down transitively. 0
+	 *            indicates no limit.
+	 * @return A Map with the following structure: [Trace object t -> {list of
+	 *         all objects connected to element via t}]
+	 */
+	List<Connection> getInternalElementsTransitive(EObject element, EObject traceModel,
+			List<String> selectedRelationshipTypes, int transitivityDepth, List<Connection> existingTraces);
+	
+	/**
+	 * Decide if two objects are connected internally by passing the selected
+	 * objects down to the artifact handlers and returns a String with the Type
+	 * of connection for the trace matrix (empty String if no connection exists)
+	 * This is implemented in the {@link AbstractMetaModelAdapter} and does not
+	 * need to be overwritten but can be used like it is.
+	 * 
+	 * @param first
+	 *            First object
+	 * @param second
+	 *            Second object
+	 * @return <code>true</code> if object are connected, <code>false</code>
+	 *         otherwise
+	 */
+	boolean isThereAnInternalTraceBetween(EObject first, EObject second);
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TracePersistenceAdapter.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TracePersistenceAdapter.java
new file mode 100644
index 0000000..b6a2f71
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TracePersistenceAdapter.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * 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.core.adapters;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+/**
+ * This interface defines all functionality used to decide how and where the
+ * trace model and all artifact wrappers are persisted.
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ *
+ */
+public interface TracePersistenceAdapter {
+
+	/**
+	 * Load and return the trace model in the given resource set
+	 * 
+	 * @param resourceSet
+	 *            Resource set to load the trace model in
+	 * @return Root of loaded trace model, Optional can be empty to indicate
+	 *         that loading failed or was not possible (there is no trace model
+	 *         to load at the moment)
+	 */
+	EObject getTraceModel(ResourceSet resourceSet);
+
+	/**
+	 * Return the trace model for the given object
+	 * 
+	 * @param object
+	 *            EObject to return the model for
+	 * @return Root of trace model, Optional can be empty to indicate that there
+	 *         is no trace model for the object
+	 */
+	EObject getTraceModel(EObject object);
+
+	/**
+	 * Load and return the container for all artifact wrappers in the given
+	 * resource set
+	 * 
+	 * @param resourceSet
+	 *            Resource set to load the container for artifact wrappers in
+	 * @return Container for all artifact wrappers, Optional can be empty to
+	 *         indicate that loading failed or was not possible (no container
+	 *         exists at the moment)
+	 */
+	EObject getArtifactWrappers(ResourceSet resourceSet);
+
+	/**
+	 * Return the trace model for the given object
+	 * 
+	 * @param object
+	 *            EObject to return the model for
+	 * @return Root of trace model, Optional can be empty to indicate that there
+	 *         is no trace model for the object
+	 */
+	EObject getArtifactWrappers(EObject object);
+
+	/**
+	 * Save the trace and artifact models. Implementations are expected to: (i)
+	 * save the trace model, (ii) check selectionForTraceCreation for artifact
+	 * wrappers that are not already contained in artifactWrappers, (iii) add
+	 * these new artifact wrappers to artifactWrappers before saving it as well
+	 * 
+	 * @param traceModel
+	 *            The updated trace model to be saved
+	 * @param artifactModel
+	 *            The updated artifacts to be saved
+	 */
+	void saveTracesAndArtifacts(EObject traceModel, EObject artifactModel);
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/AbstractArtifactHandler.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/AbstractArtifactHandler.java
new file mode 100644
index 0000000..1d91cd7
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/AbstractArtifactHandler.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * 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.core.handlers;
+
+import java.lang.reflect.ParameterizedType;
+import java.util.Optional;
+import java.util.function.BiFunction;
+
+public abstract class AbstractArtifactHandler<T> implements IArtifactHandler<T> {
+
+	private Object unpack(Object artifact) {
+		Object result = artifact;
+		if (IArtifactUnpacker.class.isAssignableFrom(this.getClass())) {
+			try {
+				result = IArtifactUnpacker.class.cast(this).unpack(artifact);
+			} catch (ClassCastException ex) {
+				/*
+				 * Deliberately do nothing. This is not uncommon when trying to
+				 * find the right handler. In such cases, canHandleArtifact() is
+				 * called on all handlers, but for most the artifact can not be
+				 * casted.
+				 */
+			}
+		}
+		return result;
+	}
+
+	@Override
+	public <R> Optional<R> withCastedHandler(Object artifact, BiFunction<IArtifactHandler<T>, T, R> handleFunction) {
+		Object unpackedArtifact = unpack(artifact);
+		if (canHandleArtifact(unpackedArtifact)) {
+			@SuppressWarnings("unchecked")
+			T a = (T) unpackedArtifact;
+			return Optional.of(handleFunction.apply(this, a));
+		} else {
+			return Optional.empty();
+		}
+	}
+
+	@Override
+	public <R> R withCastedHandlerUnchecked(Object artifact, BiFunction<IArtifactHandler<T>, T, R> handleFunction) {
+		return withCastedHandler(artifact, handleFunction).orElseThrow(
+				() -> new IllegalArgumentException("withCastedHanderUnchecked called with unhandleble artifact."
+						+ " Artifact: " + artifact + ", handler: " + this));
+	}
+
+	@Override
+	public boolean canHandleArtifact(Object artifact) {
+		Object unpackedArtifact = unpack(artifact);
+		try {
+			Class<?> genericType = ((Class<?>) ((ParameterizedType) this.getClass().getGenericSuperclass())
+					.getActualTypeArguments()[0]);
+
+			return genericType.isAssignableFrom(unpackedArtifact.getClass());
+		} catch (NoClassDefFoundError e) {
+			return false;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public Class<T> getHandledClass() {
+		return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/AnnotationException.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/AnnotationException.java
new file mode 100644
index 0000000..e99ae59
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/AnnotationException.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.core.handlers;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+
+public class AnnotationException extends CoreException {
+
+	private static final long serialVersionUID = 1L;
+
+	public AnnotationException(IStatus status) {
+		super(status);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IAnnotateArtifact.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IAnnotateArtifact.java
new file mode 100644
index 0000000..fc4a601
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IAnnotateArtifact.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * 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.core.handlers;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Interface to be optionally implemented by artifact handler that supports
+ * annotation.
+ */
+public interface IAnnotateArtifact {
+
+	/**
+	 * Annotate artifact with given text
+	 *
+	 * @param wrapper
+	 *            Wrapper for artifact to be annotated
+	 * @param annotation
+	 *            Annotation text
+	 * @throws AnnotationException
+	 *             Exception thrown by handler if annotation fails
+	 */
+	void annotateArtifact(EObject wrapper, String annotation) throws AnnotationException;
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java
new file mode 100644
index 0000000..b76913c
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactHandler.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * 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.core.handlers;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiFunction;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * This interface defines functionality required to map chosen Objects in the
+ * Eclipse workspace to wrappers which can then be traced and persisted in EMF
+ * models.
+ *
+ * @param <T>
+ *            The type of artifact that this object can handle. A handler with a
+ *            parameter T should return true when
+ *            {@link IArtifactHandler#canHandleArtifact} is called with an
+ *            object of that type.
+ */
+public interface IArtifactHandler<T> {
+
+	/**
+	 * Does the handler support this object?
+	 *
+	 * @param artifact
+	 *            The object to be wrapped
+	 * @return <code>true</code> if object can be handled, <code>false</code>
+	 *         otherwise.
+	 */
+	boolean canHandleArtifact(Object artifact);
+
+	/**
+	 * If this handler can handle artifact, then call the functions with the
+	 * argument and this handler as arguments.
+	 * <p/>
+	 * This methods can be used to handle artifacts in a type safe manner when
+	 * the caller is sure that the artifact can be handled. Inside the handle
+	 * function it will be possible to use the handler with this specific
+	 * artifact only.
+	 * 
+	 * @param artifact
+	 *            The artifact to be handled
+	 * @param handleFunction
+	 *            Must not return null.
+	 * @return An optional with the result returned from the handle function if
+	 *         the artifact can be handled; otherwise an empty optional.
+	 */
+	<R> Optional<R> withCastedHandler(Object artifact, BiFunction<IArtifactHandler<T>, T, R> handleFunction);
+
+	/**
+	 * Convenience method that calls {@link IArtifactHandler#withCastedHandler}
+	 * if caller knows that the artifact can be handled.
+	 * 
+	 * @throws IllegalArgumentException
+	 *             If this handler can not handle the artifact.
+	 */
+	<R> R withCastedHandlerUnchecked(Object artifact, BiFunction<IArtifactHandler<T>, T, R> handleFunction);
+
+	/**
+	 * Create a wrapper for the object
+	 *
+	 * @param artifact
+	 *            The object to be wrapped
+	 * @param artifactModel
+	 * @return
+	 */
+	EObject createWrapper(T artifact, EObject artifactModel);
+
+	/**
+	 * Resolve the wrapper to the originally selected Object from the Eclipse
+	 * workspace. This is essentially the inverse of the createWrapper
+	 * operation.
+	 *
+	 * @param wrapper
+	 *            The wrapped object
+	 * @return originally selected object
+	 */
+	T resolveWrapper(EObject wrapper);
+
+	/**
+	 * Provide a name for the artifact to be used for display purposes.
+	 * 
+	 * @param artifact
+	 */
+	String getDisplayName(T artifact);
+
+	/**
+	 * Returns the type that is handled by this <code>IArtifactHandler</code>.
+	 * 
+	 * @return the type that
+	 */
+	Class<T> getHandledClass();
+
+	/**
+	 * When a change in the resource occurs, it generates the message that is to
+	 * be displayed by the Capra marker.
+	 * 
+	 * @param delta
+	 *            represents changes in the state of a resource
+	 * @param wrapperUri
+	 *            uri of the artifact that is associated with the change
+	 * @return the Capra marker message. Every marker must return a unique
+	 *         message. If the message already exists it will be ignoored and a
+	 *         marker will not be created.
+	 */
+	String generateMarkerMessage(IResourceDelta delta, String wrapperUri);
+
+	/**
+	 * Adds internal links related to a given element.
+	 * <p>
+	 * This is helpful if Eclipse Capra should include links within a DSL, e.g.,
+	 * associations between classes, in its visualisations and analysis. A
+	 * handler that implements this method should return a list of
+	 * {@code Connection}. This list will be used in visualisations and
+	 * analysis, but not persisted in Capra's own trace model.
+	 * 
+	 * @param investigatedElement
+	 *            element currently under investigation for links
+	 * @param selectedRelationshipTypes
+	 *            relationship types selected by the user; this ensures that
+	 *            Capra only includes specific link types in the visualisation
+	 *            and analysis and implementation of the method should filter on
+	 *            this list
+	 * 
+	 * @return a list of {@link Connection} between the
+	 *         {@code investigatedElement} and other elements the handler takes
+	 *         care of
+	 */
+	List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes);
+
+	/**
+	 * Decide if two objects have an internal link between them.
+	 *
+	 * @param first
+	 *            First object
+	 * @param second
+	 *            Second object
+	 * @param traceModel
+	 *            Trace model to base decision on
+	 * @return <code>true</code> if object are connected, <code>false</code>
+	 *         otherwise
+	 */
+	boolean isThereAnInternalTraceBetween(EObject first, EObject second);
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactUnpacker.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactUnpacker.java
new file mode 100644
index 0000000..82d4d42
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/IArtifactUnpacker.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.core.handlers;
+
+/**
+ * Defines functions to unpack the artifact from a surrounding container. This
+ * can be helpful if the artifact is wrapped by another class and Eclipse calls
+ * the methods of an {@link IArtifactHandler} with the wrapper instead of the
+ * actual object the wrapper is able to handle.
+ * 
+ * @param <T>
+ *            the type of the container
+ * @param <K>
+ *            the type of the artifact
+ */
+public interface IArtifactUnpacker<T, K> {
+
+	/**
+	 * Unpacks an artifact from a container.
+	 * 
+	 * @param container
+	 *            the container containing the artifact
+	 * @return an artifact unpacked from the container
+	 */
+	K unpack(T container);
+
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/PriorityHandler.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/PriorityHandler.java
new file mode 100644
index 0000000..7a1a781
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/PriorityHandler.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.core.handlers;
+
+import java.util.Collection;
+
+/**
+ * A priority handler is used to define which {@link ArtifactHandler} should
+ * preferably be used when creating a new trace link. Depending on the choice,
+ * different trace types can then be selected.
+ */
+public interface PriorityHandler {
+
+	/**
+	 * This method gets a list of available handers for a selection and returns
+	 * the best (prioritized) handler that can handle the selection
+	 * 
+	 * @param handlers
+	 *            List of available handlers for the selection
+	 * 
+	 * @param selectedElement
+	 *            The selected Object s
+	 * @return one handler
+	 * 
+	 */
+	<T> IArtifactHandler<? extends T> getSelectedHandler(Collection<? extends IArtifactHandler<? extends T>> handlers, Object artifact);
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ArtifactHelper.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ArtifactHelper.java
new file mode 100644
index 0000000..bd877eb
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ArtifactHelper.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * 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.core.helpers;
+
+import static java.util.stream.Collectors.toList;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.handlers.PriorityHandler;
+import org.eclipse.emf.ecore.EObject;
+
+public class ArtifactHelper {
+	private EObject artifactModel;
+	// Switch to Optional here to express potential absence in the type
+	private static Optional<PriorityHandler> priorityHandler = ExtensionPointHelper.getPriorityHandler();
+
+	// This is a tricky type... It is not really necessary here, but let's take
+	// it as a generics tutorial example!
+	//
+	// I used it during development because this type can contain collections
+	// both of type IArtifactHandler<?>
+	// AND of IArtifactHandler<Object>. The simpler type
+	// Collection<IArtifactHandler<?>> can only hold
+	// IArtifactHandler<?>.
+	private static Collection<? extends IArtifactHandler<?>> handlers = ExtensionPointHelper.getArtifactHandlers();
+
+	/**
+	 * @param artifactModel
+	 */
+	public ArtifactHelper(EObject artifactModel) {
+		this.artifactModel = artifactModel;
+	}
+
+	/**
+	 * Creates wrappers for artifacts
+	 *
+	 * @param artifacts
+	 * @return List of wrappers
+	 */
+	@SuppressWarnings("unchecked")
+	public List<EObject> createWrappers(List<?> artifacts) {
+		return (List<EObject>) (Object) artifacts.stream()
+				.map(vagueArtifact -> getHandler(vagueArtifact).map(h -> h.withCastedHandlerUnchecked(vagueArtifact,
+						(handler, artifact) -> handler.createWrapper(artifact, artifactModel))))
+				.filter(Optional::isPresent).map(Optional::get).collect(toList());
+
+	}
+
+	/**
+	 * Creates wrapper for artifact
+	 *
+	 * @param vagueArtifact
+	 * @return wrapper of null if no handler exists
+	 */
+	public EObject createWrapper(Object vagueArtifact) {
+		Optional<EObject> wrapped = getHandler(vagueArtifact)
+				.map(vagueHandler -> vagueHandler.withCastedHandlerUnchecked(vagueArtifact,
+						(handler, artifact) -> handler.createWrapper(artifact, artifactModel)));
+
+		return wrapped.orElse(null);
+	}
+
+	/**
+	 * Unwraps an artifact wrapper to get its original object. If the original
+	 * object is null, the wrapper is returned as it is
+	 * 
+	 * @param wrapper
+	 *            to be unwrapped
+	 * @return the original artifact
+	 */
+	public <T> Object unwrapWrapper(Object wrapper) {
+		if (wrapper instanceof EObject) {
+			ArtifactMetaModelAdapter artifactMetaModelAdapter = ExtensionPointHelper
+					.getArtifactWrapperMetaModelAdapter().get();
+			IArtifactHandler<?> handler = (IArtifactHandler<?>) artifactMetaModelAdapter
+					.getArtifactHandlerInstance((EObject) wrapper);
+			if (handler != null && handler.resolveWrapper((EObject) wrapper) != null) {
+				return handler.resolveWrapper((EObject) wrapper);
+			} else
+				return wrapper;
+		} else
+			return wrapper;
+	}
+
+	// Returns handler for same type as the argument
+	public <T> Optional<IArtifactHandler<?>> getHandler(Object artifact) {
+		List<IArtifactHandler<?>> availableHandlers = handlers.stream().filter(h -> h.canHandleArtifact(artifact))
+				.collect(toList());
+		if (availableHandlers.isEmpty()) {
+			return Optional.empty();
+		} else if (availableHandlers.size() == 1) {
+			return Optional.of(availableHandlers.get(0));
+		} else {
+			return priorityHandler.map(h -> h.getSelectedHandler(availableHandlers, artifact));
+		}
+	}
+
+}
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
new file mode 100644
index 0000000..858c083
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
@@ -0,0 +1,201 @@
+/*******************************************************************************
+ * 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.core.helpers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Contains methods to work with {@link EObject} instances encountered when
+ * handling EMF models.
+ */
+public class EMFHelper {
+	
+	private EMFHelper () {
+		super();
+	}
+
+	/**
+	 * 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 called 'name' of the EObject, if it has such an
+	 * attribute</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.
+	 */
+	public static String getIdentifier(final EObject eObject) {
+		if (eObject == null) {
+			return "<null>";
+		}
+		if (eObject.eClass() == null) {
+			return eObject.toString();
+		}
+
+		boolean success = false;
+
+		List<EAttribute> attributes = eObject.eClass().getEAllAttributes();
+		StringBuilder identifier = new StringBuilder();
+
+		success = tryGetSingleAttribute(eObject, attributes, identifier);
+
+		if (!success) {
+			success = tryGetNameAttribute(eObject, attributes, identifier);
+		}
+
+		if (!success) {
+			success = tryGetAnyAttribute(eObject, attributes, identifier);
+		}
+
+		if (success) {
+			identifier.append(" : ");
+		}
+
+		identifier.append(eObject.eClass().getName());
+
+		return identifier.toString();
+	}
+
+	/**
+	 * @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.
+	 */
+	public static boolean tryGetSingleAttribute(final EObject eObject, final List<EAttribute> attributes,
+			final StringBuilder name) {
+		boolean success = false;
+		if (attributes.size() == 1) {
+			Object obj = eObject.eGet(attributes.get(0));
+			if (obj != null) {
+				name.append(obj.toString());
+				success = true;
+			}
+		}
+		return success;
+	}
+
+	/**
+	 * @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.
+	 */
+	public static boolean tryGetNameAttribute(final EObject eObject, final List<EAttribute> attributes,
+			final StringBuilder name) {
+		boolean success = false;
+		for (EAttribute feature : attributes) {
+			if (feature.getName().equals("name")) {
+				Object obj = eObject.eGet(feature);
+				if (obj != null) {
+					name.append(obj.toString());
+					success = true;
+					break;
+				}
+			}
+		}
+		return success;
+	}
+
+	/**
+	 * @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.
+	 */
+	public static boolean tryGetAnyAttribute(final EObject eObject, final List<EAttribute> attributes,
+			final StringBuilder name) {
+		boolean success = false;
+		String nonStringName = null;
+		String stringName = null;
+		for (EAttribute feature : attributes) {
+			Object obj = eObject.eGet(feature);
+			if (obj == null)
+				continue;
+			if (obj instanceof String) {
+				stringName = (String) obj;
+				break;
+			} else {
+				nonStringName = obj.toString();
+			}
+		}
+		if (stringName != null && !stringName.equals("null")) {
+			name.append(stringName);
+			success = true;
+		} else if (nonStringName != null && !nonStringName.equals("null")) {
+			name.append(nonStringName);
+			success = true;
+		}
+		return success;
+	}
+
+	/**
+	 * 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}
+	 */
+	public static List<EObject> linearize(Object object) {
+		ArrayList<EObject> elementList = new ArrayList<EObject>();
+		if (object instanceof EObject) {
+			EObject root = (EObject) object;
+			root.eAllContents().forEachRemaining(element -> elementList.add(element));
+			elementList.add(root);
+		}
+		return elementList;
+	}
+
+	
+
+	/**
+	 * Public API access for other classes to get the name attribute of an
+	 * EObject
+	 * 
+	 * @param eObject
+	 * @return String
+	 */
+	public static String getNameAttribute(final EObject eObject) {
+		String name = "";
+		for (EAttribute feature : eObject.eClass().getEAllAttributes()) {
+			if (feature.getName().equals("name")) {
+				Object obj = eObject.eGet(feature);
+				if (obj != null) {
+					name = obj.toString();
+				}
+			}
+		}
+		return name;
+	}
+}
diff --git a/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ExtensionPointHelper.java b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ExtensionPointHelper.java
new file mode 100644
index 0000000..f4fa195
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ExtensionPointHelper.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * 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.core.helpers;
+
+import static java.util.stream.Collectors.toList;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+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.PriorityHandler;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * Provides functionality to work with relevant Capra extension points.
+ */
+public class ExtensionPointHelper {
+	
+	/**
+	 * Hide the default constructor.
+	 */
+	private ExtensionPointHelper() {
+		super();
+	}
+
+	private static final String TRACE_ID = "org.eclipse.capra.configuration.traceabilityMetaModel";
+	private static final String TRACE_CONFIG = "class";
+	private static final String PERSISTENCE_ID = "org.eclipse.capra.configuration.persistenceHandler";
+	private static final String PERSISTENCE_CONFIG = "class";
+	private static final String ARTIFACT_ID = "org.eclipse.capra.configuration.artifactMetaModel";
+	private static final String ARTIFACT_CONFIG = "class";
+	private static final String ARTIFACT_HANDLER_ID = "org.eclipse.capra.configuration.artifactHandlers";
+	private static final String ARTIFACT_HANDLER_CONFIG = "class";
+	private static final String PRIORITY_HANDLER_ID = "org.eclipse.capra.configuration.priorityHandlers";
+	private static final String PRIORITY_HANDLER_CONFIG = "class";
+
+	/**
+	 * Gets all extensions from the extension point ID and attribute passed.
+	 *
+	 * @param id
+	 *            the ID of the extension point
+	 *
+	 * @param attributeName
+	 *            the name of the attribute
+	 *
+	 * @return List of extensions
+	 */
+	public static List<Object> getExtensions(final String id, final String attributeName) {
+		try {
+			IConfigurationElement[] configs = Platform.getExtensionRegistry().getConfigurationElementsFor(id);
+
+			List<Object> extensions = new ArrayList<>();
+			for (IConfigurationElement config : configs)
+				extensions.add(config.createExecutableExtension(attributeName));
+
+			return extensions;
+		} catch (Exception ex) {
+			return Collections.emptyList();
+		}
+	}
+
+	/**
+	 * Get the executable extension for the extension ID, extension point ID and property name.
+	 *
+	 * @param extensionId
+	 *            the ID of the extension
+	 * @param extensionPointId
+	 *            the ID of the extension point
+	 * @param propertyName
+	 *            the name of the property
+	 * @return extension
+	 */
+	public static Optional<IArtifactHandler<?>> getExtension(String extensionId, String extensionPointId, String propertyName) {
+		try {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			IExtension extension = registry.getExtension(extensionPointId, extensionId);
+			IConfigurationElement[] elements = extension.getConfigurationElements();
+			return Optional.of((IArtifactHandler<?>) elements[0].createExecutableExtension(propertyName));
+		} catch (Exception e) {
+			// Don't catch Exception! It can easily hide bugs!
+			return Optional.empty();
+		}
+	}
+
+	/**
+	 * Gets the configured {@link TraceMetaModelAdapter}.
+	 *
+	 * @return The configured {@code TraceMetaModelAdapter}. If none is
+	 *         configured, an empty instance of {@link Optional} is returned.
+	 */
+	public static Optional<TraceMetaModelAdapter> getTraceMetamodelAdapter() {
+		try {
+			Object extension = getExtensions(TRACE_ID, TRACE_CONFIG).get(0);
+			return Optional.of((TraceMetaModelAdapter) extension);
+		} catch (Exception e) {
+			return Optional.empty();
+		}
+	}
+
+	/**
+	 * Gets the configured {@link TracePersistenceAdapter}.
+	 *
+	 * @return The configured {@code TracePersistenceAdapter}. If none is
+	 *         configured, an empty instance of {@link Optional} is returned.
+	 */
+	public static Optional<TracePersistenceAdapter> getTracePersistenceAdapter() {
+		try {
+			Object extension = getExtensions(PERSISTENCE_ID, PERSISTENCE_CONFIG).get(0);
+			return Optional.of((TracePersistenceAdapter) extension);
+		} catch (Exception e) {
+			return Optional.empty();
+		}
+	}
+
+	/**
+	 * Gets the configured {@link ArtifactMetaModelAdapter}.
+	 *
+	 * @return The configured {@code ArtifactMetaModelAdapter}. If none is
+	 *         configured, an empty instance of {@link Optional} is returned.
+	 */
+	public static Optional<ArtifactMetaModelAdapter> getArtifactWrapperMetaModelAdapter() {
+		try {
+			Object extension = getExtensions(ARTIFACT_ID, ARTIFACT_CONFIG).get(0);
+			return Optional.of((ArtifactMetaModelAdapter) extension);
+		} catch (Exception e) {
+			return Optional.empty();
+		}
+	}
+
+	/**
+	 * Gets the available {@link ArtifactHandler} instances.
+	 *
+	 * @return A collection of all the artifact handlers available. This method
+	 *         collects all plugins that have an extension to the
+	 *         ArtifactHandler Extension point
+	 */
+	// Change type to IArtifactHandler<?>, since IArtifactHandler<Object> means a handler which
+	// can handle ALL kinds of objects.
+	public static Collection<IArtifactHandler<?>> getArtifactHandlers() {
+			List<Object> extensions = getExtensions(ARTIFACT_HANDLER_ID, ARTIFACT_HANDLER_CONFIG);
+
+			List<Object> illegalClasses = extensions.stream()
+				.filter(c -> !(c instanceof IArtifactHandler))
+				.collect(toList());
+			
+			if (!illegalClasses.isEmpty()) {
+				throw new IllegalStateException("Illegal classes at " + ARTIFACT_HANDLER_ID + ": "+ illegalClasses);
+			}
+			
+			return extensions.stream()
+				.map(IArtifactHandler.class::cast)
+				.collect(toList());
+	}
+
+	/**
+	 * Return the artifact handler with the given ID.
+	 *
+	 * @param id the id of the artifact handler
+	 * @return ArtifactHandler
+	 */
+	public static Optional<IArtifactHandler<?>> getArtifactHandler(String id) {
+		return getExtension(id, ARTIFACT_HANDLER_ID, ARTIFACT_CONFIG);
+	}
+
+	/**
+	 * Gets the configured {@link PriorityHandler}.
+	 *
+	 * @return The configured {@code PriorityHandler}. If none is configured, an
+	 *         empty instance of {@link Optional} is returned.
+	 */
+	public static Optional<PriorityHandler> getPriorityHandler() {
+		try {
+			Object extension = getExtensions(PRIORITY_HANDLER_ID, PRIORITY_HANDLER_CONFIG).get(0);
+			return Optional.of((PriorityHandler) extension);
+		} catch (Exception e) {
+			return Optional.empty();
+		}
+	}
+}
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
new file mode 100644
index 0000000..03a8068
--- /dev/null
+++ b/bundles/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/TraceHelper.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * 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.core.helpers;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
+import org.eclipse.capra.core.handlers.AnnotationException;
+import org.eclipse.capra.core.handlers.IAnnotateArtifact;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+/**
+ * Helper class for creating traces
+ */
+public class TraceHelper {
+
+	private EObject traceModel;
+	private TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+	private ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	/**
+	 * @param traceModel
+	 */
+	public TraceHelper(EObject traceModel) {
+		this.traceModel = traceModel;
+	}
+
+	/**
+	 * Create a trace of the given traceType
+	 *
+	 * @param wrappers
+	 * @param traceType
+	 * @return the trace link that has been created
+	 */
+	public EObject createTrace(List<EObject> wrappers, EClass traceType) {
+		return traceAdapter.createTrace(traceType, traceModel, wrappers);
+	}
+
+	/**
+	 * Annotate artifacts represented by wrappers
+	 *
+	 * @param wrappers
+	 */
+	public void annotateTrace(List<EObject> wrappers) {
+		// Annotate if possible
+		for (EObject wrapper : wrappers) {
+			IArtifactHandler<?> handler = artifactAdapter.getArtifactHandlerInstance(wrapper);
+
+			if (handler instanceof IAnnotateArtifact) {
+				IAnnotateArtifact h = (IAnnotateArtifact) handler;
+				try {
+					// Get unique connected artifacts, not including this
+					// element
+					// TODO: maybe add an adapter method for this?
+					Set<EObject> connectedElements = new HashSet<EObject>();
+					final StringBuilder annotation = new StringBuilder();
+					List<Connection> connections = traceAdapter.getConnectedElements(wrapper, traceModel);
+					connections.forEach(c -> {
+						c.getTargets().forEach(t -> {
+							if (t != wrapper) {
+								connectedElements.add(t);
+							}
+						});
+					});
+
+					// Build annotation string
+					connectedElements.forEach(e -> {
+						if (annotation.length() > 0) {
+							annotation.append(", ");
+						}
+						String name = artifactAdapter.getArtifactName(e);
+						annotation.append(name);
+					});
+
+					h.annotateArtifact(wrapper, annotation.toString());
+				} catch (AnnotationException e) {
+					// Ignore
+				}
+			}
+		}
+	}
+	
+	public List<EObject> getTracedElements(Connection connection) {
+		List<EObject> tracedElements = new ArrayList<>();
+		tracedElements.add(connection.getOrigin());
+		tracedElements.addAll(connection.getTargets());
+		return tracedElements;
+		
+	}
+
+	/**
+	 * Checks if a trace link of a certain type containing a certain selection
+	 * already exists in the trace model.
+	 * 
+	 * @param selection
+	 *            the selected elements
+	 * @param traceType
+	 *            the type of trace link
+	 * @param traceModel
+	 *            the trace model to be checked
+	 * @return true if the link exists
+	 */
+
+	public boolean traceExists(List<EObject> selection, EClass traceType, EObject traceModel) {
+		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		// create a connection
+		List<EObject> allElements = new ArrayList<>(selection);
+		EObject source = allElements.get(0);
+		allElements.remove(0);
+		List<EObject> targets = allElements;
+
+		// create temporary trace model with a temporary trace link
+		EObject tempTraceModel = ExtensionPointHelper.getTracePersistenceAdapter().get()
+				.getTraceModel(new ResourceSetImpl());
+		EObject tempTlink = traceAdapter.createTrace(traceType, tempTraceModel, selection);
+
+		Connection connection = new Connection(source, targets, tempTlink);
+
+		return traceAdapter.getAllTraceLinks(traceModel).stream().anyMatch(c -> c.equals(connection));
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.documentation/.classpath b/bundles/org.eclipse.capra.documentation/.classpath
new file mode 100644
index 0000000..5fe8405
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="docu"/>
+	<classpathentry kind="src" path="images"/>
+	<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="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.capra.documentation/.project b/bundles/org.eclipse.capra.documentation/.project
similarity index 100%
rename from org.eclipse.capra.documentation/.project
rename to bundles/org.eclipse.capra.documentation/.project
diff --git a/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c1a51a7
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Documentation
+Bundle-SymbolicName: org.eclipse.capra.documentation;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.help
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.documentation/build.properties b/bundles/org.eclipse.capra.documentation/build.properties
new file mode 100644
index 0000000..6bf5e2f
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/build.properties
@@ -0,0 +1,18 @@
+###############################################################################
+# 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.. = docu/,\
+		   images/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.documentation/docu/capraDocumentation-toc.xml b/bundles/org.eclipse.capra.documentation/docu/capraDocumentation-toc.xml
new file mode 100644
index 0000000..a021803
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/docu/capraDocumentation-toc.xml
@@ -0,0 +1,70 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!--
+    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
+ -->
+<toc topic="docu/capraDocumentation.html" label="capraDocumentation">
+	<topic href="docu/capraDocumentation.html" label="Capra Help Contents">
+		<topic href="docu/capraDocumentation.html#user-guide" label="User Guide">
+			<topic href="docu/capraDocumentation.html#introduction-what-is-capra" label="Introduction -- What is Capra?"></topic>
+			<topic href="docu/capraDocumentation.html#getting-started" label="Getting Started">
+				<topic href="docu/capraDocumentation.html#prerequisites" label="Prerequisites"></topic>
+				<topic href="docu/capraDocumentation.html#installing-capra" label="Installing Capra">
+					<topic href="docu/capraDocumentation.html#installing-through-an-update-site" label="Installing Capra through an update site"></topic>
+					<topic href="docu/capraDocumentation.html#manual-installation-import-from-git" label="Installing Capra manually with Git"></topic>
+				</topic>
+			</topic>
+			<topic href="docu/capraDocumentation.html#traceability-concepts" label="Traceability Concepts">
+				<topic href="docu/capraDocumentation.html#definition-of-traceability" label="Definition of traceability"></topic>
+				<topic href="docu/capraDocumentation.html#what-is-a-traceability-link" label="What is a traceability link?"></topic>
+				<topic href="docu/capraDocumentation.html#types-of-traceability-links" label="Types of traceability links"></topic>
+				<topic href="docu/capraDocumentation.html#what-is-an-artifact" label="What is an artifact?"></topic>
+				<topic href="docu/capraDocumentation.html#what-is-an-artifact-handler" label="What is an artifact handler?"></topic>
+			</topic>
+			<topic href="docu/capraDocumentation.html#practical-examples" label="Practical Examples">
+				<topic href="docu/capraDocumentation.html#creating-traceability-links" label="Creating Traceability Links">
+					<topic href="docu/capraDocumentation.html#a-link-from-a-requirement-to-a-feature-representing-the-requirement-in-the-feature-model" label="A link from a requirement to a feature representing the requirement in the feature model"></topic>
+					<topic href="docu/capraDocumentation.html#a-link-from-a-feature-to-the-state-machine-that-describes-the-behavior-of-the-feature" label="A link from a feature to the state machine that describes the behavior of the feature"></topic>
+					<topic href="docu/capraDocumentation.html#a-link-from-a-state-machine-to-test-case-that-tests-the-behavior-described-by-the-state-machine" label="A link from a state machine to test case that tests the behavior described by the state machine"></topic>
+					<topic href="docu/capraDocumentation.html#a-link-from-a-requirement-to-a-pdf-document-that-describes-safety-issues-that-need-to-be-considered" label="A link from a requirement to a PDF document that describes safety issues that need to be considered"></topic>
+					<topic href="docu/capraDocumentation.html#a-link-from-a-task-ticket-to-a-requirement-that-is-associated-with-the-ticket" label="A link from a task ticket to a requirement that is associated with the ticket"></topic>
+				</topic>
+				<topic href="docu/capraDocumentation.html#visualizing-traceability-links" label="Visualizing Traceability Links">
+					<topic href="docu/capraDocumentation.html#graphical-view" label="Graphical view"></topic>
+					<topic href="docu/capraDocumentation.html#traceability-matrix" label="Traceability matrix"></topic>
+				</topic>
+				<topic href="docu/capraDocumentation.html#detecting-and-fixing-inconsistencies" label="Detecting and Fixing Inconsistencies"></topic>
+				<topic href="docu/capraDocumentation.html#analyzing-change-impact" label="Analyzing change impact"></topic>
+			</topic>
+		</topic>
+		<topic href="docu/capraDocumentation.html#developer-guide" label="Developer Guide">
+			<topic href="docu/capraDocumentation.html#architecture-of-capra" label="Architecture of Capra">
+				<topic href="docu/capraDocumentation.html#traceability-metamodel" label="Traceability Metamodel"></topic>
+				<topic href="docu/capraDocumentation.html#artifact-handler" label="Artifact Handler"></topic>
+				<topic href="docu/capraDocumentation.html#persistence-handler" label="Persistence Handler"></topic>
+				<topic href="docu/capraDocumentation.html#priority-handler" label="Priority Handler"></topic>
+			</topic>
+			<topic href="docu/capraDocumentation.html#capra-api" label="Capra API">
+				<topic href="docu/capraDocumentation.html#adding-a-custom-traceability-metamodel" label="Adding a custom Traceability Metamodel"></topic>
+				<topic href="docu/capraDocumentation.html#adding-a-custom-artifact-metamodel" label="Adding a custom Artifact metamodel"></topic>
+				<topic href="docu/capraDocumentation.html#adding-a-new-artifact-handler" label="Adding a new artifact handler"></topic>
+			</topic>
+			<topic href="docu/capraDocumentation.html#changing-the-storage-location-of-the-traceability-model" label="Changing the storage location of the traceability model">
+				<topic href="docu/capraDocumentation.html#edit-existing-persistence-handler" label="Edit existing Persistence Handler"></topic>
+				<topic href="docu/capraDocumentation.html#add-a-new-persistence-handler" label="Add a new Persistence Handler"></topic>
+			</topic>
+			<topic href="docu/capraDocumentation.html#taking-care-of-multiple-handlers-for-the-same-artifact-type" label="Taking care of multiple handlers for the same artifact type"></topic>
+			<topic href="docu/capraDocumentation.html#adding-new-source-files" label="Adding new source files"></topic>
+		</topic>
+		<topic href="docu/capraDocumentation.html#references" label="Rerefences"></topic>
+	</topic>
+</toc>
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.documentation/docu/capraDocumentation.html b/bundles/org.eclipse.capra.documentation/docu/capraDocumentation.html
new file mode 100644
index 0000000..ce54a9e
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/docu/capraDocumentation.html
@@ -0,0 +1,497 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+	</head>
+	<body>
+		<h1 id="capra-help-contents">Capra Help Contents</h1>
+		<h2 id="user-guide">User Guide</h2>
+		<h3 id="introduction-what-is-capra">Introduction &#8212; What is Capra?</h3>
+		<p>Capra is a dedicated traceability management tool that allows the creation, management, visualization, and analysis of traceability links within Eclipse. Traceability links can be created between arbitrary artifacts, including all EMF model elements, all types of source code files supported by the Eclipse Platform through specialized development tools, tickets and bugs managed by Eclipse Mylyn, and all other artifacts for which an appropriate wrapper is provided. Capra is highly configurable and allows users (in a company or project) to define link types that are useful to them. </p>
+		<p>Compared to other similar projects which may have similar features, Capra is not a modeling tool or a tool for requirements management. All functionality is focused on providing traceability capabilities, i.e., the ability to create and visualize links between artifacts modeled in different domain-specific languages. This allows the architecture to be highly modular and the tool to be extremely customizable.</p>
+		<h3 id="getting-started">Getting Started</h3>
+		<p>This section describes the prerequisites to run Capra and how to install the tool.</p>
+		<h4 id="prerequisites">Prerequisites</h4>
+		<p>Before downloading and using Capra, first download a distribution of the Eclipse Modeling Environment and make sure you have the following installed:</p>
+		<ul>
+			<li>
+				<a href="http://plantuml.com/eclipse.html">PlantUML</a>: Use the nightlies 
+				<a href="http://hallvard.github.io/plantuml/">update site</a> in Eclipse&#8217;s &#8220;Install new software...&#8221; feature. Version 1.1.11 or higher should be installed through this link. Older versions advertised on the website will not work! It might also be necessary to install 
+				<a href="http://www.graphviz.org">Graphviz</a> binaries on your system to view the visualisation of traceability links.
+			</li>
+			<li>
+				<a href="https://wiki.eclipse.org/Xcore">Xcore</a>: Install through Eclipse&#8217;s &#8220;Install new software...&#8221; feature. Select the Mars distribution &#8220;http://download.eclipse.org/releases/mars/&#8221; in the work with field. 
+			</li>
+			<li>
+				<a href="https://www.eclipse.org/mylyn/">Mylyn</a>: Install the &#8220;Mylyn Builds Connector: Hudson/Jenkins&#8221; through Eclipse&#8217;s &#8220;Install new software...&#8221; feature
+			</li>
+			<li>
+				<a href="https://www.eclipse.org/cdt/">C/C++ Development Tools</a>: : Use Eclipse&#8217;s &#8220;Install new software...&#8221; feature
+			</li>
+			<li>
+				<a href="https://www.eclipse.org/jdt">Java Development Tools</a>: Use Eclipse&#8217;s &#8220;Install new software...&#8221; feature
+			</li>
+			<li>
+				<a href="https://eclipse.org/xtend/">Xtend</a>: Install through the Eclipse Market Place
+			</li>
+			<li>
+				<a href="https://eclipse.org/papyrus/">Papyrus</a>: Install through the Eclipse Market Place 
+			</li>
+		</ul>
+		<h4 id="installing-capra">Installing Capra</h4>
+		<p>Capra can be installed either through an update site or manually.</p>
+		<h5 id="installing-through-an-update-site">Installing Capra through an update site</h5>
+		<ul>
+			<li>Go to the 
+				<a href="https://github.com/Salome-Maro/TraceabilityManagement">Capra Github repository</a>.
+			</li>
+			<li>Click on &#8220;Releases&#8221; (Please note that the current release is a Pre-release and the official release will be available once the tool is an Eclipse project)</li>
+			<li>Download the file 
+				<code>Capra_v.0.1.zip</code> (Note the location of your download)
+			</li>
+			<li>Open your Eclipse environment</li>
+			<li>Make sure that you have all the dependencies listed above installed</li>
+			<li>Click on Help &gt;&gt; Install New Software</li>
+			<li>Click on Add and select Archive</li>
+			<li>Select your zip file and click Add</li>
+			<li>You should see the features that Capra has grouped into several categories as shown in Figure 1.</li>
+			<li>To get a minimum version of Capra working, install all the features in Core and at least one artifact wrapper. This means that if you for instance install only the EMFHandler, then you will only be able to create traceability links between model elements contained in EMF models. It is recommended to install all available artifact handlers.</li>
+			<li>Install the features in the visualization and notification categories in order to get their functionality working. </li>
+			<li>Restart Eclipse</li>
+			<li>Go to perspectives and switch to the Capra perspective</li>
+			<li>Now you can create traceability links as described in 
+				<a href="#creating-traceability-links">Creating Traceability Links</a>.
+			</li>
+		</ul>
+		<p><figure><img src="../images/updatesite.png" width="600"/><figcaption>Figure 1: Installing Capra from the Updatesite</figcaption></figure></p>
+		<h5 id="manual-installation-import-from-git">Installing Capra manually with Git</h5>
+		<ul>
+			<li>Open your Eclipse Environment</li>
+			<li>Go to File &gt;&gt; Import and select Git &gt;&gt; Projects from Git</li>
+			<li>Use the 
+				<a href="https://git.eclipse.org/r/capra/org.eclipse.capra">Git repository</a> and import all available projects to your workspace
+			</li>
+			<li>Build your workspace</li>
+			<li>Make sure that all the projects have no errors.</li>
+			<li>Click on Run &gt;&gt; Run Configurations and create a new Eclipse Application Configuration</li>
+			<li>Select your running workspace</li>
+			<li>Click Finish</li>
+			<li>Once the new workspace opens, create or import projects that you want to use to create traceability links</li>
+			<li>Go to perspectives and switch to the Capra perspective</li>
+			<li>Now you can create traceability links as described in 
+				<a href="#creating-traceability-links">Creating Traceability Links</a>.
+			</li>
+		</ul>
+		<h3 id="traceability-concepts">Traceability Concepts</h3>
+		<p>In this section, important concepts for traceability are described.</p>
+		<h4 id="definition-of-traceability">Definition of traceability</h4>
+		<p>Traceability can be defined as the ability to relate different artifacts created during the development of a software system. Traceability allows creating and using links between system and software development artifacts. For instance, this allows connecting the origin of a requirement with its specification, the design elements that address its specification, the code that implements these design elements, and the acceptance tests that check if the requirement has been achieved.</p>
+		<h4 id="what-is-a-traceability-link">What is a traceability link?</h4>
+		<p>The connections between different artifacts in a software development environment are called traceability links. A traceability link can connect two or more elements to imply that there is a relationship between these elements.</p>
+		<h4 id="types-of-traceability-links">Types of traceability links</h4>
+		<p>Depending on the requirements of a domain, traceability links can have different types. There are three different categories that can lead to different types of traceability links: the shape of a link, the semantics of a link, and the direction of a link. </p>
+		<ul>
+			<li>Link Shape: A link can have a source and target which means that you can only use it to connect two artifacts, or it can be of N-nary type, meaning that you can connect more than two artifacts using the same link.</li>
+			<li>Link Semantics: Traceability links can carry different semantics. The semantics of a link can be implied through the link name, e.g., &#8220;satisfies&#8221;, &#8220;implements&#8221;, &#8220;tests&#8221;. It is also possible to enforce &#8220;technical&#8221; restrictions on which kind of artifacts a link can connect. For example, a &#8220;tests&#8221; link type can only allow connecting a test to a requirement. Link semantics are defined through a 
+				<a href="#traceability-metamodel">traceability metamodel</a> and are configurable in Capra.
+			</li>
+			<li>Direction of a link: A traceability link can be either a directed link or a bi-directional link. A directed link has a &#8220;source&#8221; and &#8220;target(s)&#8221; relationship where the link is from the source and points to the target(s). A directed link also means that one can navigate from &#8220;source&#8221; to target(s) but not vice versa. A bi-directional link means that the link has no semantics in the direction and one can navigate from any connected artifact to the other connected artifact(s).</li>
+		</ul>
+		<h4 id="what-is-an-artifact">What is an artifact?</h4>
+		<p>Artifacts, and in particular software development artifacts refer to the resources that are either created or used as an input by a software development activity. For instance, the requirements elicitation activity produces artifacts known as requirements. Artifacts can be of different types, such as a requirement, a model element, a line of code, or a test case.</p>
+		<h4 id="what-is-an-artifact-handler">What is an artifact handler?</h4>
+		<p>As previously mentioned, there are different types of artifacts that can exist in a software development environment. However, Capra stores the traceability links in form of an EMF model. This means that, in principle, only EMF artifact types can be supported. To support other artifact types, there is a need to create EMF representations of the artifacts. This is what an artifact handler does. It creates an EMF representation of non-EMF artifacts. The representations are known as &#8220;artifact wrappers&#8221;. For example to be able to link to Java Code, an artifact handler for Java needs to be created. For details on how to add new artifact handlers to the tool, refer to 
+			<a href="#adding-a-new-artifact-handler">Adding a new artifact handler</a>. 
+		</p>
+		<h3 id="practical-examples">Practical Examples</h3>
+		<p>To demonstrate features of Capra, we take an example of the development of a Heating, Ventilation and Air Conditioning (HVAC) System. The resources can be dowloaded 
+			<a href="https://www.dropbox.com/s/h6vzmca7sjpq83q/HVAC%20Projects.zip?dl=0">here</a>. The project contains the following artifacts:
+		</p>
+		<ul>
+			<li>A set of requirements which are written in 
+				<a href="http://www.omg.org/spec/ReqIF/">ReqIF</a> format.
+			</li>
+			<li>A feature model describing the different features that can form several products of the HVAC system.</li>
+			<li>State machines used to describe the behavior of the system</li>
+			<li>Generated code from the state machines </li>
+			<li>Test cases defined as Java Unit tests and </li>
+			<li>Issues/Tasks/Tickets reported as development progresses which are stored on a 
+				<a href="https://trac.edgewall.org/wiki/TracTickets">Trac</a> server
+			</li>
+		</ul>
+		<p>These artifacts are shown in the figure below in the context of the development environment of the HVAC system.</p>
+		<p><figure><img src="../images/hvacProjects.png" width="800"/><figcaption>Figure 2: Resources for the HVAC system</figcaption></figure></p>
+		<h4 id="creating-traceability-links">Creating Traceability Links</h4>
+		<p>Capra provides the functionality to create traceability links between different artifacts as long as artifact handlers for those artifact types are available. The current version supports tracing to EMF models, Java code (up to method level), C/C++ code (up to function level), Task tickets from ticketing systems supported by Mylyn, arbitrary files (such as PDF or word), Test executions (Hudson and Jenkins), Papyrus models, and Capella models. </p>
+		<p>To show how traceability links can be created, we continue with the HVAC example and its artifacts as described above. Our aim is to establish the following links:</p>
+		<ol>
+			<li>A link from a requirement to a feature representing the requirement in the feature model</li>
+			<li>A link from a feature to the state machine that describes the behavior of the feature</li>
+			<li>A link from a state machine to test case that tests the behavior described by the state machine</li>
+			<li>A link from a requirement to a PDF document that describes safety issues that need to be considered</li>
+			<li>A link from a task ticket to a requirement that is associated with the ticket</li>
+		</ol>
+		<p>The procedure to create the above links is described below.</p>
+		<h5 id="a-link-from-a-requirement-to-a-feature-representing-the-requirement-in-the-feature-model">A link from a requirement to a feature representing the requirement in the feature model</h5>
+		<ol>
+			<li>To start, open the requirements (
+				<code>HVAC_Requirements.reqif</code> file), with the &#8220;Sample Reflective Ecore Editor&#8221; view. 
+			</li>
+			<li>Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. </li>
+			<li>Next, open the feature model (
+				<code>HVAC_Variants.pld</code>), drag and drop the feature named &#8220;Blower&#8221; into the selection view as well as shown in the figure below. 	<figure> 		<img src="../images/selectionView1.png" width="400"/> 		<figcaption> 		Figure 3: Capra Selection View 		</figcaption> 	</figure> 
+			</li>
+			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;. 	<figure> 		<img src="../images/createTrace.png" width="400"/> 		<figcaption> 		Figure 4: Creating a traceability link 		</figcaption> 	</figure> </li>
+			<li>A pop up window will appear, showing the types of links that can be created based on the selected element.</li>
+			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK. <figure> 	<img src="../images/relatedTo.png" width="400"/>	<figcaption> 	Figure 5: Creating a traceability link of type &#8220;RelatedTo&#8221; 	</figcaption> </figure> 	Since this is our first traceability link, a new folder will appear in the 	workspace with the name 
+				<code>__WorkspaceTraceModels</code>. This folder 	contains your 	trace model which contains the traceability link we just created and an 	artifact wrapper model which contains EMF 		representations of artifacts that 	are not in EMF format. In our case the artifact model should be empty since 	the artifacts we used 	to create the traceability link are all EMF elements. 	The trace model (
+				<code>traceModel.xmi</code>) should contain only one traceability link. <figure> 		<img src="../images/traceLink.png" width="700"/> 		<figcaption> 		Figure 6: A traceability link of type &#8220;RelatedTo&#8221; 		</figcaption> </figure>
+			</li>
+			<li>To remove the elements from the selection view, there are two options: 
+				<ol>
+					<li>Right click on an element and select &#8220;Remove from Selection&#8221;. This will only remove the selected element.</li>
+					<li>Right click anywhere on the selection view and click on &#8220;Clear selection&#8221;. This will remove all elements in the selection view. </li>
+				</ol>
+			</li>
+		</ol>
+		<h5 id="a-link-from-a-feature-to-the-state-machine-that-describes-the-behavior-of-the-feature">A link from a feature to the state machine that describes the behavior of the feature</h5>
+		<ol>
+			<li>From the feature model, drag and drop the feature named &#8220;Blower&#8221; into the selection view.</li>
+			<li>Open the 
+				<code>BlowerCtlr</code> state machine and drag and drop the parent element to the selection view.
+			</li>
+			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
+			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements.</li>
+			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK. 	Expand the 
+				<code>__WorkspaceTraceModels</code> project and open the trace model 	(
+				<code>traceModel.xmi</code>). You will notice that a second traceability link has been 	created.
+			</li>
+		</ol>
+		<h5 id="a-link-from-a-state-machine-to-test-case-that-tests-the-behavior-described-by-the-state-machine">A link from a state machine to test case that tests the behavior described by the state machine</h5>
+		<ol>
+			<li>Clear the selection view.</li>
+			<li>Again, Open the 
+				<code>BlowerCtlr</code> state machine and drag and drop the parent element to the selection view.
+			</li>
+			<li>Expand the project containing the tests, expand the 
+				<code>BlowerTest.java</code> file to reveal the BlowerTest class. Drag and drop this class to the selection view.
+			</li>
+			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
+			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements.</li>
+			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK.</li>
+		</ol>
+		<h5 id="a-link-from-a-requirement-to-a-pdf-document-that-describes-safety-issues-that-need-to-be-considered">A link from a requirement to a PDF document that describes safety issues that need to be considered</h5>
+		<ol>
+			<li>Clear the selection view.	</li>
+			<li>Expand the folder containing the requirements to reveal its contents.</li>
+			<li>Open the requirements (
+				<code>HVAC_Requirements.reqif</code> file), with the &#8220;Sample Reflective Ecore Editor&#8221; view.
+			</li>
+			<li>Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. </li>
+			<li>Select the 
+				<code>ISO26262 Requirements.png</code> file from the Project Explorer and drag and drop it to the selection view
+			</li>
+			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
+			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements and the definition of the traceability metamodel. In this example the traceability metamodel has only one traceability link type which is called &#8220;RelatedTo&#8221;.</li>
+			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK.</li>
+		</ol>
+		<h5 id="a-link-from-a-task-ticket-to-a-requirement-that-is-associated-with-the-ticket">A link from a task ticket to a requirement that is associated with the ticket</h5>
+		<ol>
+			<li>Clear the selection view</li>
+			<li>Drag Req 3 and drop it in the Selection view.</li>
+			<li>From the 
+				<code>Task List</code> view, where the tasks from the Trac server are listed, select one task and drag and drop it to the selection view
+			</li>
+			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
+			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements.</li>
+			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK.</li>
+		</ol>
+		<h4 id="visualizing-traceability-links">Visualizing Traceability Links</h4>
+		<p>Capra offers two ways in which you can visualize the traceability links that you have created. These are the Graphical view where the artifacts are shown as nodes and the links as edges in a graph and the Matrix view where artifacts are arranged in rows and column with an &#8220;x&#8221; mark in the cells to indicate a traceability link between the artifact in the column and that in the specific row.</p>
+		<h5 id="graphical-view">Graphical view</h5>
+		<p>To view the traceability links related to an artifact and the connected artifacts, simply select the artifact while in the &#8220;Sample Reflective Editor&#8221; View. The &#8220;Plant UML View&#8221; needs to be open as well.</p>
+		<p>The graphical view allows you to explore directly connected elements or transitively connected elements. To use the latter functionality, click on the downward arrow on right hand corner of the Plant UML View and click on &#8220;Toggle Transitivity&#8221;. This enables you to move from viewing only directly connected elements to the selected element, to viewing all the transitively connected elements. Use the same button to return to the previously active view.</p>
+		<p><figure>		<img src="../images/toggleTransitivity.png" width="600"/>		<figcaption>		Figure 7: Toggle Transitivity		</figcaption></figure></p>
+		<h5 id="traceability-matrix">Traceability matrix</h5>
+		<p>The traceability matrix can be created by selecting at least two model elements when the &#8220;Plant UML View&#8221; is open. This will list all the model elements as rows and columns and an &#8220;x&#8221; mark will appear to show that there is a traceability link between two elements. For instance, the picture below shows the resulting matrix when selecting Req3 and the artifact wrapper representing the PDF document. </p>
+		<p><figure>		<img src="../images/matrixView.png" width="400"/>		<figcaption>		Figure 8: Matrix View as a result of selecting two elements		</figcaption></figure></p>
+		<p>Selecting more than two model elements expands the matrix into a square matrix with same elements listed vertically and horizontally. </p>
+		<p><figure>		<img src="../images/matrixViewMany.png" width="600"/>		<figcaption>		Figure 9: Matrix view as a result of selecting more than two elements		</figcaption></figure></p>
+		<h4 id="detecting-and-fixing-inconsistencies">Detecting and Fixing Inconsistencies</h4>
+		<p>Traceability links need to be updated as the artifacts they connect evolve. Capra provides a feature to notify users when these artifacts change and to give suggestions on how the traceability links can be changed accordingly. The suggestions are offered as quick fixes to the user and if the user wants to make the changes suggested by the quick fix, the fix can be applied automatically by clicking on it. Currently Capra uses the Eclipse Notification Framework to detect changes and can capture rename, move, change and delete actions made on artifacts that have traceability links.</p>
+		<p>The problems detected by Capra are shown in the 
+			<code>Problems View</code> with a type &#8220;Capra problem&#8221;. We demonstrate the use of the 
+			<code>Problems View</code> and quick fixes using our practical example of the HVAC project.
+		</p>
+		<ol>
+			<li>Go to the &#8220;Project Explorer&#8221; and expand the project containing test cases. </li>
+			<li>Delete the file 
+				<code>BlowerTest.java</code>.
+			</li>
+			<li>Look at the 
+				<code>Problems view</code> and you will see a warning with a type &#8220;Capra Problem&#8221;. The issue tells you that there is a traceability link that points to a file named 
+				<code>BlowerTest.java</code>, but that file has been deleted. <figure> 		<img src="../images/problemView.png" width="700"/> 		<figcaption> 		Figure 9: Problem view showing Capra errors 		</figcaption> </figure>
+			</li>
+			<li>Right click on the warning and select Quick fix.</li>
+			<li>A window will appear showing the quick fixes options available. In this case there is one option, which is to delete the traceability link related to 
+				<code>BlowerTest.java</code> file. <figure> 		<img src="../images/quickFix.png" width="500"/> 		<figcaption> 		Figure 10: Quick Fixes 		</figcaption> </figure> 
+			</li>
+			<li>Click Finish.</li>
+			<li>Notice that the traceability link has been deleted and the warning disappears.</li>
+		</ol>
+		<h4 id="analyzing-change-impact">Analyzing change impact</h4>
+		<p>In this section, we describe scenarios in which Capra can be used to facilitate change impact analysis. Change impact analysis allows to evaluate the effect a change to an artifact will have on other artifacts. Using the HVAC example, assume that the customer requests a change on the requirement 
+			<code>REQ-3</code>. Before such a change is made, it is important for the company to know which other artefacts will be affected. With Capra, this can be achieved by selecting 
+			<code>REQ-3</code> and, using the visualization, reviewing all other artefacts that are related to 
+			<code>REQ-3</code> too. 
+		</p>
+		<p><figure>		<img src="../images/toggleTransitivity.png" width="700"/>		<figcaption>		Figure 11: Capra graphical view showing directly connected elements		</figcaption></figure> </p>
+		<p>For further analysis, clicking on Toggle transitivity as shown in the figure below will show all artifacts connected to 
+			<code>REQ-3</code> and their connnections to other artifacts. The end user can therefore use this information as a starting point for performing impact analysis.
+		</p>
+		<p><figure>		<img src="../images/graphical-view-transitive.png" width="500"/>		<figcaption>		Figure 12: Capra graphical view showing transitively connected elements		</figcaption></figure> </p>
+		<h2 id="developer-guide">Developer Guide</h2>
+		<p>The following subsection describes the technical architecture of the tool. This information is also available in more detail in a tool demonstration paper 
+			<a href="#references">(1)</a>. Our motivation for choosing this architecture design is based on a study on factors and guidelines that affect how a traceability tool can support traceability maintenance 
+			<a href="#references">(2)</a>. 
+		</p>
+		<h3 id="architecture-of-capra">Architecture of Capra</h3>
+		<p>Capra is an Eclipse plugin and uses the Eclipse Modeling Framework (EMF) as its base technology. It stores the traceability model as an EMF model. The tool relies on the 
+			<a href="https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points">Eclipse Extension mechanism</a> and provides extension points for those parts of the tool that can be customized. Based on requirements we collected from many interested parties in the industry, the tool is customizable at four points: 
+		</p>
+		<ol>
+			<li>The types of links to be supported;</li>
+			<li>Which types of artifacts can be traced to;</li>
+			<li>How the links should be stored;</li>
+			<li>The artifact handler that should be used in case there is more than one available for one artifact type.</li>
+		</ol>
+		<p>Additionally, Capra has an API which makes traceability data available to other tools. The current version uses the provided traceability data to visualize it graphically.</p>
+		<p>The figure below depicts the extension points. The rationale for each of them is described in the following.</p>
+		<p><figure>		<img src="../images/capraArchitecture.png" width="600"/>		<figcaption>		Figure 13: The Architecture of Capra		</figcaption></figure> </p>
+		<h4 id="traceability-metamodel">Traceability Metamodel</h4>
+		<p>Depending on the company, development context, and process used, the traceability links required can differ. For example, traceability links for a company developing web-based solutions are not the same as links for companies developing embedded software. In the former case, traceability links can help connect certain entries in the server configuration files to specific requirements. The traceability links for embedded software need to relate, e.g., the hardware specification to the software design. Both concepts do not make sense in the respective other domain.</p>
+		<p>To address different link types, the tool offers an extension point for the traceability metamodel. Here the end user (company), can define the types of links through a metamodel and supply it to the tool. Examples of link types are &#8220;verifies&#8221;, &#8220;implements&#8221;, &#8220;refines&#8221;, &#8220;related to&#8221; etc. In addition to link types, the metamodel can also define additional information to be stored with each link. It might be desirable, e.g., to store the date and time the link was created or which user created it.</p>
+		<h4 id="artifact-handler">Artifact Handler</h4>
+		<p>Software development usually involves a number of activities such as requirements engineering, design, implementation, and testing. In most cases, each of these activities use different tools and produce artifacts of different formats. A traceability tool needs to ensure that the different formats can be traced to and from. Since different companies use different tools, it is not easy to foresee which formats a traceability tool should support. This problem of diverse artifacts existing in the development environment has been noted by several studies on traceability. Our tool offers an extension point for Artifact Handlers which allows adding artifact formats based on the needs of the end users.</p>
+		<p>As discussed, Capra stores the traceability links as an EMF model. To be able to support tracing to other formats, EMF representations of these other formats are required. Implementing an extension for a certain format means providing an EMF representation of that format to the tool using the artifact handler extension point. </p>
+		<h4 id="persistence-handler">Persistence Handler</h4>
+		<p>The storage of traceability links is another factor that can vary depending on company policies or project set-ups. For some cases it makes sense that there is a traceability model per project while in some cases there can be one traceability model for the whole workspace. The extension point Persistence Handler allows defining such storage locations. It will also allow integrating the traceability model with versioning solutions such as EMF Store, CDO or Git.</p>
+		<h4 id="priority-handler">Priority Handler</h4>
+		<p>In situations where there is more than one artifact handler that can handle the same artifact type, the tool provides an extension point for a so called Priority Handler. Here the user can define which handler should be used. </p>
+		<h3 id="capra-api">Capra API</h3>
+		<p>Capra provides several programming interfaces that can be used by other plugins to access the traceability data. Currently, there are three interfaces: 
+			<code>ArtifactMetamodelAdapter</code>, 
+			<code>TraceMetamodelAdapter</code> and 
+			<code>TracePersistenceAdapter</code>. 
+			<code>ArtifactMetaodelAdapter</code> has methods that provide access to the artifact wrappers and their contents,  
+			<code>TraceMetamodelAdapter</code> has methods that provide access to the traceability links and the content of the links and the 
+			<code>TracePersistenceAdapter</code> has methods that provide access to the traceability model and the artifact wrapper model. The traceability model containing the traceability links is available to other tools. That means that traceability data can be used by other tools for specialised tasks such as impact analysis.
+		</p>
+		<p>A good example on how these methods can be used is in the plugin 
+			<code>org.eclipse.capra.ui.plantuml</code>. This plugin utilizes the methods to get the traceability model and its links and also to determine which artifacts are connected by the links. The plugin uses the results of these methods to create a string that can be rendered as a diagram using the PlantUML view. For example in the file 
+			<code>VisualizationHelper</code>, the method 
+			<code>CreateMatrix()</code> calls a method 
+			<code>isThereATraceBetween()</code> which is part of the
+			<br/>
+			<code>TraceMetamodelAdapter</code> interface. 
+		</p>
+		<p><figure>		<img src="../images/interface.png" width="600"/>		<figcaption>		Figure 14: Use of the method &#8220;isThereATraceBetween()&#8221; provided by the `TraceMetamodelAdapter` interface		</figcaption></figure></p>
+		<h4 id="adding-a-custom-traceability-metamodel">Adding a custom Traceability Metamodel</h4>
+		<p>To define your own traceability metamodel follow the steps below:</p>
+		<ol>
+			<li>Create a Java project and name it 
+				<code>org.eclipse.capra.MyTraceabilityMetaModel</code>
+			</li>
+			<li>Create a new folder and name it 
+				<code>model</code>
+			</li>
+			<li>In the 
+				<code>model</code> folder create a new file and name it 
+				<code>MyTraceabilityMetaModel.xcore</code>. A pop up window will appear asking if you want to add the Xtext nature to the project. Click &#8220;Yes&#8221;.
+			</li>
+			<li>Define your traceability metamodel as required. In our example, we add two types of traceability links i.e &#8220;implements&#8221; and &#8220;tests&#8221; <figure> 		<img src="../images/traceMetamodelDefinition.png" width="400"/>		<figcaption> 		Figure 15: Tracemetamodel Definition 		</figcaption> </figure> </li>
+			<li>Open the 
+				<code>plugin.xml</code> file of the new project and click on the &#8220;Extension Points&#8221; tab 
+			</li>
+			<li>Un-check the check box that says &#8220;Show only extension points from the required plugins&#8221; </li>
+			<li>In the text box for the &#8220;Extension point filter&#8221; type &#8220;Traceability&#8221; and select 
+				<code>org.eclipse.capra.configuration.traceabilityMetaModel</code>
+			</li>
+			<li>Click Finish. <figure> 		<img src="../images/addTraceExtension.png" width="500"/> 		<figcaption> 		Figure 16: Adding the Trace metamodel extension point 		</figcaption> </figure> </li>
+			<li>Another pop up window will appear asking if you want to add the project 
+				<code>org.eclipse.capra.core</code> to the list of plugin dependencies. Click Yes 
+			</li>
+			<li>Right click on the newly added extension, and click on &#8220;New&#8221; then 
+				<code>TraceabilityMetaModelAdapter</code>. A new 
+				<code>TraceabilityMetaModelAdapter</code> will be created 	<figure> 		<img src="../images/newTMAdapter.png" width="700"/> 		<figcaption> 		Figure 17: Adding the Trace metamodel extension point 		</figcaption> 	</figure> 	
+			</li>
+			<li>Click on the newly created 
+				<code>TraceabilityMetaModelAdapter</code>. On the right hand side, we need to provide a class for this extension in which we will implement all the required interfaces. 
+			</li>
+			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
+				<code>src</code> and name your class <figure> 		<img src="../images/newClass.png" width="700"> </img>		<figcaption> 		Figure 18: Add new Class 		</figcaption> </figure> <figure> 		<img src="../images/addNewTraceAdapterClass.png" width="500"/> 		<figcaption> 		Figure 19: Add new Trace Adapter Class 		</figcaption> </figure> 
+			</li>
+			<li>Click Finish and a class will be created with the methods to be implemented in it. </li>
+			<li>Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. </li>
+		</ol>
+		<h4 id="adding-a-custom-artifact-metamodel">Adding a custom Artifact metamodel</h4>
+		<p>To define your own artifact metamodel, follow the steps below:</p>
+		<ol>
+			<li>In the same project used to define the traceability metamodel, go to the 
+				<code>model</code> folder, create a new file and name it 
+				<code>artifact.xcore</code>.
+			</li>
+			<li>Define the artifact metamodel as in the picture below. Note that you can modify this definition to fit your needs. <figure> 		<img src="../images/artifactMetamodelDefinition.png" width="400"/> 		<figcaption> 		Figure 20: Artifact Metamodel definition 		</figcaption> </figure> </li>
+			<li>Next, open the 
+				<code>plugin.xml</code> file of the project and click on the &#8220;Extension Points&#8221; tab
+			</li>
+			<li>Un-check the checkbox that says &#8220;Show only extension points from the required plugins&#8221; </li>
+			<li>In the textbox for &#8220;Extension point filter&#8221; type &#8220;Artifact&#8221; and select 
+				<code>org.eclipse.capra.configuration.artifactMetamodel</code>
+			</li>
+			<li>Right click on the newly added extension, and click on &#8220;New&#8221; then 
+				<code>ArtifactMetamodelAdapter</code>. A new 
+				<code>ArtifactMetamodelAdapter</code> will be created <figure> 		<img src="../images/newArtifactAdapter.png" width="600"/>		<figcaption> 		Figure 21: Artifact adapter definition 		</figcaption> </figure> 
+			</li>
+			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
+				<code>src</code> and name your class <figure> 		<img src="../images/newArtifactAdapterClass.png" width="500"/> 		<figcaption> 		Figure 22: Artifact adapter Class definition 		</figcaption> </figure> 
+			</li>
+			<li>Click Finish and a class will be created with the methods to be implemented in it. </li>
+			<li>Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. </li>
+		</ol>
+		<p>NOTE: To test your new Traceability metamodel and artifact model, first close the project 
+			<code>org.eclipse.capra.generic.tracemodels</code>. Otherwise that project will be used by Capra.
+		</p>
+		<h4 id="adding-a-new-artifact-handler">Adding a new artifact handler</h4>
+		<p>In case you want Capra to support an artifact type that is not already supported, you will need to create a new artifact handler for the particular artifact type.</p>
+		<p>As an example, we describe how the Java artifact handler was added using the following steps:</p>
+		<ol>
+			<li>Create a new plugin project and name it 
+				<code>org.eclipse.capra.handler.jdt</code>.
+			</li>
+			<li>In the 
+				<code>src</code> folder of the new project, create a package and name it 
+				<code>org.eclipse.capra.handler.jdt</code>.
+			</li>
+			<li>Expand the 
+				<code>META-INF</code> folder , open the 
+				<code>MANIFEST.MF</code> file and click on the &#8220;Extensions&#8221; tab
+			</li>
+			<li>Click on Add. A pop up window will appear with a list of available extension points.</li>
+			<li>Un-check the checkbox that says &#8220;Show only extension points from the required plugins&#8221; </li>
+			<li>In the textbox for &#8220;Extension point filter&#8221; type &#8220;Artifact&#8221; and select 
+				<code>org.eclipse.capra.configuration.artifactMetaModel</code> and click Finish.
+			</li>
+			<li>Another pop up window will appear asking if you want to add the project 
+				<code>org.eclipse.capra.core</code> to the list of plugin dependencies. Click Yes 
+			</li>
+			<li>Right click on the newly added extension, and click on &#8220;New&#8221;, then &#8220;ArtifactHandler&#8221;. A new 
+				<code>ArtifactHandler</code> will be created. <figure> 		<img src="../images/newArtifactHandler.png" width="600"/>		<figcaption> 		Figure 23: New Artifact Handler definition 		</figcaption> </figure>
+			</li>
+			<li>Click on the newly created 
+				<code>ArtifactHandler</code>. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
+			</li>
+			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
+				<code>src</code> and name your class <figure> 		<img src="../images/newArtifactClass.png" width="500"/>		<figcaption> 		Figure 24: New Artifact Handler Class definition 		</figcaption> </figure>
+			</li>
+			<li>Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.</li>
+			<li>Implement all required methods. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. </li>
+		</ol>
+		<h3 id="changing-the-storage-location-of-the-traceability-model">Changing the storage location of the traceability model</h3>
+		<p>The storage of the traceability model and the artifact handler model is not fixed and can be modified depending on the users' needs and requirements. To change the storage location of the traceability model there are two options.</p>
+		<ol>
+			<li>To edit the existing persistence handler project OR </li>
+			<li>To create a completely new persistence handler.</li>
+		</ol>
+		<h4 id="edit-existing-persistence-handler">Edit existing Persistence Handler</h4>
+		<ol>
+			<li>Expand the project 
+				<code>org.eclipse.capra.generic.persistance</code>.
+			</li>
+			<li>Expand the 
+				<code>src</code> folder and then the 
+				<code>org.eclipse.capra.generic.persistence</code> package
+			</li>
+			<li>Open the file 
+				<code>TracePersistenceAdapter.java</code>.
+			</li>
+			<li>Edit the static variables 
+				<code>DEFAULT_PROJECT_NAME</code>, 
+				<code>DEFAULT_TRACE_MODEL_NAME</code> and 
+				<code>DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME</code> to reflect the new location and new model names for your traceability model and artifact wrapper model. <figure> 		<img src="../images/editPersistenceHandler.png" width="700"/> 		<figcaption> 		Figure 25: Editing existing Persistence Handler 		</figcaption> </figure>
+			</li>
+			<li>Save the project and Run Capra</li>
+		</ol>
+		<h4 id="add-a-new-persistence-handler">Add a new Persistence Handler</h4>
+		<ol>
+			<li>Create a new plugin project and name it 
+				<code>org.eclipse.capra.MyPersistenceHandler</code>
+			</li>
+			<li>In the 
+				<code>src</code> folder create a package and name it 
+				<code>org.eclipse.capra.MyPersistenceHandler</code>.
+			</li>
+			<li>Expand the 
+				<code>META-INF</code> folder , Open the 
+				<code>MANIFEST.MF</code> file and click on the &#8220;Extensions&#8221; tab.
+			</li>
+			<li>Click on Add. A pop up window will appear with a list of available extension points.</li>
+			<li>Un-check the checkbox that says &#8220;Show only extension points from the required plugins&#8221; </li>
+			<li>In the textbox for &#8220;Extension point filter&#8221; type &#8220;Persistence&#8221;, select 
+				<code>org.eclipse.capra.configuration.persistenceHandler</code> and click Finish. <figure> 		<img src="../images/addPersistenceHandler.png" width="500"/> 		<figcaption> 		Figure 26: Add new Persistence Handler 		</figcaption> </figure>
+			</li>
+			<li>Another pop up window will appear asking if you want to add the project 
+				<code>org.eclipse.capra.core</code> to the list of plugin dependencies. Click Yes. 
+			</li>
+			<li>Right click on the newly added extension, and click on &#8220;New&#8221;, then 
+				<code>persistenceHandler</code>. A new Persistence Handler will be created. <figure> 		<img src="../images/newPersistenceHandler.png" width="600"/>		<figcaption> 		Figure 27: New Persistence Handler 		</figcaption> </figure>
+			</li>
+			<li>Click on the newly created 
+				<code>persistenceHandler</code>. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
+			</li>
+			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
+				<code>src</code> and name your class. <figure> 		<img src="../images/newPersistenceHandlerClass.png" width="500"/> 		<figcaption> 		Figure 28: New Persistence Handler Class 		</figcaption> </figure>
+			</li>
+			<li>Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.</li>
+			<li>Implement all methods according to your needs. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name.</li>
+		</ol>
+		<h3 id="taking-care-of-multiple-handlers-for-the-same-artifact-type">Taking care of multiple handlers for the same artifact type</h3>
+		<p>There are cases in which several handlers are available for one artifact type. It is important during configuration to select which handler should be given a priority for the particular artifact type. This can be done by editing the code in the Priority Handler as follows:</p>
+		<ol>
+			<li>Expand the project 
+				<code>org.eclipse.capra.generic.priority</code>.
+			</li>
+			<li>Expand the src folder and then the 
+				<code>org.eclipse.capra.generic.priority</code> package.
+			</li>
+			<li>Open the file 
+				<code>DefaultPriorityHander.java</code>.
+			</li>
+			<li>Modify the code to select the correct handler. For instance, the code below selects a 
+				<code>hudsonHandler</code> when the element selected is a Test element or a build element. <figure> 		<img src="../images/priorityHandlerCode.png" width="700"/> 		<figcaption> 		Figure 29: Code for the Priority Handler 		</figcaption> </figure>
+			</li>
+		</ol>
+		<h3 id="adding-new-source-files">Adding new source files</h3>
+		<p>It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.</p>
+		<p>Install the 
+			<a href="https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool">Eclipse Releng Tools</a>. They contain the copyright tool. Use the following copyright header:
+		</p>
+		<pre><code>Copyright (c) ${date} 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
+</code></pre>
+		<p>The Contributors entry can be replaced with the appropriate names. Use &#8220;Fix copyrights&#8221; from the context menu to add the copyrights to all relevant files in a project or folder.</p>
+		<h2 id="references">Rerefences</h2>
+		<p>1. Maro, S. and Steghöfer, JP., 2016, September. Capra: A Configurable and Extendable Traceability Management Tool. In 2016 IEEE 24th International Requirements Engineering Conference (RE). IEEE.
+			<br/>2. Maro, S., Anjorin A., Wohlrab R. and Steghöfer, JP., 2016, September. Traceability Maintenance: Factors and Guidelines. In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference. IEEE.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.documentation/docu/capraDocumentation.textile b/bundles/org.eclipse.capra.documentation/docu/capraDocumentation.textile
new file mode 100644
index 0000000..2d44565
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/docu/capraDocumentation.textile
@@ -0,0 +1,380 @@
+h1(#capra-help-contents). Capra Help Contents
+
+h2(#user-guide). User Guide
+
+h3(#introduction-what-is-capra). Introduction -- What is Capra?
+
+Capra is a dedicated traceability management tool that allows the creation, management, visualization, and analysis of traceability links within Eclipse. Traceability links can be created between arbitrary artifacts, including all EMF model elements, all types of source code files supported by the Eclipse Platform through specialized development tools, tickets and bugs managed by Eclipse Mylyn, and all other artifacts for which an appropriate wrapper is provided. Capra is highly configurable and allows users (in a company or project) to define link types that are useful to them. 
+
+Compared to other similar projects which may have similar features, Capra is not a modeling tool or a tool for requirements management. All functionality is focused on providing traceability capabilities, i.e., the ability to create and visualize links between artifacts modeled in different domain-specific languages. This allows the architecture to be highly modular and the tool to be extremely customizable.
+
+h3(#getting-started). Getting Started
+
+This section describes the prerequisites to run Capra and how to install the tool.
+
+h4(#prerequisites). Prerequisites
+
+Before downloading and using Capra, first download a distribution of the Eclipse Modeling Environment and make sure you have the following installed:
+
+* "PlantUML":http://plantuml.com/eclipse.html: Use the nightlies "update site":http://hallvard.github.io/plantuml/ in Eclipse's "Install new software..." feature. Version 1.1.11 or higher should be installed through this link. Older versions advertised on the website will not work! It might also be necessary to install "Graphviz":http://www.graphviz.org binaries on your system to view the visualisation of traceability links.
+* "Xcore":https://wiki.eclipse.org/Xcore: Install through Eclipse's "Install new software..." feature. Select the Mars distribution "http://download.eclipse.org/releases/mars/" in the work with field. 
+* "Mylyn":https://www.eclipse.org/mylyn/: Install the "Mylyn Builds Connector: Hudson/Jenkins" through Eclipse's "Install new software..." feature
+* "C/C++ Development Tools":https://www.eclipse.org/cdt/: : Use Eclipse's "Install new software..." feature
+* "Java Development Tools":https://www.eclipse.org/jdt: Use Eclipse's "Install new software..." feature
+* "Xtend":https://eclipse.org/xtend/: Install through the Eclipse Market Place
+* "Papyrus":https://eclipse.org/papyrus/: Install through the Eclipse Market Place 
+
+h4(#installing-capra). Installing Capra
+
+Capra can be installed either through an update site or manually.
+
+h5(#installing-through-an-update-site). Installing Capra through an update site
+
+* Go to the "Capra Github repository":https://github.com/Salome-Maro/TraceabilityManagement.
+* Click on "Releases" (Please note that the current release is a Pre-release and the official release will be available once the tool is an Eclipse project)
+* Download the file @Capra_v.0.1.zip@ (Note the location of your download)
+* Open your Eclipse environment
+* Make sure that you have all the dependencies listed above installed
+* Click on Help >> Install New Software
+* Click on Add and select Archive
+* Select your zip file and click Add
+* You should see the features that Capra has grouped into several categories as shown in Figure 1.
+* To get a minimum version of Capra working, install all the features in Core and at least one artifact wrapper. This means that if you for instance install only the EMFHandler, then you will only be able to create traceability links between model elements contained in EMF models. It is recommended to install all available artifact handlers.
+* Install the features in the visualization and notification categories in order to get their functionality working. 
+* Restart Eclipse
+* Go to perspectives and switch to the Capra perspective
+* Now you can create traceability links as described in "Creating Traceability Links":#creating-traceability-links.
+
+<figure><img src="../images/updatesite.png" width="600"/><figcaption>Figure 1: Installing Capra from the Updatesite</figcaption></figure>
+
+h5(#manual-installation-import-from-git). Installing Capra manually with Git
+
+* Open your Eclipse Environment
+* Go to File >> Import and select Git >> Projects from Git
+* Use the "Git repository":https://git.eclipse.org/r/capra/org.eclipse.capra and import all available projects to your workspace
+* Build your workspace
+* Make sure that all the projects have no errors.
+* Click on Run >> Run Configurations and create a new Eclipse Application Configuration
+* Select your running workspace
+* Click Finish
+* Once the new workspace opens, create or import projects that you want to use to create traceability links
+* Go to perspectives and switch to the Capra perspective
+* Now you can create traceability links as described in "Creating Traceability Links":#creating-traceability-links.
+
+h3(#traceability-concepts). Traceability Concepts
+
+In this section, important concepts for traceability are described.
+
+h4(#definition-of-traceability). Definition of traceability
+
+Traceability can be defined as the ability to relate different artifacts created during the development of a software system. Traceability allows creating and using links between system and software development artifacts. For instance, this allows connecting the origin of a requirement with its specification, the design elements that address its specification, the code that implements these design elements, and the acceptance tests that check if the requirement has been achieved.
+
+h4(#what-is-a-traceability-link). What is a traceability link?
+
+The connections between different artifacts in a software development environment are called traceability links. A traceability link can connect two or more elements to imply that there is a relationship between these elements.
+
+h4(#types-of-traceability-links). Types of traceability links
+
+Depending on the requirements of a domain, traceability links can have different types. There are three different categories that can lead to different types of traceability links: the shape of a link, the semantics of a link, and the direction of a link. 
+
+* Link Shape: A link can have a source and target which means that you can only use it to connect two artifacts, or it can be of N-nary type, meaning that you can connect more than two artifacts using the same link.
+* Link Semantics: Traceability links can carry different semantics. The semantics of a link can be implied through the link name, e.g., "satisfies", "implements", "tests". It is also possible to enforce "technical" restrictions on which kind of artifacts a link can connect. For example, a "tests" link type can only allow connecting a test to a requirement. Link semantics are defined through a "traceability metamodel":#traceability-metamodel and are configurable in Capra.
+* Direction of a link: A traceability link can be either a directed link or a bi-directional link. A directed link has a "source" and "target(s)" relationship where the link is from the source and points to the target(s). A directed link also means that one can navigate from "source" to target(s) but not vice versa. A bi-directional link means that the link has no semantics in the direction and one can navigate from any connected artifact to the other connected artifact(s).
+
+h4(#what-is-an-artifact). What is an artifact?
+
+Artifacts, and in particular software development artifacts refer to the resources that are either created or used as an input by a software development activity. For instance, the requirements elicitation activity produces artifacts known as requirements. Artifacts can be of different types, such as a requirement, a model element, a line of code, or a test case.
+
+h4(#what-is-an-artifact-handler). What is an artifact handler?
+
+As previously mentioned, there are different types of artifacts that can exist in a software development environment. However, Capra stores the traceability links in form of an EMF model. This means that, in principle, only EMF artifact types can be supported. To support other artifact types, there is a need to create EMF representations of the artifacts. This is what an artifact handler does. It creates an EMF representation of non-EMF artifacts. The representations are known as "artifact wrappers". For example to be able to link to Java Code, an artifact handler for Java needs to be created. For details on how to add new artifact handlers to the tool, refer to "Adding a new artifact handler":#adding-a-new-artifact-handler. 
+
+h3(#practical-examples). Practical Examples
+
+To demonstrate features of Capra, we take an example of the development of a Heating, Ventilation and Air Conditioning (HVAC) System. The resources can be dowloaded "here":https://www.dropbox.com/s/h6vzmca7sjpq83q/HVAC%20Projects.zip?dl=0. The project contains the following artifacts:
+
+* A set of requirements which are written in "ReqIF":http://www.omg.org/spec/ReqIF/ format.
+* A feature model describing the different features that can form several products of the HVAC system.
+* State machines used to describe the behavior of the system
+* Generated code from the state machines 
+* Test cases defined as Java Unit tests and 
+* Issues/Tasks/Tickets reported as development progresses which are stored on a "Trac":https://trac.edgewall.org/wiki/TracTickets server
+
+These artifacts are shown in the figure below in the context of the development environment of the HVAC system.
+
+<figure><img src="../images/hvacProjects.png" width="800"/><figcaption>Figure 2: Resources for the HVAC system</figcaption></figure>
+
+h4(#creating-traceability-links). Creating Traceability Links
+
+Capra provides the functionality to create traceability links between different artifacts as long as artifact handlers for those artifact types are available. The current version supports tracing to EMF models, Java code (up to method level), C/C++ code (up to function level), Task tickets from ticketing systems supported by Mylyn, arbitrary files (such as PDF or word), Test executions (Hudson and Jenkins), Papyrus models, and Capella models. 
+
+To show how traceability links can be created, we continue with the HVAC example and its artifacts as described above. Our aim is to establish the following links:
+
+# A link from a requirement to a feature representing the requirement in the feature model
+# A link from a feature to the state machine that describes the behavior of the feature
+# A link from a state machine to test case that tests the behavior described by the state machine
+# A link from a requirement to a PDF document that describes safety issues that need to be considered
+# A link from a task ticket to a requirement that is associated with the ticket
+
+The procedure to create the above links is described below.
+
+h5(#a-link-from-a-requirement-to-a-feature-representing-the-requirement-in-the-feature-model). A link from a requirement to a feature representing the requirement in the feature model
+
+# To start, open the requirements (@HVAC_Requirements.reqif@ file), with the "Sample Reflective Ecore Editor" view. 
+# Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
+# Next, open the feature model (@HVAC_Variants.pld@), drag and drop the feature named "Blower" into the selection view as well as shown in the figure below. 	<figure> 		<img src="../images/selectionView1.png" width="400"/> 		<figcaption> 		Figure 3: Capra Selection View 		</figcaption> 	</figure> 
+# Right click on the selection view and click on "Create Trace". 	<figure> 		<img src="../images/createTrace.png" width="400"/> 		<figcaption> 		Figure 4: Creating a traceability link 		</figcaption> 	</figure> 
+# A pop up window will appear, showing the types of links that can be created based on the selected element.
+# Choose a traceability link type to create (in our case "RelatedTo") and click OK. <figure> 	<img src="../images/relatedTo.png" width="400"/>	<figcaption> 	Figure 5: Creating a traceability link of type "RelatedTo" 	</figcaption> </figure> 	Since this is our first traceability link, a new folder will appear in the 	workspace with the name @__WorkspaceTraceModels@. This folder 	contains your 	trace model which contains the traceability link we just created and an 	artifact wrapper model which contains EMF 		representations of artifacts that 	are not in EMF format. In our case the artifact model should be empty since 	the artifacts we used 	to create the traceability link are all EMF elements. 	The trace model (@traceModel.xmi@) should contain only one traceability link. <figure> 		<img src="../images/traceLink.png" width="700"/> 		<figcaption> 		Figure 6: A traceability link of type "RelatedTo" 		</figcaption> </figure>
+# To remove the elements from the selection view, there are two options: 
+## Right click on an element and select "Remove from Selection". This will only remove the selected element.
+## Right click anywhere on the selection view and click on "Clear selection". This will remove all elements in the selection view. 
+
+h5(#a-link-from-a-feature-to-the-state-machine-that-describes-the-behavior-of-the-feature). A link from a feature to the state machine that describes the behavior of the feature
+
+# From the feature model, drag and drop the feature named "Blower" into the selection view.
+# Open the @BlowerCtlr@ state machine and drag and drop the parent element to the selection view.
+# Right click on the selection view and click on "Create Trace".
+# A pop up window will appear, showing the types of links that can be created based on the selected elements.
+# Choose a traceability link type to create (in our case "RelatedTo") and click OK. 	Expand the @__WorkspaceTraceModels@ project and open the trace model 	(@traceModel.xmi@). You will notice that a second traceability link has been 	created.
+
+h5(#a-link-from-a-state-machine-to-test-case-that-tests-the-behavior-described-by-the-state-machine). A link from a state machine to test case that tests the behavior described by the state machine
+
+# Clear the selection view.
+# Again, Open the @BlowerCtlr@ state machine and drag and drop the parent element to the selection view.
+# Expand the project containing the tests, expand the @BlowerTest.java@ file to reveal the BlowerTest class. Drag and drop this class to the selection view.
+# Right click on the selection view and click on "Create Trace".
+# A pop up window will appear, showing the types of links that can be created based on the selected elements.
+# Choose a traceability link type to create (in our case "RelatedTo") and click OK.
+
+h5(#a-link-from-a-requirement-to-a-pdf-document-that-describes-safety-issues-that-need-to-be-considered). A link from a requirement to a PDF document that describes safety issues that need to be considered
+
+# Clear the selection view.	
+# Expand the folder containing the requirements to reveal its contents.
+# Open the requirements (@HVAC_Requirements.reqif@ file), with the "Sample Reflective Ecore Editor" view.
+# Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
+# Select the @ISO26262 Requirements.png@ file from the Project Explorer and drag and drop it to the selection view
+# Right click on the selection view and click on "Create Trace".
+# A pop up window will appear, showing the types of links that can be created based on the selected elements and the definition of the traceability metamodel. In this example the traceability metamodel has only one traceability link type which is called "RelatedTo".
+# Choose a traceability link type to create (in our case "RelatedTo") and click OK.
+
+h5(#a-link-from-a-task-ticket-to-a-requirement-that-is-associated-with-the-ticket). A link from a task ticket to a requirement that is associated with the ticket
+
+# Clear the selection view
+# Drag Req 3 and drop it in the Selection view.
+# From the @Task List@ view, where the tasks from the Trac server are listed, select one task and drag and drop it to the selection view
+# Right click on the selection view and click on "Create Trace".
+# A pop up window will appear, showing the types of links that can be created based on the selected elements.
+# Choose a traceability link type to create (in our case "RelatedTo") and click OK.
+
+h4(#visualizing-traceability-links). Visualizing Traceability Links
+
+Capra offers two ways in which you can visualize the traceability links that you have created. These are the Graphical view where the artifacts are shown as nodes and the links as edges in a graph and the Matrix view where artifacts are arranged in rows and column with an "x" mark in the cells to indicate a traceability link between the artifact in the column and that in the specific row.
+
+h5(#graphical-view). Graphical view
+
+To view the traceability links related to an artifact and the connected artifacts, simply select the artifact while in the "Sample Reflective Editor" View. The "Plant UML View" needs to be open as well.
+
+The graphical view allows you to explore directly connected elements or transitively connected elements. To use the latter functionality, click on the downward arrow on right hand corner of the Plant UML View and click on "Toggle Transitivity". This enables you to move from viewing only directly connected elements to the selected element, to viewing all the transitively connected elements. Use the same button to return to the previously active view.
+
+<figure>		<img src="../images/toggleTransitivity.png" width="600"/>		<figcaption>		Figure 7: Toggle Transitivity		</figcaption></figure>
+
+h5(#traceability-matrix). Traceability matrix
+
+The traceability matrix can be created by selecting at least two model elements when the "Plant UML View" is open. This will list all the model elements as rows and columns and an "x" mark will appear to show that there is a traceability link between two elements. For instance, the picture below shows the resulting matrix when selecting Req3 and the artifact wrapper representing the PDF document. 
+
+<figure>		<img src="../images/matrixView.png" width="400"/>		<figcaption>		Figure 8: Matrix View as a result of selecting two elements		</figcaption></figure>
+
+Selecting more than two model elements expands the matrix into a square matrix with same elements listed vertically and horizontally. 
+
+<figure>		<img src="../images/matrixViewMany.png" width="600"/>		<figcaption>		Figure 9: Matrix view as a result of selecting more than two elements		</figcaption></figure>
+
+h4(#detecting-and-fixing-inconsistencies). Detecting and Fixing Inconsistencies
+
+Traceability links need to be updated as the artifacts they connect evolve. Capra provides a feature to notify users when these artifacts change and to give suggestions on how the traceability links can be changed accordingly. The suggestions are offered as quick fixes to the user and if the user wants to make the changes suggested by the quick fix, the fix can be applied automatically by clicking on it. Currently Capra uses the Eclipse Notification Framework to detect changes and can capture rename, move, change and delete actions made on artifacts that have traceability links.
+
+The problems detected by Capra are shown in the @Problems View@ with a type "Capra problem". We demonstrate the use of the @Problems View@ and quick fixes using our practical example of the HVAC project.
+
+# Go to the "Project Explorer" and expand the project containing test cases. 
+# Delete the file @BlowerTest.java@.
+# Look at the @Problems view@ and you will see a warning with a type "Capra Problem". The issue tells you that there is a traceability link that points to a file named @BlowerTest.java@, but that file has been deleted. <figure> 		<img src="../images/problemView.png" width="700"/> 		<figcaption> 		Figure 9: Problem view showing Capra errors 		</figcaption> </figure>
+# Right click on the warning and select Quick fix.
+# A window will appear showing the quick fixes options available. In this case there is one option, which is to delete the traceability link related to @BlowerTest.java@ file. <figure> 		<img src="../images/quickFix.png" width="500"/> 		<figcaption> 		Figure 10: Quick Fixes 		</figcaption> </figure> 
+# Click Finish.
+# Notice that the traceability link has been deleted and the warning disappears.
+
+h4(#analyzing-change-impact). Analyzing change impact
+
+In this section, we describe scenarios in which Capra can be used to facilitate change impact analysis. Change impact analysis allows to evaluate the effect a change to an artifact will have on other artifacts. Using the HVAC example, assume that the customer requests a change on the requirement @REQ-3@. Before such a change is made, it is important for the company to know which other artefacts will be affected. With Capra, this can be achieved by selecting @REQ-3@ and, using the visualization, reviewing all other artefacts that are related to @REQ-3@ too. 
+
+<figure>		<img src="../images/toggleTransitivity.png" width="700"/>		<figcaption>		Figure 11: Capra graphical view showing directly connected elements		</figcaption></figure> 
+
+For further analysis, clicking on Toggle transitivity as shown in the figure below will show all artifacts connected to @REQ-3@ and their connnections to other artifacts. The end user can therefore use this information as a starting point for performing impact analysis.
+
+<figure>		<img src="../images/graphical-view-transitive.png" width="500"/>		<figcaption>		Figure 12: Capra graphical view showing transitively connected elements		</figcaption></figure> 
+
+h2(#developer-guide). Developer Guide
+
+The following subsection describes the technical architecture of the tool. This information is also available in more detail in a tool demonstration paper "(1)":#references. Our motivation for choosing this architecture design is based on a study on factors and guidelines that affect how a traceability tool can support traceability maintenance "(2)":#references. 
+
+h3(#architecture-of-capra). Architecture of Capra
+
+Capra is an Eclipse plugin and uses the Eclipse Modeling Framework (EMF) as its base technology. It stores the traceability model as an EMF model. The tool relies on the "Eclipse Extension mechanism":https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points and provides extension points for those parts of the tool that can be customized. Based on requirements we collected from many interested parties in the industry, the tool is customizable at four points: 
+
+# The types of links to be supported;
+# Which types of artifacts can be traced to;
+# How the links should be stored;
+# The artifact handler that should be used in case there is more than one available for one artifact type.
+
+Additionally, Capra has an API which makes traceability data available to other tools. The current version uses the provided traceability data to visualize it graphically.
+
+The figure below depicts the extension points. The rationale for each of them is described in the following.
+
+<figure>		<img src="../images/capraArchitecture.png" width="600"/>		<figcaption>		Figure 13: The Architecture of Capra		</figcaption></figure> 
+
+h4(#traceability-metamodel). Traceability Metamodel
+
+Depending on the company, development context, and process used, the traceability links required can differ. For example, traceability links for a company developing web-based solutions are not the same as links for companies developing embedded software. In the former case, traceability links can help connect certain entries in the server configuration files to specific requirements. The traceability links for embedded software need to relate, e.g., the hardware specification to the software design. Both concepts do not make sense in the respective other domain.
+
+To address different link types, the tool offers an extension point for the traceability metamodel. Here the end user (company), can define the types of links through a metamodel and supply it to the tool. Examples of link types are "verifies", "implements", "refines", "related to" etc. In addition to link types, the metamodel can also define additional information to be stored with each link. It might be desirable, e.g., to store the date and time the link was created or which user created it.
+
+h4(#artifact-handler). Artifact Handler
+
+Software development usually involves a number of activities such as requirements engineering, design, implementation, and testing. In most cases, each of these activities use different tools and produce artifacts of different formats. A traceability tool needs to ensure that the different formats can be traced to and from. Since different companies use different tools, it is not easy to foresee which formats a traceability tool should support. This problem of diverse artifacts existing in the development environment has been noted by several studies on traceability. Our tool offers an extension point for Artifact Handlers which allows adding artifact formats based on the needs of the end users.
+
+As discussed, Capra stores the traceability links as an EMF model. To be able to support tracing to other formats, EMF representations of these other formats are required. Implementing an extension for a certain format means providing an EMF representation of that format to the tool using the artifact handler extension point. 
+
+h4(#persistence-handler). Persistence Handler
+
+The storage of traceability links is another factor that can vary depending on company policies or project set-ups. For some cases it makes sense that there is a traceability model per project while in some cases there can be one traceability model for the whole workspace. The extension point Persistence Handler allows defining such storage locations. It will also allow integrating the traceability model with versioning solutions such as EMF Store, CDO or Git.
+
+h4(#priority-handler). Priority Handler
+
+In situations where there is more than one artifact handler that can handle the same artifact type, the tool provides an extension point for a so called Priority Handler. Here the user can define which handler should be used. 
+
+h3(#capra-api). Capra API
+
+Capra provides several programming interfaces that can be used by other plugins to access the traceability data. Currently, there are three interfaces: @ArtifactMetamodelAdapter@, @TraceMetamodelAdapter@ and @TracePersistenceAdapter@. @ArtifactMetaodelAdapter@ has methods that provide access to the artifact wrappers and their contents,  @TraceMetamodelAdapter@ has methods that provide access to the traceability links and the content of the links and the @TracePersistenceAdapter@ has methods that provide access to the traceability model and the artifact wrapper model. The traceability model containing the traceability links is available to other tools. That means that traceability data can be used by other tools for specialised tasks such as impact analysis.
+
+A good example on how these methods can be used is in the plugin @org.eclipse.capra.ui.plantuml@. This plugin utilizes the methods to get the traceability model and its links and also to determine which artifacts are connected by the links. The plugin uses the results of these methods to create a string that can be rendered as a diagram using the PlantUML view. For example in the file @VisualizationHelper@, the method @CreateMatrix()@ calls a method @isThereATraceBetween()@ which is part of the
+@TraceMetamodelAdapter@ interface. 
+
+<figure>		<img src="../images/interface.png" width="600"/>		<figcaption>		Figure 14: Use of the method "isThereATraceBetween()" provided by the `TraceMetamodelAdapter` interface		</figcaption></figure>
+
+h4(#adding-a-custom-traceability-metamodel). Adding a custom Traceability Metamodel
+
+To define your own traceability metamodel follow the steps below:
+
+# Create a Java project and name it @org.eclipse.capra.MyTraceabilityMetaModel@
+# Create a new folder and name it @model@
+# In the @model@ folder create a new file and name it @MyTraceabilityMetaModel.xcore@. A pop up window will appear asking if you want to add the Xtext nature to the project. Click "Yes".
+# Define your traceability metamodel as required. In our example, we add two types of traceability links i.e "implements" and "tests" <figure> 		<img src="../images/traceMetamodelDefinition.png" width="400"/>		<figcaption> 		Figure 15: Tracemetamodel Definition 		</figcaption> </figure> 
+# Open the @plugin.xml@ file of the new project and click on the "Extension Points" tab 
+# Un-check the check box that says "Show only extension points from the required plugins" 
+# In the text box for the "Extension point filter" type "Traceability" and select @org.eclipse.capra.configuration.traceabilityMetaModel@
+# Click Finish. <figure> 		<img src="../images/addTraceExtension.png" width="500"/> 		<figcaption> 		Figure 16: Adding the Trace metamodel extension point 		</figcaption> </figure> 
+# Another pop up window will appear asking if you want to add the project @org.eclipse.capra.core@ to the list of plugin dependencies. Click Yes 
+# Right click on the newly added extension, and click on "New" then @TraceabilityMetaModelAdapter@. A new @TraceabilityMetaModelAdapter@ will be created 	<figure> 		<img src="../images/newTMAdapter.png" width="700"/> 		<figcaption> 		Figure 17: Adding the Trace metamodel extension point 		</figcaption> 	</figure> 	
+# Click on the newly created @TraceabilityMetaModelAdapter@. On the right hand side, we need to provide a class for this extension in which we will implement all the required interfaces. 
+# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class <figure> 		<img src="../images/newClass.png" width="700"> </img>		<figcaption> 		Figure 18: Add new Class 		</figcaption> </figure> <figure> 		<img src="../images/addNewTraceAdapterClass.png" width="500"/> 		<figcaption> 		Figure 19: Add new Trace Adapter Class 		</figcaption> </figure> 
+# Click Finish and a class will be created with the methods to be implemented in it. 
+# Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
+
+h4(#adding-a-custom-artifact-metamodel). Adding a custom Artifact metamodel
+
+To define your own artifact metamodel, follow the steps below:
+
+# In the same project used to define the traceability metamodel, go to the @model@ folder, create a new file and name it @artifact.xcore@.
+# Define the artifact metamodel as in the picture below. Note that you can modify this definition to fit your needs. <figure> 		<img src="../images/artifactMetamodelDefinition.png" width="400"/> 		<figcaption> 		Figure 20: Artifact Metamodel definition 		</figcaption> </figure> 
+# Next, open the @plugin.xml@ file of the project and click on the "Extension Points" tab
+# Un-check the checkbox that says "Show only extension points from the required plugins" 
+# In the textbox for "Extension point filter" type "Artifact" and select @org.eclipse.capra.configuration.artifactMetamodel@
+# Right click on the newly added extension, and click on "New" then @ArtifactMetamodelAdapter@. A new @ArtifactMetamodelAdapter@ will be created <figure> 		<img src="../images/newArtifactAdapter.png" width="600"/>		<figcaption> 		Figure 21: Artifact adapter definition 		</figcaption> </figure> 
+# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class <figure> 		<img src="../images/newArtifactAdapterClass.png" width="500"/> 		<figcaption> 		Figure 22: Artifact adapter Class definition 		</figcaption> </figure> 
+# Click Finish and a class will be created with the methods to be implemented in it. 
+# Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
+
+NOTE: To test your new Traceability metamodel and artifact model, first close the project @org.eclipse.capra.generic.tracemodels@. Otherwise that project will be used by Capra.
+
+h4(#adding-a-new-artifact-handler). Adding a new artifact handler
+
+In case you want Capra to support an artifact type that is not already supported, you will need to create a new artifact handler for the particular artifact type.
+
+As an example, we describe how the Java artifact handler was added using the following steps:
+
+# Create a new plugin project and name it @org.eclipse.capra.handler.jdt@.
+# In the @src@ folder of the new project, create a package and name it @org.eclipse.capra.handler.jdt@.
+# Expand the @META-INF@ folder , open the @MANIFEST.MF@ file and click on the "Extensions" tab
+# Click on Add. A pop up window will appear with a list of available extension points.
+# Un-check the checkbox that says "Show only extension points from the required plugins" 
+# In the textbox for "Extension point filter" type "Artifact" and select @org.eclipse.capra.configuration.artifactMetaModel@ and click Finish.
+# Another pop up window will appear asking if you want to add the project @org.eclipse.capra.core@ to the list of plugin dependencies. Click Yes 
+# Right click on the newly added extension, and click on "New", then "ArtifactHandler". A new @ArtifactHandler@ will be created. <figure> 		<img src="../images/newArtifactHandler.png" width="600"/>		<figcaption> 		Figure 23: New Artifact Handler definition 		</figcaption> </figure>
+# Click on the newly created @ArtifactHandler@. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
+# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class <figure> 		<img src="../images/newArtifactClass.png" width="500"/>		<figcaption> 		Figure 24: New Artifact Handler Class definition 		</figcaption> </figure>
+# Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
+# Implement all required methods. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
+
+h3(#changing-the-storage-location-of-the-traceability-model). Changing the storage location of the traceability model
+
+The storage of the traceability model and the artifact handler model is not fixed and can be modified depending on the users' needs and requirements. To change the storage location of the traceability model there are two options.
+
+# To edit the existing persistence handler project OR 
+# To create a completely new persistence handler.
+
+h4(#edit-existing-persistence-handler). Edit existing Persistence Handler
+
+# Expand the project @org.eclipse.capra.generic.persistance@.
+# Expand the @src@ folder and then the @org.eclipse.capra.generic.persistence@ package
+# Open the file @TracePersistenceAdapter.java@.
+# Edit the static variables @DEFAULT_PROJECT_NAME@, @DEFAULT_TRACE_MODEL_NAME@ and @DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME@ to reflect the new location and new model names for your traceability model and artifact wrapper model. <figure> 		<img src="../images/editPersistenceHandler.png" width="700"/> 		<figcaption> 		Figure 25: Editing existing Persistence Handler 		</figcaption> </figure>
+# Save the project and Run Capra
+
+h4(#add-a-new-persistence-handler). Add a new Persistence Handler
+
+# Create a new plugin project and name it @org.eclipse.capra.MyPersistenceHandler@
+# In the @src@ folder create a package and name it @org.eclipse.capra.MyPersistenceHandler@.
+# Expand the @META-INF@ folder , Open the @MANIFEST.MF@ file and click on the "Extensions" tab.
+# Click on Add. A pop up window will appear with a list of available extension points.
+# Un-check the checkbox that says "Show only extension points from the required plugins" 
+# In the textbox for "Extension point filter" type "Persistence", select @org.eclipse.capra.configuration.persistenceHandler@ and click Finish. <figure> 		<img src="../images/addPersistenceHandler.png" width="500"/> 		<figcaption> 		Figure 26: Add new Persistence Handler 		</figcaption> </figure>
+# Another pop up window will appear asking if you want to add the project @org.eclipse.capra.core@ to the list of plugin dependencies. Click Yes. 
+# Right click on the newly added extension, and click on "New", then @persistenceHandler@. A new Persistence Handler will be created. <figure> 		<img src="../images/newPersistenceHandler.png" width="600"/>		<figcaption> 		Figure 27: New Persistence Handler 		</figcaption> </figure>
+# Click on the newly created @persistenceHandler@. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
+# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class. <figure> 		<img src="../images/newPersistenceHandlerClass.png" width="500"/> 		<figcaption> 		Figure 28: New Persistence Handler Class 		</figcaption> </figure>
+# Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
+# Implement all methods according to your needs. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name.
+
+h3(#taking-care-of-multiple-handlers-for-the-same-artifact-type). Taking care of multiple handlers for the same artifact type
+
+There are cases in which several handlers are available for one artifact type. It is important during configuration to select which handler should be given a priority for the particular artifact type. This can be done by editing the code in the Priority Handler as follows:
+
+# Expand the project @org.eclipse.capra.generic.priority@.
+# Expand the src folder and then the @org.eclipse.capra.generic.priority@ package.
+# Open the file @DefaultPriorityHander.java@.
+# Modify the code to select the correct handler. For instance, the code below selects a @hudsonHandler@ when the element selected is a Test element or a build element. <figure> 		<img src="../images/priorityHandlerCode.png" width="700"/> 		<figcaption> 		Figure 29: Code for the Priority Handler 		</figcaption> </figure>
+
+h3(#adding-new-source-files). Adding new source files
+
+It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.
+
+Install the "Eclipse Releng Tools":https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool. They contain the copyright tool. Use the following copyright header:
+
+bc.. Copyright (c) ${date} 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
+
+p. The Contributors entry can be replaced with the appropriate names. Use "Fix copyrights" from the context menu to add the copyrights to all relevant files in a project or folder.
+
+h2(#references). Rerefences
+
+1. Maro, S. and Steghöfer, JP., 2016, September. Capra: A Configurable and Extendable Traceability Management Tool. In 2016 IEEE 24th International Requirements Engineering Conference (RE). IEEE.
+2. Maro, S., Anjorin A., Wohlrab R. and Steghöfer, JP., 2016, September. Traceability Maintenance: Factors and Guidelines. In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference. IEEE.
diff --git a/bundles/org.eclipse.capra.documentation/images/Capra Documentation.md b/bundles/org.eclipse.capra.documentation/images/Capra Documentation.md
new file mode 100644
index 0000000..d79cdb0
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/images/Capra Documentation.md
@@ -0,0 +1,420 @@
+# Capra Help Contents
+
+## User Guide
+
+###  Introduction - What is Capra
+
+Capra is a dedicated traceability management tool that allows the creation, management, visualization, and analysis of trace links within Eclipse. Trace links can be created between arbitrary artifacts, including all EMF model elements, all types of source code files supported by the Eclipse Platform through specialized development tools, tickets and bugs managed by Eclipse Mylyn, and all other artifacts for which an appropriate wrapper is provided. Capra is highly configurable and allows users to create their own traceability meta-model.
+
+Compared to other similar projects which may have similar features, Capra is not a modeling tool or a tool for requirements management. All functionality is focused on providing traceability capabilities, i.e., the ability to create and visualize links between artifacts modeled in different domain-specific languages. This allows the architecture to be highly modular and the tool to be extremely customizable.
+
+###  Getting Started
+
+This section describes the prerequisites to run Capra and how to install the tool.
+
+#### Prerequisites
+
+Before downloading and using Capra, first download a distribution of the Eclipse Modeling Environment (Eclipse V 4.5 (Mars)) and make sure you have the following installed:
+
+* [PlantUML](http://plantuml.com/eclipse.html): Use the nightlies [update site](http://files.idi.ntnu.no/publish/plantuml/repository/) in Eclipse's "Install new software..." feature. Version 1.1.11 or higher should be installed through this link. Older versions advertised on the website will not work! It might also be necessary to install [Graphviz](http://www.graphviz.org) binaries on your system to view the visualisation of trace links.
+* [Xcore](https://wiki.eclipse.org/Xcore): Install through Eclipse's "Install new software..." feature
+* [Mylyn](https://www.eclipse.org/mylyn/): Install the "Mylyn Builds Connector: Hudson/Jenkins" through Eclipse's "Install new software..." feature
+* [C/C++ Development Tools](https://www.eclipse.org/cdt/): : Use Eclipse's "Install new software..." feature
+* [Java Development Tools](https://www.eclipse.org/jdt): Use Eclipse's "Install new software..." feature
+* [Xtend](https://eclipse.org/xtend/): Install through the Eclipse Market Place
+* [Papyrus](https://eclipse.org/papyrus/): Install through the Eclipse Market Place  
+
+
+#### Installing Capra
+
+Capra can be installed either through an update site or manually .
+
+##### Installing through an update site
+* Go to the [Capra GitHub repository](https://github.com/Salome-Maro/TraceabilityManagement).
+* Click on "Releases" (Please note that the current release is a Pre-release and the official release will be available once the tool is an Eclipse project)
+* Download the file `Capra_v.0.1.zip` (Note the location of your download)
+* Open your Eclipse environment
+* Make sure that you have all the dependencies listed above installed
+* Click on Help >> Install New Software
+* Click on Add and select Archive
+* Select your zip file and click Add
+* You should see the features that Capra has grouped into several categories.
+* To get a minimum version of Capra working, install all the features in Core and at least one artifact wrapper. This means that if you for instance install only the EMFHandler, then you will only be able to create traceability links between EMF models. It is recommended to install all available artifact handlers.
+* Install the features in the visualization and notification categories in order to get their functionality working. 
+* Restart Eclipse
+* Go to perspectives and switch to the Capra perspective
+* Now you can create traceability links as described in [Creating Traceability Links](#create-trace-links).
+
+![alt text](updatesite.png =700x)
+
+
+#####  Manual installation (Import from Git)
+* Open your Eclipse Environment
+* Go to File >> Import and select Git >> Projects from Git
+* Use the [GitHub repository](https://github.com/Salome-Maro/TraceabilityManagement) and import all available projects to your workspace
+* Build your workspace
+* Make sure that all the projects have no errors.
+* Click on Run >> Run Configurations and create a new Eclipse Application Configuration
+* Select your running workspace
+* Click Finish
+* Once the new workspace opens, create or import projects that you want to use to create traceability links
+* Go to perspectives and switch to the Capra perspective
+* Now you can create traceability links as described in [Creating Traceability Links](#create-trace-links).
+
+
+### Traceability Concepts
+
+In this section, important concepts for traceability are described.
+
+#### Definition of traceability
+
+Traceability can be defined as the ability to relate different artifacts created during the development of a software system. Traceability allows creating and using links between system and software development artifacts. For instance, this allows connecting the origin of a requirement with its specification, the design elements that address its specification, the code that implements these design elements, and the acceptance tests that check if the requirement has been achieved.
+
+#### What is a traceability link?
+
+The connections between different artifacts in a software development environment are called traceability links. A traceability link can connect two or more elements to imply that there is a relationship between these elements.
+
+#### Types of traceability links
+
+Depending on the requirements of a domain, traceability links can have different types. There are three different categories that can lead to different types of traceability links: the shape of a link, the semantics of a link, and the direction of a link. 
+
+* Link Shape: 
+A link can have a source and target which means that you can only use it to connect two artifacts, or it can be of N-nary type, meaning that you can connect more than two artifacts using the same link.
+* Link Semantics:
+Traceability links can carry different semantics. The semantics of a link can be implied through the link name, e.g., "satisfies", "implements", "tests". It is also possible to enforce "technical" restrictions on which kind of artifacts a link can connect. For example, a "tests" link type can only allow connecting a test to a requirement. Link semantics are defined through a [traceability metamodel](#traceability-metamodel) and are configurable in Capra.
+* Direction of a link:
+A trace link can be either a directed link or a bi-directional link. A directed link has a "source" and "target(s)" relationship where the link is from the source and points to the target(s). A directed link also means that one can navigate from "source" to target(s) but not vice versa. A bi-directional link means that the link has no semantics in the direction and one can navigate from any connected artifact to the other connected artifact(s).
+
+#### What is an artifact?
+Artifacts, and in particular software development artifacts refer to the resources that are either created or used as an input by a software development activity. For instance, the requirements elicitation activity produces artifacts known as requirements. Artifacts can be of different types, such as a requirement, a model element, a line of code, or a test case.
+
+#### What is an artifact handler?
+
+As previously mentioned, there are different types of artifacts that can exist in a software development environment. However, Capra stores the traceability links in form of an EMF model. This means that, basically only EMF artifact types can be supported. To support other artifact types, there is a need to create EMF representations of the artifacts. This is what an artifact handler does. It creates an EMF representation of non-EMF artifacts. The representations are known as "artifact wrappers". For example to be able to link to Java Code, an artifact handler for Java needs to created. For details on how to add new artifact handlers to the tool, refer to section [Adding a new artifact handler](#new-artifact-handler). 
+
+###  Practical Examples
+To demonstrate features of Capra, we take an example of the development of a Heating, Ventilation and Air Conditioning (HVAC) System.  The project contains the following artifacts:
+
+* A set of requirements which are written in [ReqIF](http://www.omg.org/spec/ReqIF/) format.
+* A feature model describing the different features that can form several products of the HVAC system.
+* State machines used to describe the behavior of the system
+* Generated code from the state machines 
+* Test cases defined as Java Unit tests and 
+* Issues/Tasks/Tickets reported as development progresses which are stored on a [Trac](https://trac.edgewall.org/wiki/TracTickets) server
+
+These artifacts are shown in the figure below in the context of the development environment of the HVAC system.
+
+![alt text](hvacProjects.png =800x)
+
+> Can we provide a link to where the project can be downloaded? 
+
+#### Creating Traceability Links <a id="create-trace-links"></a>
+
+Capra provides the functionality to create traceability links between different artifacts as long as artifact handlers for those artifact types are available. The current version supports tracing to EMF models, Java code (up to method level), C/C++ code (up to function level), Task tickets from ticketing systems supported by Mylyn, arbitrary files (such as PDF or word), Test executions (Hudson and Jenkins), Papyrus models, and Capella models. 
+
+To show how traceability links can be created, we continue with the HVAC example and its artifacts as described above. Our aim is to establish the following links. 
+
+1. A link from a requirement to a feature representing the requirement in the feature model
+2. A link from a feature to the state machine that describes the behavior of the feature
+3. A link from a state machine to test case that tests the behavior described by the state machine
+4. A link from a requirement to a PDF document that describes safety issues that need to be considered
+5. A link from a task ticket to a requirement that is associated with the ticket
+
+The procedure to create the above links is described below.
+
+##### A link from a requirement to a feature representing the requirement in the feature model
+
+1. To start, open the requirements (`HVAC_Requirements.reqif` file), with the "Sample Reflective Ecore Editor" view. 
+2.  Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
+3.  Next, open the feature model (`HVAC_Variants.pld`), drag and drop the feature named "Blower" into the selection view as well as shown in the figure below.  
+![alt text](selectionView1.png =400x)
+4. Right click on the selection view and click on "Create Trace".  
+![alt text](createTrace.png =300x)
+5. A pop up window will appear, showing the types of links that can be created based on the selected element.
+6. Choose a trace link type to create (in our case "RelatedTo") and click OK.                                                   
+![alt text](relatedTo.png =300x)
+7. Since this is our first trace link, a new folder will appear in the workspace with the name `__WorkspaceTraceModels`. This folder contains your trace model which contains the trace link we just created and an artifact wrapper model which contains EMF representations of artifacts that are not in EMF format. In our case the artifact model should be empty since the artifacts we used to create the trace link are all EMF elements. The trace model (`traceModel.xmi`) should contain only one trace link.  
+![alt text](traceLink.png =700x)	
+8. To remove an element from the selection view, right click on an element and select "Remove from Selection".
+9. To remove all elements, right click anywhere on the selection view and click on "Clear selection".
+
+
+##### A link from a feature to the state machine that describes the behavior of the feature
+
+1. From the feature model, drag and drop the feature named "Blower" into the selection view.
+2. Open the `BlowerCtlr` state machine and drag and drop the parent element to the selection view.
+3. Right click on the selection view and click on "Create Trace".
+4. A pop up window will appear, showing the types of links that can be created based on the selected elements.
+5. Choose a trace link type to create (in our case "RelatedTo") and click OK.
+6. Expand the `__WorkspaceTraceModels` project and open the trace model (`traceModel.xmi`). You will notice that a second trace link has been created.
+	
+##### A link from a state machine to test case that tests the behavior described by the state machine
+
+1. Clear the selection view.
+2. Again, Open the `BlowerCtlr` state machine and drag and drop the parent element to the selection view.
+3. Expand the project containing the tests, expand the `BlowerTest.java` file to reveal the BlowerTest class. Drag and drop this class to the selection view.
+4. Right click on the selection view and click on "Create Trace".
+5. A pop up window will appear, showing the types of links that can be created based on the selected elements.
+6. Choose a trace link type to create (in our case "RelatedTo") and click OK.
+	
+#####  A link from a requirement to a PDF document that describes safety issues that need to be considered
+	
+1. Clear the selection view.	
+2. Expand the folder containing the requirements to reveal its contents.
+3. Open the requirements (`HVAC_Requirements.reqif` file), with the "Sample Reflective Ecore Editor" view.
+4. Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
+5. Select the `ISO26262 Requirements.pdf` file from the Project Explorer and drag and drop it to the selection view
+6. Right click on the selection view and click on "Create Trace".
+7. A pop up window will appear, showing the types of links that can be created based on the selected elements.
+8. Choose a trace link type to create (in our case "RelatedTo") and click OK.
+
+##### A link from a task ticket to a requirement that is associated with the ticket
+
+1. Clear the selection view
+2. Drag Req 3 and drop it in the Selection view.
+3. From the `Task List` view, where the tasks from the Trac server are listed, select one task and drag and drop it to the selection view
+4. Right click on the selection view and click on "Create Trace".
+5. A pop up window will appear, showing the types of links that can be created based on the selected elements.
+6. Choose a trace link type to create (in our case "RelatedTo") and click OK.
+
+
+#### Visualizing Traceability Links
+
+Capra offers two ways in which you can visualize the traceability links that you have created. These are the Graphical view where the artifacts are shown as nodes and the links as edges in a graph and the Matrix view where artifacts are arranged in rows and column with an "x" mark in the cells to indicate a trace link between the artifact in the column and that in the specific row.
+
+
+
+##### Graphical view
+
+To view the traceability links related to an artifact and the connected artifacts, simply select the artifact while in the "Sample Reflective Editor" View. The "Plant UML View" needs to be open as well.
+
+The graphical view allows you to explore directly connected elements or transitively connected elements.  To use the latter functionality, click on the downward arrow on right hand corner of the Plant UML View and click on "Toggle Transitivity". This enables you to move from viewing only directly connected elements to the selected element, to viewing all the transitively connected elements. Use the same button to return to the previously active view.  
+
+![alt text](toggleTransitivity.pdf =700x)
+
+##### Traceability matrix
+
+The traceability matrix can be created by selecting at least two model elements when the "Plant UML View" is open. This will list all the model elements as rows and columns and an "x" mark will appear show that there is a trace link between two elements. For instance, the picture below shows the resulting matrix when selecting Req3 and the artifact wrapper representing the PDF document. 
+
+![alt text](matrixView.png)
+
+Selecting more than two model elements expands the matrix into a square matrix with same elements listed in vertically and horizontally. 
+
+![alt text](matrixViewMany.png =600x)
+
+#### Detecting and Fixing Inconsistencies
+
+Trace links need to be updated as the artifacts they connect evolve. Capra provides a feature to notify users when these artifacts evolve and give suggestions on how the trace links can be evolved. The suggestions are offered as quick fixes to the user and if the user wishes to make the changes suggested by the quick fix, the fix can be applied automatically by clicking on it. 
+
+The problems detected by Capra are shown in the "Problems" view with a type "Capra problem". We demonstrate the use of the Problems view and quick fixes using our practical example of the HVAC project.
+
+1. Go to the "Project Explorer" and expand the project containing test cases. 
+2. Delete the file `BlowerTest.java`.
+3. Look at the Problems view and you will see a warning with a type  "Capra problem". The issue tells you that there is a trace link that points to a file named `BlowerTest.java`, but that file has been deleted.  
+![alt text](problemView.png =700x)
+4. Right-click on the warning and select Quick fix.
+5. A window will appear showing the quick fixes options available. In this case there is one option, which is to delete the trace link related to `BlowerTest.java` file.  
+![alt text](quickFix.png =500x)
+6. Click Finish.
+7. Notice that the trace link has been deleted and the warning disappears.
+
+
+#### Analyzing change impact 
+In this section, we describe scenarios in which Capra can be used to facilitate change impact analysis. Change impact analysis means being able to evaluate the effect a change to an artifact will have to other artifacts. Using the HVAC example, assume that the customer requests a change on the requirements `REQ-3`. Before such a change is made, it is important for the company to know which other artefacts will be affected. With Capra, this can be done by selecting `REQ-3` and then using the visualization, one can see all other artefacts that are related to `REQ-3`.too. 
+
+![alt text](toggleTransitivity.pdf =700x)
+
+For further analysis, clicking on Toggle transitivity as shown in th figure below will show all artifacts connected to `REQ-3` and their connnections to other artifacts 
+
+![alt text](graphical-view-transitive.pdf =500x)
+
+
+## Developer Guide
+
+The following subsection describes the technical architecture of the tool. This information is also available in more detail in a tool demonstration paper[^fn1]. Our motivation for choosing this architecture design is based on a study on factors and guidelines that affect how a traceability tool can support traceabilityy maintenance[^fn2]. 
+
+### Architecture of Capra
+Capra is an Eclipse plugin and uses the Eclipse Modeling Framework (EMF) as its base technology. It stores the traceability model as an EMF model. The tool relies on the [Eclipse Extension mechanism](https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points) and provides extension points for those parts of the tool that can be customized. Based on requirements we collected from many interested parties in the industry, the tool is customizable at four points: 
+
+1. The types of links to be supported;
+2. Which types of artifacts can be traced to;
+3. How the links should be stored;
+4. The artifact handler that should be used in case there is more than one available for one artifact type.
+
+Additionally, Capra has an API which makes traceability data available to other tools. The current version uses the provided traceability data to visualize it graphically.
+
+
+The figure below depicts the extension points. The rationale for each of them is described in the following.
+
+![alt text](capraArchitecture.png =600x)
+
+#### Traceability Metamodel <a id="traceability-metamodel"></a>
+
+Depending on the company, development context, and process used, the traceability links required can differ. For example, traceability links for a company developing web-based solutions are not the same as links for companies developing embedded software. In the former case, traceability links can help connect certain entries in the server configuration files to specific requirements. The traceability links for embedded software need to relate, e.g., the hardware specification to the software design. Both concepts do not make sense in the respective other domain.
+
+To address the different link types, the tool offers an extension point for the traceability metamodel. Here the end user (company), can define the types of links through a metamodel and supply it to the tool. Examples of link types are "verifies", "implements", "refines", "related to" etc. In addition to link types, the metamodel can also define additional information to be stored with each link. It might be desirable, e.g., to store the date and time the link was created or which user created it.
+
+#### Artifact Handler
+
+Software development usually involves a number of activities such as requirements engineering, design, implementation, and testing. In most cases, each of these activities use different tools and produce artifacts of different formats. A traceability tool needs to ensure that the different formats can be traced to and from. Since different companies use different tools, it is not easy to foresee which formats a traceability tool should support. This problem of diverse artifacts existing in the development environment has been noted by several studies on traceability. Our tool offers an extension point for Artifact Handlers which allows adding artifact formats based on the needs of the end users.
+
+As discussed, Capra stores the traceability links as an EMF model. To be able to support tracing to other formats, EMF representations of these other formats are required. Implementing an extension for a certain format means providing an EMF representation of that format to the tool using the artifact handler extension point. 
+
+#### Persistence Handler
+
+The storage of traceability links is another factor that can vary depending on company policies or project set-ups. For some cases it makes sense that there is a traceability model per project while in some cases there can be one traceability model for the whole workspace. The extension point Persistence Handler allows defining such storage locations. It will also allow integrating the traceability model with versioning solutions such as EMF Store, CDO or Git.
+
+#### Priority Handler
+
+In situations where there is more than one artifact handler that can handle the same artifact type, the tool provides an extension point for a so called Priority Handler. Here the user can define which handler should be used. 
+
+#### Capra API
+
+Capra provides several programming interfaces that can be used by other plugins to access the traceability data. Currently, this is in three interfaces which are the `ArtifactMetaodelAdapter`, `TraceMetamodelAdapter` and `TracePersistenceAdapter`. 
+The `ArtifactMetaodelAdapter` has method that give you access to the artifact wrappers and their contents, the `TraceMetamodelAdapter` has methods that give you access to the traceability links and the content of the links and the `TracePersistenceAdapter` has methods that give access to the traceability model and the artifact wrapper model. The traceability model containing the traceability links is available to other tools this traceability data can b used for tasks such as impact analysis.
+
+A good example on how these methods can be used is in the plugin `org.eclipse.capra.ui.plantuml`. This plugin utilizes the methods to get the traceability model and its links and also to determine which artifacts are connected by the links. The plugin uses the results of these methods to create a string that can be rendered as a diagram using the PlantUML view. 
+For example the in the file `VisualizationHelper`, the method `CreateMatrix()` calls a method `isThereATraceBetween()` which is part of the  `TraceMetamodelAdapter` interface. 
+
+![alt text](interface.png =800x)
+
+
+
+### Adding a custom Traceability metamodel
+
+To define your own traceability metamodel follow the steps below:
+
+1. Create a Java project and name it `org.eclipse.capra.MyTraceabilityMetaModel`
+1. Create a new folder and name it `model`
+1. In the `model` folder create a new file and name it `MyTraceabilityMetaModel.xcore`. A pop up window will appear asking if you want to add the Xtext nature to the project. Click "Yes".
+1. Define your traceability metamodel as required. In our example, we add two types of traceability links i.e "implements" and "tests"  
+![alt text](traceMetamodelDefinition.pdf =350x)   
+1. Open the `plugin.xml` file of the new project and click on the "Extension Points" tab  
+1. Un-check the check box that says "Show only extension points from the required plugins"  
+1. In the text box for the "Extension point filter" type "Traceability" and select `org.eclipse.capra.configuration.traceabilityMetaModel`
+1. Click Finish.   
+![alt text](addTraceExtension.pdf =400x)   
+1. Another pop up window will appear asking is you want to add the project `org.eclipse.capra.core` to the list of plugin dependencies. Click Yes  
+1. Right-click on the newly added extension, and click on "New" then `TraceabilityMetaModelAdapter`. A new `TraceabilityMetaModelAdapter` will be created  
+![alt text](newTMAdapter.pdf =400x)  
+1. Click on the newly created `TraceabilityMetaModelAdapter`. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces.  
+1. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class  
+![alt text](newClass.pdf =600x) 
+![alt text](addNewTraceAdapterClass.png =600x)    
+1. Click Finish and a class will be created with the methods to be implemented in it.   
+1. Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
+
+### Adding a custom Artifact metamodel
+
+To define your own artifact metamodel, follow the steps below:
+
+1. In the same project used to define the traceability metamodel, go to the `model` folder, create a new file and name it `artifact.xcore`.
+1. Define the artifact metamodel as in the picture below. Note that you can modify this definition to fit your needs.  
+![alt text](artifactMetamodelDefinition.png) 
+1. Next, open the `plugin.xml` file of the project and click on the "Extension Points" tab
+1. Un-check the checkbox that says "Show only extension points from the required plugins"  
+1. In the textbox for "Extension point filter" type "Artifact" and select  `org.eclipse.capra.configuration.ArtifactMetamodel`
+1. Right-click on the newly added extension, and click on "New" then `ArtifactMetamodelAdapter`. A new `ArtifactMetamodelAdapter` will be created  
+ ![alt text](newArtifactAdapter.png =400x)
+1. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class      
+![alt text](newArtifactAdapterClass.png =400x)    
+1. Click Finish and a class will be created with the methods to be implemented in it.   
+1. Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
+
+NOTE: To test your new Traceability metamodel and artifact model, first close the project `org.eclipse.capra.generic.tracemodels`. Otherwise that project will be used by Capra.
+
+
+### Adding a new artifact handler <a id="new-artifact-handler"></a>
+
+In case you want Capra to support an artifact type that is not already supported, you will need to create a new artifact handler for the particular artifact type.
+
+As an example, we describe how the Java artifact handler was added using the following steps:
+
+1. Create a Java project and name it `org.eclipse.capra.handler.jdt`.
+1. In the `src` folder of the new project, create a package and name it `org.eclipse.capra.handler.jdt`.
+1. Right click on the project, click on "Configure" and select "Convert to Plugin Project"
+1. Expand the `META-INF` folder , Open the `MANIFEST.MF` file and click on the "Extensions" tab
+1. Click on Add. A pop up window will appear with a list of available extension points.
+1. Un-check the checkbox that says "Show only extension points from the required plugins" 
+1. In the textbox for "Extension point filter"type "Artifact" and select  `org.eclipse.capra.configuration.ArtifactMetaModel` and click Finish.
+1. Another pop up window will appear asking is you want to add the project `org.eclipse.capra.core` to the list of plugin dependencies. Click Yes 
+1. Right-click on the newly added extension, and click on "New" then "ArtifactHandler". A new `ArtifactHandler` will be created.  
+![alt text](newArtifactHandler.png =400x) 
+1. Click on the newly created `ArtifactHandler`. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces.  
+1. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class  
+![alt text](newArtifactClass.png  =400x)       
+1. Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
+1. Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
+
+### Changing the storage location of the traceability model
+
+The storage of the traceability model and the artifact handler model is not fixed and can be modified depending on the users needs and requirements. To change the storage location of the traceability model there are two options.
+
+1. To edit the existing persistence handler project OR 
+1. To create a completely new persistence handler.
+
+#### Edit existing Persistence Handler
+
+1. Expand the project `org.eclipse.capra.generic.persistance`.
+2. Expand the `src` folder and then the `org.eclipse.capra.generic.persistence` package
+3. Open the file `TracePersistenceAdapter.java`.
+4. Edit the static variables `DEFAULT_PROJECT_NAME`, `DEFAULT_TRACE_MODEL_NAME` and `DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME` to reflect the new location and new model names for your traceability model and artifact wrapper model.
+![alt text](editPersistenceHandler.png  =600x) 
+4. Save the project and Run Capra
+
+#### Add a new Persistence Handler
+1. Create a Java project and name it `org.eclipse.capra.MyPersistenceHandler`
+2. In the `src` folder create a package and name it `org.eclipse.capra.MyPersistenceHandler`.
+3. Right click on the project, click on "Configure" and select "Convert to Plugin Project"
+4. Expand the `META-INF` folder , Open the `MANIFEST.MF` file and click on the "Extensions" tab.`
+5. Click on Add. A pop up window will appear with a list of available extension points.
+6. Un-check the checkbox that says "Show only extension points from the required plugins" 
+6. In the textbox for "Extension point filter" type "Persistence" and select  `org.eclipse.capra.configuration.persistenceHandler` and click Finish.  
+![alt text](addPersistenceHandler.png  =400x) 
+7. Another pop up window will appear asking is you want to add the project `org.eclipse.capra.core` to the list of plugin dependencies. Click Yes. 
+6. Right-click on the newly added extension, and click on "New" then `persistenceHandler`. A new Persistence Handler will be created.  
+![alt text](newPersistenceHandler.png  =400x) 
+7. Click on the newly created `persistenceHandler`. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces.  
+8. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class.
+![alt text](newPersistenceHandlerClass.png =400x)
+9. Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
+10. Implement all the methods according to your needs. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name.
+
+
+### Taking care of multiple handlers for the same artifact type
+
+There are cases where for one artifact type, there are several handlers available. It is important during configuration to select which handler should be given a priority for the particular artifact type. This can be done by editing the code in the Priority Handler as follows:
+
+1. Expand the project `org.eclipse.capra.generic.priority`.
+1. Expand the src folder and then the `org.eclipse.capra.generic.priority` package.
+1. Open the file `DefaultPriorityHander.java`.
+1. Modify the code to have the right handler selected. For instance, the code below selects a `hudsonHandler` when the element selected is a Test element and also a build element.  
+ 
+![alt text](priorityHandlerCode.png =600x) 
+
+### Adding new source files
+
+It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.
+
+Install the [Eclipse Releng Tools](https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool). They contain the copyright tool. Use the following copyright header:
+
+```
+Copyright (c) ${date} 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
+```
+
+The Contributors entry can be replaced with the appropriate names. Use "Fix copyrights" from the context menu to add the copyrights to all relevant files in a project or folder.
+ 
+
+[^fn1]: Maro, S. and Steghöfer, JP., 2016, September. Capra: A Configurable and Extendable Traceability Management Tool. In 2016 IEEE 24th International Requirements Engineering Conference (RE). IEEE.
+
+[^fn2]: Maro, S., Anjorin A., Wohlrab R. and Steghöfer, JP., 2016, September. Traceability Maintenance: Factors and Guidelines. In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference. IEEE.
\ No newline at end of file
diff --git a/org.eclipse.capra.documentation/images/CapraArchitecture.png b/bundles/org.eclipse.capra.documentation/images/CapraArchitecture.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/CapraArchitecture.png
rename to bundles/org.eclipse.capra.documentation/images/CapraArchitecture.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/addNewTraceAdapterClass.png b/bundles/org.eclipse.capra.documentation/images/addNewTraceAdapterClass.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/addNewTraceAdapterClass.png
rename to bundles/org.eclipse.capra.documentation/images/addNewTraceAdapterClass.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/addPersistenceHandler.png b/bundles/org.eclipse.capra.documentation/images/addPersistenceHandler.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/addPersistenceHandler.png
rename to bundles/org.eclipse.capra.documentation/images/addPersistenceHandler.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/addTraceExtension.pdf b/bundles/org.eclipse.capra.documentation/images/addTraceExtension.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/addTraceExtension.pdf
rename to bundles/org.eclipse.capra.documentation/images/addTraceExtension.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/addTraceExtension.png b/bundles/org.eclipse.capra.documentation/images/addTraceExtension.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/addTraceExtension.png
rename to bundles/org.eclipse.capra.documentation/images/addTraceExtension.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/artifactMetamodelDefinition.png b/bundles/org.eclipse.capra.documentation/images/artifactMetamodelDefinition.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/artifactMetamodelDefinition.png
rename to bundles/org.eclipse.capra.documentation/images/artifactMetamodelDefinition.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/createTrace.png b/bundles/org.eclipse.capra.documentation/images/createTrace.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/createTrace.png
rename to bundles/org.eclipse.capra.documentation/images/createTrace.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/editPersistenceHandler.png b/bundles/org.eclipse.capra.documentation/images/editPersistenceHandler.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/editPersistenceHandler.png
rename to bundles/org.eclipse.capra.documentation/images/editPersistenceHandler.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/graphical-view-transitive.pdf b/bundles/org.eclipse.capra.documentation/images/graphical-view-transitive.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/graphical-view-transitive.pdf
rename to bundles/org.eclipse.capra.documentation/images/graphical-view-transitive.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/graphical-view-transitive.png b/bundles/org.eclipse.capra.documentation/images/graphical-view-transitive.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/graphical-view-transitive.png
rename to bundles/org.eclipse.capra.documentation/images/graphical-view-transitive.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/hvacProjects.png b/bundles/org.eclipse.capra.documentation/images/hvacProjects.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/hvacProjects.png
rename to bundles/org.eclipse.capra.documentation/images/hvacProjects.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/interface.png b/bundles/org.eclipse.capra.documentation/images/interface.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/interface.png
rename to bundles/org.eclipse.capra.documentation/images/interface.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/matrixView.png b/bundles/org.eclipse.capra.documentation/images/matrixView.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/matrixView.png
rename to bundles/org.eclipse.capra.documentation/images/matrixView.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/matrixViewMany.png b/bundles/org.eclipse.capra.documentation/images/matrixViewMany.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/matrixViewMany.png
rename to bundles/org.eclipse.capra.documentation/images/matrixViewMany.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newArtifactAdapter.pdf b/bundles/org.eclipse.capra.documentation/images/newArtifactAdapter.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/newArtifactAdapter.pdf
rename to bundles/org.eclipse.capra.documentation/images/newArtifactAdapter.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newArtifactAdapter.png b/bundles/org.eclipse.capra.documentation/images/newArtifactAdapter.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newArtifactAdapter.png
rename to bundles/org.eclipse.capra.documentation/images/newArtifactAdapter.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newArtifactAdapterClass.png b/bundles/org.eclipse.capra.documentation/images/newArtifactAdapterClass.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newArtifactAdapterClass.png
rename to bundles/org.eclipse.capra.documentation/images/newArtifactAdapterClass.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newArtifactClass.png b/bundles/org.eclipse.capra.documentation/images/newArtifactClass.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newArtifactClass.png
rename to bundles/org.eclipse.capra.documentation/images/newArtifactClass.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newArtifactHandler.png b/bundles/org.eclipse.capra.documentation/images/newArtifactHandler.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newArtifactHandler.png
rename to bundles/org.eclipse.capra.documentation/images/newArtifactHandler.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newClass.pdf b/bundles/org.eclipse.capra.documentation/images/newClass.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/newClass.pdf
rename to bundles/org.eclipse.capra.documentation/images/newClass.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newClass.png b/bundles/org.eclipse.capra.documentation/images/newClass.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newClass.png
rename to bundles/org.eclipse.capra.documentation/images/newClass.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newPersistenceHandler.png b/bundles/org.eclipse.capra.documentation/images/newPersistenceHandler.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newPersistenceHandler.png
rename to bundles/org.eclipse.capra.documentation/images/newPersistenceHandler.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newPersistenceHandlerClass.png b/bundles/org.eclipse.capra.documentation/images/newPersistenceHandlerClass.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newPersistenceHandlerClass.png
rename to bundles/org.eclipse.capra.documentation/images/newPersistenceHandlerClass.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newTMAdapter.pdf b/bundles/org.eclipse.capra.documentation/images/newTMAdapter.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/newTMAdapter.pdf
rename to bundles/org.eclipse.capra.documentation/images/newTMAdapter.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/newTMAdapter.png b/bundles/org.eclipse.capra.documentation/images/newTMAdapter.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/newTMAdapter.png
rename to bundles/org.eclipse.capra.documentation/images/newTMAdapter.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/priorityHandlerCode.png b/bundles/org.eclipse.capra.documentation/images/priorityHandlerCode.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/priorityHandlerCode.png
rename to bundles/org.eclipse.capra.documentation/images/priorityHandlerCode.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/problemView.png b/bundles/org.eclipse.capra.documentation/images/problemView.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/problemView.png
rename to bundles/org.eclipse.capra.documentation/images/problemView.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/quickFix.png b/bundles/org.eclipse.capra.documentation/images/quickFix.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/quickFix.png
rename to bundles/org.eclipse.capra.documentation/images/quickFix.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/relatedTo.png b/bundles/org.eclipse.capra.documentation/images/relatedTo.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/relatedTo.png
rename to bundles/org.eclipse.capra.documentation/images/relatedTo.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/selectionView1.png b/bundles/org.eclipse.capra.documentation/images/selectionView1.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/selectionView1.png
rename to bundles/org.eclipse.capra.documentation/images/selectionView1.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/toggleTransitivity.pdf b/bundles/org.eclipse.capra.documentation/images/toggleTransitivity.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/toggleTransitivity.pdf
rename to bundles/org.eclipse.capra.documentation/images/toggleTransitivity.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/toggleTransitivity.png b/bundles/org.eclipse.capra.documentation/images/toggleTransitivity.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/toggleTransitivity.png
rename to bundles/org.eclipse.capra.documentation/images/toggleTransitivity.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/traceLink.png b/bundles/org.eclipse.capra.documentation/images/traceLink.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/traceLink.png
rename to bundles/org.eclipse.capra.documentation/images/traceLink.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/traceMetamodelDefinition.pdf b/bundles/org.eclipse.capra.documentation/images/traceMetamodelDefinition.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/traceMetamodelDefinition.pdf
rename to bundles/org.eclipse.capra.documentation/images/traceMetamodelDefinition.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/traceMetamodelDefinition.png b/bundles/org.eclipse.capra.documentation/images/traceMetamodelDefinition.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/traceMetamodelDefinition.png
rename to bundles/org.eclipse.capra.documentation/images/traceMetamodelDefinition.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/updatesite.pdf b/bundles/org.eclipse.capra.documentation/images/updatesite.pdf
similarity index 100%
rename from org.eclipse.capra.documentation/images/updatesite.pdf
rename to bundles/org.eclipse.capra.documentation/images/updatesite.pdf
Binary files differ
diff --git a/org.eclipse.capra.documentation/images/updatesite.png b/bundles/org.eclipse.capra.documentation/images/updatesite.png
similarity index 100%
rename from org.eclipse.capra.documentation/images/updatesite.png
rename to bundles/org.eclipse.capra.documentation/images/updatesite.png
Binary files differ
diff --git a/org.eclipse.capra.documentation/mainTOC.xml b/bundles/org.eclipse.capra.documentation/mainTOC.xml
similarity index 100%
rename from org.eclipse.capra.documentation/mainTOC.xml
rename to bundles/org.eclipse.capra.documentation/mainTOC.xml
diff --git a/bundles/org.eclipse.capra.documentation/plugin.xml b/bundles/org.eclipse.capra.documentation/plugin.xml
new file mode 100644
index 0000000..8aaa04d
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/plugin.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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
+ -->
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.help.toc">
+      <toc
+            file="mainTOC.xml"
+            primary="true">
+      </toc>
+      <toc
+            file="docu/capraDocumentation-toc.xml"
+            primary="false">
+      </toc>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.documentation/pom.xml b/bundles/org.eclipse.capra.documentation/pom.xml
new file mode 100644
index 0000000..efb22d5
--- /dev/null
+++ b/bundles/org.eclipse.capra.documentation/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.documentation</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/org.eclipse.capra.generic.tracemodels/.classpath b/bundles/org.eclipse.capra.generic.artifactmodel/.classpath
similarity index 100%
copy from org.eclipse.capra.generic.tracemodels/.classpath
copy to bundles/org.eclipse.capra.generic.artifactmodel/.classpath
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/.project b/bundles/org.eclipse.capra.generic.artifactmodel/.project
new file mode 100644
index 0000000..bae117a
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.generic.artifactmodel</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<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.xtext.ui.shared.xtextNature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.generic.artifactmodel/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.ui.plantuml/.settings/org.eclipse.jdt.core.prefs
copy to bundles/org.eclipse.capra.generic.artifactmodel/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..77a8059
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.capra.generic.artifactmodel;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.generic.artifactmodel,
+ org.eclipse.capra.generic.artifactmodel.impl,
+ org.eclipse.capra.generic.artifactmodel.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.emf.ecore.xcore.lib,
+ org.eclipse.capra.core
+Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/build.properties b/bundles/org.eclipse.capra.generic.artifactmodel/build.properties
new file mode 100644
index 0000000..067c1cb
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# 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 = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml
+jars.compile.order = .
+source.. = src-gen/,\
+		   src/
+output.. = bin/
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/model/artifact.xcore b/bundles/org.eclipse.capra.generic.artifactmodel/model/artifact.xcore
new file mode 100644
index 0000000..141d179
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/model/artifact.xcore
@@ -0,0 +1,13 @@
+package  org.eclipse.capra.generic.artifactmodel
+
+class ArtifactWrapperContainer {
+	contains ArtifactWrapper [0..*] artifacts 
+}
+
+class ArtifactWrapper {
+	String path
+	String uri
+	String name
+	String identifier
+	String ArtifactHandler
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/plugin.properties b/bundles/org.eclipse.capra.generic.artifactmodel/plugin.properties
new file mode 100644
index 0000000..31e28c5
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/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

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

+#

+

+pluginName = Artifactmodel Model

+providerName = www.example.org

diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/plugin.xml b/bundles/org.eclipse.capra.generic.artifactmodel/plugin.xml
new file mode 100644
index 0000000..848c493
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/plugin.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.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
+ -->
+
+<!--
+-->
+
+<plugin>
+
+   <extension
+         point="org.eclipse.capra.configuration.artifactMetaModel">
+      <ArtifactMetaModelAdapter
+            class="org.eclipse.capra.generic.artifactmodel.GenericArtifactMetaModelAdapter">
+      </ArtifactMetaModelAdapter>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated artifact -->
+      <package
+            uri="org.eclipse.capra.generic.artifactmodel"
+            class="org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage"
+            genModel="model/artifact.xcore"/>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/pom.xml b/bundles/org.eclipse.capra.generic.artifactmodel/pom.xml
new file mode 100644
index 0000000..e9e10c0
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.generic.artifactmodel</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactWrapper.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactWrapper.java
new file mode 100644
index 0000000..308ab6f
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactWrapper.java
@@ -0,0 +1,158 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Artifact Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getPath <em>Path</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getUri <em>Uri</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getArtifactHandler <em>Artifact Handler</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapper()
+ * @model
+ * @generated
+ */
+public interface ArtifactWrapper extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Path</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Path</em>' attribute.
+	 * @see #setPath(String)
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapper_Path()
+	 * @model unique="false"
+	 * @generated
+	 */
+	String getPath();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getPath <em>Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Path</em>' attribute.
+	 * @see #getPath()
+	 * @generated
+	 */
+	void setPath(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Uri</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Uri</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Uri</em>' attribute.
+	 * @see #setUri(String)
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapper_Uri()
+	 * @model unique="false"
+	 * @generated
+	 */
+	String getUri();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getUri <em>Uri</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Uri</em>' attribute.
+	 * @see #getUri()
+	 * @generated
+	 */
+	void setUri(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapper_Name()
+	 * @model unique="false"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Identifier</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Identifier</em>' attribute.
+	 * @see #setIdentifier(String)
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapper_Identifier()
+	 * @model unique="false"
+	 * @generated
+	 */
+	String getIdentifier();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getIdentifier <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Identifier</em>' attribute.
+	 * @see #getIdentifier()
+	 * @generated
+	 */
+	void setIdentifier(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Artifact Handler</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Artifact Handler</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Artifact Handler</em>' attribute.
+	 * @see #setArtifactHandler(String)
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapper_ArtifactHandler()
+	 * @model unique="false"
+	 * @generated
+	 */
+	String getArtifactHandler();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getArtifactHandler <em>Artifact Handler</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Artifact Handler</em>' attribute.
+	 * @see #getArtifactHandler()
+	 * @generated
+	 */
+	void setArtifactHandler(String value);
+
+} // ArtifactWrapper
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactWrapperContainer.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactWrapperContainer.java
new file mode 100644
index 0000000..085506d
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactWrapperContainer.java
@@ -0,0 +1,42 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Artifact Wrapper Container</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer#getArtifacts <em>Artifacts</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapperContainer()
+ * @model
+ * @generated
+ */
+public interface ArtifactWrapperContainer extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Artifacts</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Artifacts</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Artifacts</em>' containment reference list.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#getArtifactWrapperContainer_Artifacts()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<ArtifactWrapper> getArtifacts();
+
+} // ArtifactWrapperContainer
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactmodelFactory.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactmodelFactory.java
new file mode 100644
index 0000000..354a131
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactmodelFactory.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage
+ * @generated
+ */
+public interface ArtifactmodelFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ArtifactmodelFactory eINSTANCE = org.eclipse.capra.generic.artifactmodel.impl.ArtifactmodelFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Artifact Wrapper Container</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Artifact Wrapper Container</em>'.
+	 * @generated
+	 */
+	ArtifactWrapperContainer createArtifactWrapperContainer();
+
+	/**
+	 * Returns a new object of class '<em>Artifact Wrapper</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Artifact Wrapper</em>'.
+	 * @generated
+	 */
+	ArtifactWrapper createArtifactWrapper();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	ArtifactmodelPackage getArtifactmodelPackage();
+
+} //ArtifactmodelFactory
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactmodelPackage.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactmodelPackage.java
new file mode 100644
index 0000000..884ec8c
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/ArtifactmodelPackage.java
@@ -0,0 +1,350 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelFactory
+ * @model kind="package"
+ *        annotation="http://www.eclipse.org/emf/2002/GenModel basePackage='org.eclipse.capra.generic'"
+ * @generated
+ */
+public interface ArtifactmodelPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "artifactmodel";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "org.eclipse.capra.generic.artifactmodel";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "artifactmodel";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	ArtifactmodelPackage eINSTANCE = org.eclipse.capra.generic.artifactmodel.impl.ArtifactmodelPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperContainerImpl <em>Artifact Wrapper Container</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperContainerImpl
+	 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactmodelPackageImpl#getArtifactWrapperContainer()
+	 * @generated
+	 */
+	int ARTIFACT_WRAPPER_CONTAINER = 0;
+
+	/**
+	 * The feature id for the '<em><b>Artifacts</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Artifact Wrapper Container</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER_CONTAINER_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Artifact Wrapper Container</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER_CONTAINER_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl <em>Artifact Wrapper</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl
+	 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactmodelPackageImpl#getArtifactWrapper()
+	 * @generated
+	 */
+	int ARTIFACT_WRAPPER = 1;
+
+	/**
+	 * The feature id for the '<em><b>Path</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER__PATH = 0;
+
+	/**
+	 * The feature id for the '<em><b>Uri</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER__URI = 1;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER__NAME = 2;
+
+	/**
+	 * The feature id for the '<em><b>Identifier</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER__IDENTIFIER = 3;
+
+	/**
+	 * The feature id for the '<em><b>Artifact Handler</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER__ARTIFACT_HANDLER = 4;
+
+	/**
+	 * The number of structural features of the '<em>Artifact Wrapper</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER_FEATURE_COUNT = 5;
+
+	/**
+	 * The number of operations of the '<em>Artifact Wrapper</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ARTIFACT_WRAPPER_OPERATION_COUNT = 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer <em>Artifact Wrapper Container</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Artifact Wrapper Container</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer
+	 * @generated
+	 */
+	EClass getArtifactWrapperContainer();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer#getArtifacts <em>Artifacts</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Artifacts</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer#getArtifacts()
+	 * @see #getArtifactWrapperContainer()
+	 * @generated
+	 */
+	EReference getArtifactWrapperContainer_Artifacts();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper <em>Artifact Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Artifact Wrapper</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper
+	 * @generated
+	 */
+	EClass getArtifactWrapper();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getPath <em>Path</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Path</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getPath()
+	 * @see #getArtifactWrapper()
+	 * @generated
+	 */
+	EAttribute getArtifactWrapper_Path();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getUri <em>Uri</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Uri</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getUri()
+	 * @see #getArtifactWrapper()
+	 * @generated
+	 */
+	EAttribute getArtifactWrapper_Uri();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getName()
+	 * @see #getArtifactWrapper()
+	 * @generated
+	 */
+	EAttribute getArtifactWrapper_Name();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getIdentifier <em>Identifier</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Identifier</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getIdentifier()
+	 * @see #getArtifactWrapper()
+	 * @generated
+	 */
+	EAttribute getArtifactWrapper_Identifier();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getArtifactHandler <em>Artifact Handler</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Artifact Handler</em>'.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper#getArtifactHandler()
+	 * @see #getArtifactWrapper()
+	 * @generated
+	 */
+	EAttribute getArtifactWrapper_ArtifactHandler();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	ArtifactmodelFactory getArtifactmodelFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperContainerImpl <em>Artifact Wrapper Container</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperContainerImpl
+		 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactmodelPackageImpl#getArtifactWrapperContainer()
+		 * @generated
+		 */
+		EClass ARTIFACT_WRAPPER_CONTAINER = eINSTANCE.getArtifactWrapperContainer();
+
+		/**
+		 * The meta object literal for the '<em><b>Artifacts</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS = eINSTANCE.getArtifactWrapperContainer_Artifacts();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl <em>Artifact Wrapper</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl
+		 * @see org.eclipse.capra.generic.artifactmodel.impl.ArtifactmodelPackageImpl#getArtifactWrapper()
+		 * @generated
+		 */
+		EClass ARTIFACT_WRAPPER = eINSTANCE.getArtifactWrapper();
+
+		/**
+		 * The meta object literal for the '<em><b>Path</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ARTIFACT_WRAPPER__PATH = eINSTANCE.getArtifactWrapper_Path();
+
+		/**
+		 * The meta object literal for the '<em><b>Uri</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ARTIFACT_WRAPPER__URI = eINSTANCE.getArtifactWrapper_Uri();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ARTIFACT_WRAPPER__NAME = eINSTANCE.getArtifactWrapper_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Identifier</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ARTIFACT_WRAPPER__IDENTIFIER = eINSTANCE.getArtifactWrapper_Identifier();
+
+		/**
+		 * The meta object literal for the '<em><b>Artifact Handler</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute ARTIFACT_WRAPPER__ARTIFACT_HANDLER = eINSTANCE.getArtifactWrapper_ArtifactHandler();
+
+	}
+
+} //ArtifactmodelPackage
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactWrapperContainerImpl.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactWrapperContainerImpl.java
new file mode 100644
index 0000000..fec0e9f
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactWrapperContainerImpl.java
@@ -0,0 +1,152 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel.impl;
+
+import java.util.Collection;
+
+import org.eclipse.capra.generic.artifactmodel.ArtifactWrapper;
+import org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer;
+import org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Artifact Wrapper Container</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperContainerImpl#getArtifacts <em>Artifacts</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArtifactWrapperContainerImpl extends MinimalEObjectImpl.Container implements ArtifactWrapperContainer {
+	/**
+	 * The cached value of the '{@link #getArtifacts() <em>Artifacts</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArtifacts()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<ArtifactWrapper> artifacts;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArtifactWrapperContainerImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArtifactmodelPackage.Literals.ARTIFACT_WRAPPER_CONTAINER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<ArtifactWrapper> getArtifacts() {
+		if (artifacts == null) {
+			artifacts = new EObjectContainmentEList<ArtifactWrapper>(ArtifactWrapper.class, this, ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS);
+		}
+		return artifacts;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
+				return ((InternalEList<?>)getArtifacts()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
+				return getArtifacts();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
+				getArtifacts().clear();
+				getArtifacts().addAll((Collection<? extends ArtifactWrapper>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
+				getArtifacts().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
+				return artifacts != null && !artifacts.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //ArtifactWrapperContainerImpl
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactWrapperImpl.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactWrapperImpl.java
new file mode 100644
index 0000000..efb018a
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactWrapperImpl.java
@@ -0,0 +1,379 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel.impl;
+
+import org.eclipse.capra.generic.artifactmodel.ArtifactWrapper;
+import org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Artifact Wrapper</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl#getPath <em>Path</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl#getUri <em>Uri</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl#getIdentifier <em>Identifier</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.artifactmodel.impl.ArtifactWrapperImpl#getArtifactHandler <em>Artifact Handler</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ArtifactWrapperImpl extends MinimalEObjectImpl.Container implements ArtifactWrapper {
+	/**
+	 * The default value of the '{@link #getPath() <em>Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPath()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String PATH_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getPath() <em>Path</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getPath()
+	 * @generated
+	 * @ordered
+	 */
+	protected String path = PATH_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getUri() <em>Uri</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUri()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getUri() <em>Uri</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getUri()
+	 * @generated
+	 * @ordered
+	 */
+	protected String uri = URI_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String IDENTIFIER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getIdentifier() <em>Identifier</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getIdentifier()
+	 * @generated
+	 * @ordered
+	 */
+	protected String identifier = IDENTIFIER_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getArtifactHandler() <em>Artifact Handler</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArtifactHandler()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ARTIFACT_HANDLER_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getArtifactHandler() <em>Artifact Handler</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getArtifactHandler()
+	 * @generated
+	 * @ordered
+	 */
+	protected String artifactHandler = ARTIFACT_HANDLER_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArtifactWrapperImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ArtifactmodelPackage.Literals.ARTIFACT_WRAPPER;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getPath() {
+		return path;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setPath(String newPath) {
+		String oldPath = path;
+		path = newPath;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtifactmodelPackage.ARTIFACT_WRAPPER__PATH, oldPath, path));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getUri() {
+		return uri;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setUri(String newUri) {
+		String oldUri = uri;
+		uri = newUri;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtifactmodelPackage.ARTIFACT_WRAPPER__URI, oldUri, uri));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtifactmodelPackage.ARTIFACT_WRAPPER__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getIdentifier() {
+		return identifier;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setIdentifier(String newIdentifier) {
+		String oldIdentifier = identifier;
+		identifier = newIdentifier;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtifactmodelPackage.ARTIFACT_WRAPPER__IDENTIFIER, oldIdentifier, identifier));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getArtifactHandler() {
+		return artifactHandler;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setArtifactHandler(String newArtifactHandler) {
+		String oldArtifactHandler = artifactHandler;
+		artifactHandler = newArtifactHandler;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, ArtifactmodelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER, oldArtifactHandler, artifactHandler));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__PATH:
+				return getPath();
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__URI:
+				return getUri();
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__NAME:
+				return getName();
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__IDENTIFIER:
+				return getIdentifier();
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
+				return getArtifactHandler();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__PATH:
+				setPath((String)newValue);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__URI:
+				setUri((String)newValue);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__NAME:
+				setName((String)newValue);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__IDENTIFIER:
+				setIdentifier((String)newValue);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
+				setArtifactHandler((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__PATH:
+				setPath(PATH_EDEFAULT);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__URI:
+				setUri(URI_EDEFAULT);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__IDENTIFIER:
+				setIdentifier(IDENTIFIER_EDEFAULT);
+				return;
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
+				setArtifactHandler(ARTIFACT_HANDLER_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__PATH:
+				return PATH_EDEFAULT == null ? path != null : !PATH_EDEFAULT.equals(path);
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__URI:
+				return URI_EDEFAULT == null ? uri != null : !URI_EDEFAULT.equals(uri);
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__IDENTIFIER:
+				return IDENTIFIER_EDEFAULT == null ? identifier != null : !IDENTIFIER_EDEFAULT.equals(identifier);
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
+				return ARTIFACT_HANDLER_EDEFAULT == null ? artifactHandler != null : !ARTIFACT_HANDLER_EDEFAULT.equals(artifactHandler);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (path: ");
+		result.append(path);
+		result.append(", uri: ");
+		result.append(uri);
+		result.append(", name: ");
+		result.append(name);
+		result.append(", identifier: ");
+		result.append(identifier);
+		result.append(", ArtifactHandler: ");
+		result.append(artifactHandler);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ArtifactWrapperImpl
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactmodelFactoryImpl.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactmodelFactoryImpl.java
new file mode 100644
index 0000000..2c6318b
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactmodelFactoryImpl.java
@@ -0,0 +1,106 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel.impl;
+
+import org.eclipse.capra.generic.artifactmodel.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArtifactmodelFactoryImpl extends EFactoryImpl implements ArtifactmodelFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ArtifactmodelFactory init() {
+		try {
+			ArtifactmodelFactory theArtifactmodelFactory = (ArtifactmodelFactory)EPackage.Registry.INSTANCE.getEFactory(ArtifactmodelPackage.eNS_URI);
+			if (theArtifactmodelFactory != null) {
+				return theArtifactmodelFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new ArtifactmodelFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactmodelFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER: return createArtifactWrapperContainer();
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER: return createArtifactWrapper();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactWrapperContainer createArtifactWrapperContainer() {
+		ArtifactWrapperContainerImpl artifactWrapperContainer = new ArtifactWrapperContainerImpl();
+		return artifactWrapperContainer;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactWrapper createArtifactWrapper() {
+		ArtifactWrapperImpl artifactWrapper = new ArtifactWrapperImpl();
+		return artifactWrapper;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactmodelPackage getArtifactmodelPackage() {
+		return (ArtifactmodelPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static ArtifactmodelPackage getPackage() {
+		return ArtifactmodelPackage.eINSTANCE;
+	}
+
+} //ArtifactmodelFactoryImpl
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactmodelPackageImpl.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactmodelPackageImpl.java
new file mode 100644
index 0000000..4a49a36
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/impl/ArtifactmodelPackageImpl.java
@@ -0,0 +1,261 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel.impl;
+
+import org.eclipse.capra.generic.artifactmodel.ArtifactWrapper;
+import org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer;
+import org.eclipse.capra.generic.artifactmodel.ArtifactmodelFactory;
+import org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ArtifactmodelPackageImpl extends EPackageImpl implements ArtifactmodelPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass artifactWrapperContainerEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass artifactWrapperEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private ArtifactmodelPackageImpl() {
+		super(eNS_URI, ArtifactmodelFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link ArtifactmodelPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static ArtifactmodelPackage init() {
+		if (isInited) return (ArtifactmodelPackage)EPackage.Registry.INSTANCE.getEPackage(ArtifactmodelPackage.eNS_URI);
+
+		// Obtain or create and register package
+		ArtifactmodelPackageImpl theArtifactmodelPackage = (ArtifactmodelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ArtifactmodelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ArtifactmodelPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theArtifactmodelPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theArtifactmodelPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theArtifactmodelPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(ArtifactmodelPackage.eNS_URI, theArtifactmodelPackage);
+		return theArtifactmodelPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArtifactWrapperContainer() {
+		return artifactWrapperContainerEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getArtifactWrapperContainer_Artifacts() {
+		return (EReference)artifactWrapperContainerEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getArtifactWrapper() {
+		return artifactWrapperEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getArtifactWrapper_Path() {
+		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getArtifactWrapper_Uri() {
+		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getArtifactWrapper_Name() {
+		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getArtifactWrapper_Identifier() {
+		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(3);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getArtifactWrapper_ArtifactHandler() {
+		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(4);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactmodelFactory getArtifactmodelFactory() {
+		return (ArtifactmodelFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		artifactWrapperContainerEClass = createEClass(ARTIFACT_WRAPPER_CONTAINER);
+		createEReference(artifactWrapperContainerEClass, ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS);
+
+		artifactWrapperEClass = createEClass(ARTIFACT_WRAPPER);
+		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__PATH);
+		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__URI);
+		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__NAME);
+		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__IDENTIFIER);
+		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__ARTIFACT_HANDLER);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(artifactWrapperContainerEClass, ArtifactWrapperContainer.class, "ArtifactWrapperContainer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getArtifactWrapperContainer_Artifacts(), this.getArtifactWrapper(), null, "artifacts", null, 0, -1, ArtifactWrapperContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(artifactWrapperEClass, ArtifactWrapper.class, "ArtifactWrapper", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getArtifactWrapper_Path(), theEcorePackage.getEString(), "path", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getArtifactWrapper_Uri(), theEcorePackage.getEString(), "uri", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getArtifactWrapper_Name(), theEcorePackage.getEString(), "name", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getArtifactWrapper_Identifier(), theEcorePackage.getEString(), "identifier", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getArtifactWrapper_ArtifactHandler(), theEcorePackage.getEString(), "ArtifactHandler", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //ArtifactmodelPackageImpl
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/util/ArtifactmodelAdapterFactory.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/util/ArtifactmodelAdapterFactory.java
new file mode 100644
index 0000000..0d1e50b
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/util/ArtifactmodelAdapterFactory.java
@@ -0,0 +1,138 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel.util;
+
+import org.eclipse.capra.generic.artifactmodel.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage
+ * @generated
+ */
+public class ArtifactmodelAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ArtifactmodelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactmodelAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = ArtifactmodelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected ArtifactmodelSwitch<Adapter> modelSwitch =
+		new ArtifactmodelSwitch<Adapter>() {
+			@Override
+			public Adapter caseArtifactWrapperContainer(ArtifactWrapperContainer object) {
+				return createArtifactWrapperContainerAdapter();
+			}
+			@Override
+			public Adapter caseArtifactWrapper(ArtifactWrapper object) {
+				return createArtifactWrapperAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer <em>Artifact Wrapper Container</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapperContainer
+	 * @generated
+	 */
+	public Adapter createArtifactWrapperContainerAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.generic.artifactmodel.ArtifactWrapper <em>Artifact Wrapper</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.capra.generic.artifactmodel.ArtifactWrapper
+	 * @generated
+	 */
+	public Adapter createArtifactWrapperAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //ArtifactmodelAdapterFactory
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/util/ArtifactmodelSwitch.java b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/util/ArtifactmodelSwitch.java
new file mode 100644
index 0000000..2aeff30
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src-gen/org/eclipse/capra/generic/artifactmodel/util/ArtifactmodelSwitch.java
@@ -0,0 +1,131 @@
+/**
+ */
+package org.eclipse.capra.generic.artifactmodel.util;
+
+import org.eclipse.capra.generic.artifactmodel.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.artifactmodel.ArtifactmodelPackage
+ * @generated
+ */
+public class ArtifactmodelSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static ArtifactmodelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ArtifactmodelSwitch() {
+		if (modelPackage == null) {
+			modelPackage = ArtifactmodelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER_CONTAINER: {
+				ArtifactWrapperContainer artifactWrapperContainer = (ArtifactWrapperContainer)theEObject;
+				T result = caseArtifactWrapperContainer(artifactWrapperContainer);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case ArtifactmodelPackage.ARTIFACT_WRAPPER: {
+				ArtifactWrapper artifactWrapper = (ArtifactWrapper)theEObject;
+				T result = caseArtifactWrapper(artifactWrapper);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Artifact Wrapper Container</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Artifact Wrapper Container</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArtifactWrapperContainer(ArtifactWrapperContainer object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Artifact Wrapper</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Artifact Wrapper</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseArtifactWrapper(ArtifactWrapper object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //ArtifactmodelSwitch
diff --git a/bundles/org.eclipse.capra.generic.artifactmodel/src/org/eclipse/capra/generic/artifactmodel/GenericArtifactMetaModelAdapter.java b/bundles/org.eclipse.capra.generic.artifactmodel/src/org/eclipse/capra/generic/artifactmodel/GenericArtifactMetaModelAdapter.java
new file mode 100644
index 0000000..3b61a57
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.artifactmodel/src/org/eclipse/capra/generic/artifactmodel/GenericArtifactMetaModelAdapter.java
@@ -0,0 +1,118 @@
+package org.eclipse.capra.generic.artifactmodel;
+/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.AbstractArtifactMetaModelAdapter;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Provides generic functionality to deal with artifact meta models.
+ */
+public class GenericArtifactMetaModelAdapter extends AbstractArtifactMetaModelAdapter {
+
+	private ArtifactWrapperContainer getContainer(EObject artifactModel) {
+		return (ArtifactWrapperContainer) artifactModel;
+	}
+
+	@Override
+	public EObject createModel() {
+		return ArtifactmodelFactory.eINSTANCE.createArtifactWrapperContainer();
+	}
+
+	@Override
+	public EObject getArtifact(EObject artifactModel, String artifactHandler, String artifactUri) {
+		ArtifactWrapperContainer container = getContainer(artifactModel);
+		for (ArtifactWrapper artifact : container.getArtifacts()) {
+			if (getArtifactHandler(artifact).equals(artifactHandler) && getArtifactUri(artifact).equals(artifactUri))
+				return artifact;
+		}
+		return null;
+	}
+
+	@Override
+	public EObject createArtifact(EObject artifactModel, String artifactHandler, String artifactUri, String artifactId,
+			String artifactName, String artifactPath) {
+		ArtifactWrapperContainer container = getContainer(artifactModel);
+		EObject existingWrapper = getArtifact(artifactModel, artifactHandler, artifactUri);
+		if (existingWrapper != null)
+			return existingWrapper;
+
+		ArtifactWrapper wrapper = ArtifactmodelFactory.eINSTANCE.createArtifactWrapper();
+		wrapper.setArtifactHandler(artifactHandler);
+		wrapper.setUri(artifactUri);
+		wrapper.setName(artifactName);
+		wrapper.setPath(artifactPath);
+		wrapper.setIdentifier(artifactId);
+		container.getArtifacts().add(wrapper);
+
+		return wrapper;
+	}
+
+	@Override
+	public String getArtifactHandler(EObject artifact) {
+		if (artifact instanceof ArtifactWrapper) {
+			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
+			return wrapper.getArtifactHandler();
+		}
+		return null;
+	}
+
+	@Override
+	public String getArtifactName(EObject artifact) {
+		if (artifact instanceof ArtifactWrapper) {
+			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
+			return wrapper.getName();
+		}
+		return null;
+	}
+
+	@Override
+	public String getArtifactUri(EObject artifact) {
+		if (artifact instanceof ArtifactWrapper) {
+			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
+			return wrapper.getUri();
+		}
+		return null;
+	}
+
+	@Override
+	public String getArtifactIdentifier(EObject artifact) {
+		if (artifact instanceof ArtifactWrapper) {
+			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
+			return wrapper.getIdentifier();
+		}
+		return null;
+	}
+
+	@Override
+	public IPath getArtifactPath(EObject artifact) {
+		if (artifact instanceof ArtifactWrapper) {
+			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
+			return new Path(wrapper.getPath());
+		}
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<EObject> getAllArtifacts(EObject artifactModel) {
+		ArtifactWrapperContainer container = getContainer(artifactModel);
+		return (List<EObject>) (Object) container.getArtifacts();
+	}
+
+}
diff --git a/org.eclipse.capra.generic.persistence/.classpath b/bundles/org.eclipse.capra.generic.persistence/.classpath
similarity index 100%
rename from org.eclipse.capra.generic.persistence/.classpath
rename to bundles/org.eclipse.capra.generic.persistence/.classpath
diff --git a/org.eclipse.capra.generic.persistence/.gitignore b/bundles/org.eclipse.capra.generic.persistence/.gitignore
similarity index 100%
rename from org.eclipse.capra.generic.persistence/.gitignore
rename to bundles/org.eclipse.capra.generic.persistence/.gitignore
diff --git a/org.eclipse.capra.generic.persistence/.project b/bundles/org.eclipse.capra.generic.persistence/.project
similarity index 100%
rename from org.eclipse.capra.generic.persistence/.project
rename to bundles/org.eclipse.capra.generic.persistence/.project
diff --git a/org.eclipse.capra.generic.persistence/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.generic.persistence/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.generic.persistence/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.generic.persistence/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9a2de34
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Generic Trace Persistence Functionality
+Bundle-SymbolicName: org.eclipse.capra.generic.persistence;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.emf,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.capra.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.generic.persistence/build.properties b/bundles/org.eclipse.capra.generic.persistence/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.persistence/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.generic.persistence/plugin.xml b/bundles/org.eclipse.capra.generic.persistence/plugin.xml
new file mode 100644
index 0000000..04afdb2
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.persistence/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.capra.configuration.persistenceHandler">
+      <persistenceHandler
+            class="org.eclipse.capra.generic.persistance.TracePersistenceAdapter">
+      </persistenceHandler>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.generic.persistence/pom.xml b/bundles/org.eclipse.capra.generic.persistence/pom.xml
new file mode 100644
index 0000000..93d7d06
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.persistence/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.generic.persistence</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java b/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
new file mode 100644
index 0000000..80ea702
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * 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.generic.persistance;
+
+import java.io.IOException;
+import java.util.Optional;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+/**
+ * This generic implementation of
+ * {@link org.eclipse.capra.core.adapters.TracePersistenceAdapter} creates a
+ * special project in the workspace to house the trace link model and the
+ * artifact model.
+ */
+public class TracePersistenceAdapter implements org.eclipse.capra.core.adapters.TracePersistenceAdapter {
+
+	private static final String DEFAULT_PROJECT_NAME = "__WorkspaceTraceModels";
+	private static final String DEFAULT_TRACE_MODEL_NAME = "traceModel.xmi";
+	private static final String DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME = "artifactWrappers.xmi";
+
+	private Optional<EObject> loadModel(ResourceSet resourceSet, String modelName) {
+		if (projectExist(DEFAULT_PROJECT_NAME) && fileExists(DEFAULT_PROJECT_NAME + "/" + modelName)) {
+			try {
+				URI uri = URI.createPlatformResourceURI(DEFAULT_PROJECT_NAME + "/" + modelName, true);
+				Resource resource = resourceSet.getResource(uri, true);
+				resource.load(null);
+
+				return Optional.of(resource.getContents().get(0));
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return Optional.empty();
+	}
+
+	@Override
+	public EObject getTraceModel(ResourceSet resourceSet) {
+		TraceMetaModelAdapter adapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		return loadModel(resourceSet, DEFAULT_TRACE_MODEL_NAME).orElse(adapter.createModel());
+	}
+
+	private boolean fileExists(String path) {
+		return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)).exists();
+	}
+
+	private boolean projectExist(String defaultProjectName) {
+		return ResourcesPlugin.getWorkspace().getRoot().getProject(defaultProjectName).exists();
+	}
+
+	private IProject ensureProjectExists(String defaultProjectName) throws CoreException {
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(defaultProjectName);
+		if (!project.exists()) {
+			project.create(new NullProgressMonitor());
+			project.open(new NullProgressMonitor());
+		}
+
+		return project;
+	}
+
+	@Override
+	public void saveTracesAndArtifacts(EObject traceModel, EObject artifactModel) {
+		try {
+			ResourceSet resourceSet = new ResourceSetImpl();
+
+			URI uri = URI.createPlatformResourceURI(DEFAULT_PROJECT_NAME + "/" + DEFAULT_TRACE_MODEL_NAME, true);
+			Resource resource = resourceSet.createResource(uri);
+			resource.getContents().add(traceModel);
+
+			uri = URI.createPlatformResourceURI(DEFAULT_PROJECT_NAME + "/" + DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME, true);
+			Resource resourceForArtifacts = resourceSet.createResource(uri);
+			resourceForArtifacts.getContents().add(artifactModel);
+
+			ensureProjectExists(DEFAULT_PROJECT_NAME);
+
+			resourceForArtifacts.save(null);
+			resource.save(null);
+		} catch (Exception e) {
+			System.err.println("Unable to save trace model!");
+			e.printStackTrace();
+		}
+	}
+
+	@Override
+	public EObject getArtifactWrappers(ResourceSet resourceSet) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		return loadModel(resourceSet, DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME).orElse(adapter.createModel());
+	}
+
+	@Override
+	public EObject getTraceModel(EObject object) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public EObject getArtifactWrappers(EObject object) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}
diff --git a/org.eclipse.capra.generic.priority/.classpath b/bundles/org.eclipse.capra.generic.priority/.classpath
similarity index 100%
rename from org.eclipse.capra.generic.priority/.classpath
rename to bundles/org.eclipse.capra.generic.priority/.classpath
diff --git a/org.eclipse.capra.generic.priority/.gitignore b/bundles/org.eclipse.capra.generic.priority/.gitignore
similarity index 100%
rename from org.eclipse.capra.generic.priority/.gitignore
rename to bundles/org.eclipse.capra.generic.priority/.gitignore
diff --git a/org.eclipse.capra.generic.priority/.project b/bundles/org.eclipse.capra.generic.priority/.project
similarity index 100%
rename from org.eclipse.capra.generic.priority/.project
rename to bundles/org.eclipse.capra.generic.priority/.project
diff --git a/org.eclipse.capra.generic.priority/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.generic.priority/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.generic.priority/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.generic.priority/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..12ceaf3
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Generic Priority Handler
+Bundle-SymbolicName: org.eclipse.capra.generic.priority;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.capra.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.generic.priority/build.properties b/bundles/org.eclipse.capra.generic.priority/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.priority/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.generic.priority/plugin.xml b/bundles/org.eclipse.capra.generic.priority/plugin.xml
new file mode 100644
index 0000000..4efd2fe
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.priority/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.capra.configuration.priorityHandlers">
+      <PriorityHandler
+            class="org.eclipse.capra.generic.priority.DefaultPriorityHandler">
+      </PriorityHandler>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.generic.priority/pom.xml b/bundles/org.eclipse.capra.generic.priority/pom.xml
new file mode 100644
index 0000000..24abd06
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.priority/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.generic.priority</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java b/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
new file mode 100644
index 0000000..e205c8a
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * 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.generic.priority;
+
+import java.util.Collection;
+import java.util.Comparator;
+
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.handlers.PriorityHandler;
+
+/**
+ * Provides a simple default policy for selecting an {@link IArtifactHandler} by
+ * selecting the one which handles the more specific type. This is determined by
+ * comparing the assignability of the classes handled by the
+ * <code>ArtifactHandlers</code>.
+ */
+public class DefaultPriorityHandler implements PriorityHandler {
+
+	@Override
+	public <T> IArtifactHandler<? extends T> getSelectedHandler(
+			Collection<? extends IArtifactHandler<? extends T>> handlers, Object artifact) {
+		return handlers.stream().max(new ArtifactHandlerPriorityComparator()).get();
+	}
+
+	/**
+	 * A comparator that compares two classes by whether the handled classes are
+	 * assignable to each other. If instance A is of a type that is a superclass
+	 * or superinterface of instance B, it will return A>B. A=B if the
+	 * assignment works in both directions or if the assignment does not work at
+	 * all.
+	 */
+	private class ArtifactHandlerPriorityComparator implements Comparator<IArtifactHandler<?>> {
+
+		@Override
+		public int compare(IArtifactHandler<?> o1, IArtifactHandler<?> o2) {
+			if (!o1.getHandledClass().isAssignableFrom(o2.getHandledClass())
+					&& o2.getHandledClass().isAssignableFrom(o1.getHandledClass())) {
+				return 1;
+			} else if (o1.getHandledClass().isAssignableFrom(o2.getHandledClass())
+					&& !o2.getHandledClass().isAssignableFrom(o1.getHandledClass())) {
+				return -1;
+			} else {
+				return 0;
+			}
+		}
+	}
+
+}
diff --git a/org.eclipse.capra.generic.tracemodels/.classpath b/bundles/org.eclipse.capra.generic.tracemodels/.classpath
similarity index 100%
rename from org.eclipse.capra.generic.tracemodels/.classpath
rename to bundles/org.eclipse.capra.generic.tracemodels/.classpath
diff --git a/org.eclipse.capra.generic.tracemodels/.gitignore b/bundles/org.eclipse.capra.generic.tracemodels/.gitignore
similarity index 100%
rename from org.eclipse.capra.generic.tracemodels/.gitignore
rename to bundles/org.eclipse.capra.generic.tracemodels/.gitignore
diff --git a/org.eclipse.capra.generic.tracemodels/.project b/bundles/org.eclipse.capra.generic.tracemodels/.project
similarity index 100%
rename from org.eclipse.capra.generic.tracemodels/.project
rename to bundles/org.eclipse.capra.generic.tracemodels/.project
diff --git a/org.eclipse.capra.generic.tracemodels/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.generic.tracemodels/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.generic.tracemodels/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.generic.tracemodels/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.tracemodels/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..78e5628
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Generic Traceability Metamodel
+Bundle-SymbolicName: org.eclipse.capra.generic.tracemodels;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: Capra Development Team
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.generic.tracemodel,
+ org.eclipse.capra.generic.tracemodel.impl,
+ org.eclipse.capra.generic.tracemodel.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.emf.ecore.xcore.lib,
+ org.eclipse.capra.core
+Bundle-ActivationPolicy: lazy
+Import-Package: org.slf4j
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/build.properties b/bundles/org.eclipse.capra.generic.tracemodels/build.properties
new file mode 100644
index 0000000..316bad4
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# 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 = .,\
+               model/,\
+               META-INF/,\
+               plugin.xml
+jars.compile.order = .
+source.. = src-gen/,\
+		   src/
+output.. = bin/
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/model/generictrace.xcore b/bundles/org.eclipse.capra.generic.tracemodels/model/generictrace.xcore
new file mode 100644
index 0000000..9731c71
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/model/generictrace.xcore
@@ -0,0 +1,15 @@
+package org.eclipse.capra.generic.tracemodel
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.ecore.util.EcoreUtil
+
+class GenericTraceModel{
+	contains RelatedTo[0..*] traces
+} 
+
+class RelatedTo {
+	derived String ID get {
+			EcoreUtil.generateUUID();
+	}
+	String name
+	refers EObject [0..*] item 
+}    
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/plugin.properties b/bundles/org.eclipse.capra.generic.tracemodels/plugin.properties
new file mode 100644
index 0000000..799009b
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/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

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

+#

+

+pluginName = GenericArtifactMetaModel Model

+providerName = www.example.org

diff --git a/bundles/org.eclipse.capra.generic.tracemodels/plugin.xml b/bundles/org.eclipse.capra.generic.tracemodels/plugin.xml
new file mode 100644
index 0000000..681c2f0
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/plugin.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.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
+ -->
+
+<!--
+-->
+
+<plugin>
+
+   <extension
+         point="org.eclipse.capra.configuration.traceabilityMetaModel">
+      <TraceabilityMetaModelAdapter
+            class="org.eclipse.capra.generic.tracemodels.GenericMetaModelAdapter">
+      </TraceabilityMetaModelAdapter>
+   </extension>
+
+   <extension point="org.eclipse.emf.ecore.generated_package">
+      <!-- @generated generictrace -->
+      <package
+            uri="org.eclipse.capra.generic.tracemodel"
+            class="org.eclipse.capra.generic.tracemodel.TracemodelPackage"
+            genModel="model/generictrace.xcore"/>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/pom.xml b/bundles/org.eclipse.capra.generic.tracemodels/pom.xml
new file mode 100644
index 0000000..0460924
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.generic.tracemodels</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/GenericTraceModel.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/GenericTraceModel.java
new file mode 100644
index 0000000..d32ead2
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/GenericTraceModel.java
@@ -0,0 +1,42 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Generic Trace Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.GenericTraceModel#getTraces <em>Traces</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#getGenericTraceModel()
+ * @model
+ * @generated
+ */
+public interface GenericTraceModel extends EObject {
+	/**
+	 * Returns the value of the '<em><b>Traces</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.capra.generic.tracemodel.RelatedTo}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Traces</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Traces</em>' containment reference list.
+	 * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#getGenericTraceModel_Traces()
+	 * @model containment="true"
+	 * @generated
+	 */
+	EList<RelatedTo> getTraces();
+
+} // GenericTraceModel
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/RelatedTo.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/RelatedTo.java
new file mode 100644
index 0000000..6d512d1
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/RelatedTo.java
@@ -0,0 +1,86 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Related To</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getID <em>ID</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getItem <em>Item</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#getRelatedTo()
+ * @model
+ * @generated
+ */
+public interface RelatedTo extends EObject {
+	/**
+	 * Returns the value of the '<em><b>ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>ID</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>ID</em>' attribute.
+	 * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#getRelatedTo_ID()
+	 * @model unique="false" transient="true" changeable="false" volatile="true" derived="true"
+	 *        annotation="http://www.eclipse.org/emf/2002/GenModel get='return <%org.eclipse.emf.ecore.util.EcoreUtil%>.generateUUID();'"
+	 * @generated
+	 */
+	String getID();
+
+	/**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#getRelatedTo_Name()
+	 * @model unique="false"
+	 * @generated
+	 */
+	String getName();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+	void setName(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Item</b></em>' reference list.
+	 * The list contents are of type {@link org.eclipse.emf.ecore.EObject}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Item</em>' reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Item</em>' reference list.
+	 * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#getRelatedTo_Item()
+	 * @model
+	 * @generated
+	 */
+	EList<EObject> getItem();
+
+} // RelatedTo
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/TracemodelFactory.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/TracemodelFactory.java
new file mode 100644
index 0000000..467ada9
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/TracemodelFactory.java
@@ -0,0 +1,51 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage
+ * @generated
+ */
+public interface TracemodelFactory extends EFactory {
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TracemodelFactory eINSTANCE = org.eclipse.capra.generic.tracemodel.impl.TracemodelFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Generic Trace Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Generic Trace Model</em>'.
+	 * @generated
+	 */
+	GenericTraceModel createGenericTraceModel();
+
+	/**
+	 * Returns a new object of class '<em>Related To</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Related To</em>'.
+	 * @generated
+	 */
+	RelatedTo createRelatedTo();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	TracemodelPackage getTracemodelPackage();
+
+} //TracemodelFactory
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/TracemodelPackage.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/TracemodelPackage.java
new file mode 100644
index 0000000..a95a5a0
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/TracemodelPackage.java
@@ -0,0 +1,294 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.tracemodel.TracemodelFactory
+ * @model kind="package"
+ *        annotation="http://www.eclipse.org/emf/2002/GenModel basePackage='org.eclipse.capra.generic'"
+ * @generated
+ */
+public interface TracemodelPackage extends EPackage {
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "tracemodel";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "org.eclipse.capra.generic.tracemodel";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "tracemodel";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	TracemodelPackage eINSTANCE = org.eclipse.capra.generic.tracemodel.impl.TracemodelPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.capra.generic.tracemodel.impl.GenericTraceModelImpl <em>Generic Trace Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.capra.generic.tracemodel.impl.GenericTraceModelImpl
+	 * @see org.eclipse.capra.generic.tracemodel.impl.TracemodelPackageImpl#getGenericTraceModel()
+	 * @generated
+	 */
+	int GENERIC_TRACE_MODEL = 0;
+
+	/**
+	 * The feature id for the '<em><b>Traces</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GENERIC_TRACE_MODEL__TRACES = 0;
+
+	/**
+	 * The number of structural features of the '<em>Generic Trace Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GENERIC_TRACE_MODEL_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Generic Trace Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GENERIC_TRACE_MODEL_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl <em>Related To</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl
+	 * @see org.eclipse.capra.generic.tracemodel.impl.TracemodelPackageImpl#getRelatedTo()
+	 * @generated
+	 */
+	int RELATED_TO = 1;
+
+	/**
+	 * The feature id for the '<em><b>ID</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATED_TO__ID = 0;
+
+	/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATED_TO__NAME = 1;
+
+	/**
+	 * The feature id for the '<em><b>Item</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATED_TO__ITEM = 2;
+
+	/**
+	 * The number of structural features of the '<em>Related To</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATED_TO_FEATURE_COUNT = 3;
+
+	/**
+	 * The number of operations of the '<em>Related To</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int RELATED_TO_OPERATION_COUNT = 0;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.capra.generic.tracemodel.GenericTraceModel <em>Generic Trace Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Generic Trace Model</em>'.
+	 * @see org.eclipse.capra.generic.tracemodel.GenericTraceModel
+	 * @generated
+	 */
+	EClass getGenericTraceModel();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.capra.generic.tracemodel.GenericTraceModel#getTraces <em>Traces</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Traces</em>'.
+	 * @see org.eclipse.capra.generic.tracemodel.GenericTraceModel#getTraces()
+	 * @see #getGenericTraceModel()
+	 * @generated
+	 */
+	EReference getGenericTraceModel_Traces();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.capra.generic.tracemodel.RelatedTo <em>Related To</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Related To</em>'.
+	 * @see org.eclipse.capra.generic.tracemodel.RelatedTo
+	 * @generated
+	 */
+	EClass getRelatedTo();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getID <em>ID</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>ID</em>'.
+	 * @see org.eclipse.capra.generic.tracemodel.RelatedTo#getID()
+	 * @see #getRelatedTo()
+	 * @generated
+	 */
+	EAttribute getRelatedTo_ID();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.capra.generic.tracemodel.RelatedTo#getName()
+	 * @see #getRelatedTo()
+	 * @generated
+	 */
+	EAttribute getRelatedTo_Name();
+
+	/**
+	 * Returns the meta object for the reference list '{@link org.eclipse.capra.generic.tracemodel.RelatedTo#getItem <em>Item</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference list '<em>Item</em>'.
+	 * @see org.eclipse.capra.generic.tracemodel.RelatedTo#getItem()
+	 * @see #getRelatedTo()
+	 * @generated
+	 */
+	EReference getRelatedTo_Item();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	TracemodelFactory getTracemodelFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.capra.generic.tracemodel.impl.GenericTraceModelImpl <em>Generic Trace Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.capra.generic.tracemodel.impl.GenericTraceModelImpl
+		 * @see org.eclipse.capra.generic.tracemodel.impl.TracemodelPackageImpl#getGenericTraceModel()
+		 * @generated
+		 */
+		EClass GENERIC_TRACE_MODEL = eINSTANCE.getGenericTraceModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Traces</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference GENERIC_TRACE_MODEL__TRACES = eINSTANCE.getGenericTraceModel_Traces();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl <em>Related To</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl
+		 * @see org.eclipse.capra.generic.tracemodel.impl.TracemodelPackageImpl#getRelatedTo()
+		 * @generated
+		 */
+		EClass RELATED_TO = eINSTANCE.getRelatedTo();
+
+		/**
+		 * The meta object literal for the '<em><b>ID</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute RELATED_TO__ID = eINSTANCE.getRelatedTo_ID();
+
+		/**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute RELATED_TO__NAME = eINSTANCE.getRelatedTo_Name();
+
+		/**
+		 * The meta object literal for the '<em><b>Item</b></em>' reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference RELATED_TO__ITEM = eINSTANCE.getRelatedTo_Item();
+
+	}
+
+} //TracemodelPackage
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/GenericTraceModelImpl.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/GenericTraceModelImpl.java
new file mode 100644
index 0000000..1a0f155
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/GenericTraceModelImpl.java
@@ -0,0 +1,152 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel.impl;
+
+import java.util.Collection;
+
+import org.eclipse.capra.generic.tracemodel.GenericTraceModel;
+import org.eclipse.capra.generic.tracemodel.RelatedTo;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Generic Trace Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.impl.GenericTraceModelImpl#getTraces <em>Traces</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class GenericTraceModelImpl extends MinimalEObjectImpl.Container implements GenericTraceModel {
+	/**
+	 * The cached value of the '{@link #getTraces() <em>Traces</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getTraces()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<RelatedTo> traces;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected GenericTraceModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TracemodelPackage.Literals.GENERIC_TRACE_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<RelatedTo> getTraces() {
+		if (traces == null) {
+			traces = new EObjectContainmentEList<RelatedTo>(RelatedTo.class, this, TracemodelPackage.GENERIC_TRACE_MODEL__TRACES);
+		}
+		return traces;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL__TRACES:
+				return ((InternalEList<?>)getTraces()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL__TRACES:
+				return getTraces();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL__TRACES:
+				getTraces().clear();
+				getTraces().addAll((Collection<? extends RelatedTo>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL__TRACES:
+				getTraces().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL__TRACES:
+				return traces != null && !traces.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //GenericTraceModelImpl
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/RelatedToImpl.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/RelatedToImpl.java
new file mode 100644
index 0000000..56a1f66
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/RelatedToImpl.java
@@ -0,0 +1,230 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel.impl;
+
+import java.util.Collection;
+
+import org.eclipse.capra.generic.tracemodel.RelatedTo;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Related To</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl#getID <em>ID</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.capra.generic.tracemodel.impl.RelatedToImpl#getItem <em>Item</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class RelatedToImpl extends MinimalEObjectImpl.Container implements RelatedTo {
+	/**
+	 * The default value of the '{@link #getID() <em>ID</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getID()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ID_EDEFAULT = null;
+
+	/**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String NAME_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+	protected String name = NAME_EDEFAULT;
+
+	/**
+	 * The cached value of the '{@link #getItem() <em>Item</em>}' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getItem()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<EObject> item;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected RelatedToImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return TracemodelPackage.Literals.RELATED_TO;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getID() {
+		return EcoreUtil.generateUUID();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setName(String newName) {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, TracemodelPackage.RELATED_TO__NAME, oldName, name));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<EObject> getItem() {
+		if (item == null) {
+			item = new EObjectResolvingEList<EObject>(EObject.class, this, TracemodelPackage.RELATED_TO__ITEM);
+		}
+		return item;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case TracemodelPackage.RELATED_TO__ID:
+				return getID();
+			case TracemodelPackage.RELATED_TO__NAME:
+				return getName();
+			case TracemodelPackage.RELATED_TO__ITEM:
+				return getItem();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case TracemodelPackage.RELATED_TO__NAME:
+				setName((String)newValue);
+				return;
+			case TracemodelPackage.RELATED_TO__ITEM:
+				getItem().clear();
+				getItem().addAll((Collection<? extends EObject>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case TracemodelPackage.RELATED_TO__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case TracemodelPackage.RELATED_TO__ITEM:
+				getItem().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case TracemodelPackage.RELATED_TO__ID:
+				return ID_EDEFAULT == null ? getID() != null : !ID_EDEFAULT.equals(getID());
+			case TracemodelPackage.RELATED_TO__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case TracemodelPackage.RELATED_TO__ITEM:
+				return item != null && !item.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //RelatedToImpl
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/TracemodelFactoryImpl.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/TracemodelFactoryImpl.java
new file mode 100644
index 0000000..d63f0f7
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/TracemodelFactoryImpl.java
@@ -0,0 +1,106 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel.impl;
+
+import org.eclipse.capra.generic.tracemodel.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TracemodelFactoryImpl extends EFactoryImpl implements TracemodelFactory {
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static TracemodelFactory init() {
+		try {
+			TracemodelFactory theTracemodelFactory = (TracemodelFactory)EPackage.Registry.INSTANCE.getEFactory(TracemodelPackage.eNS_URI);
+			if (theTracemodelFactory != null) {
+				return theTracemodelFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new TracemodelFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TracemodelFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL: return createGenericTraceModel();
+			case TracemodelPackage.RELATED_TO: return createRelatedTo();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public GenericTraceModel createGenericTraceModel() {
+		GenericTraceModelImpl genericTraceModel = new GenericTraceModelImpl();
+		return genericTraceModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public RelatedTo createRelatedTo() {
+		RelatedToImpl relatedTo = new RelatedToImpl();
+		return relatedTo;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TracemodelPackage getTracemodelPackage() {
+		return (TracemodelPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static TracemodelPackage getPackage() {
+		return TracemodelPackage.eINSTANCE;
+	}
+
+} //TracemodelFactoryImpl
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/TracemodelPackageImpl.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/TracemodelPackageImpl.java
new file mode 100644
index 0000000..6ab9736
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/impl/TracemodelPackageImpl.java
@@ -0,0 +1,239 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel.impl;
+
+import org.eclipse.capra.generic.tracemodel.GenericTraceModel;
+import org.eclipse.capra.generic.tracemodel.RelatedTo;
+import org.eclipse.capra.generic.tracemodel.TracemodelFactory;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EcorePackage;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class TracemodelPackageImpl extends EPackageImpl implements TracemodelPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass genericTraceModelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass relatedToEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private TracemodelPackageImpl() {
+		super(eNS_URI, TracemodelFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link TracemodelPackage#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static TracemodelPackage init() {
+		if (isInited) return (TracemodelPackage)EPackage.Registry.INSTANCE.getEPackage(TracemodelPackage.eNS_URI);
+
+		// Obtain or create and register package
+		TracemodelPackageImpl theTracemodelPackage = (TracemodelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof TracemodelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new TracemodelPackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		EcorePackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theTracemodelPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theTracemodelPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theTracemodelPackage.freeze();
+
+  
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(TracemodelPackage.eNS_URI, theTracemodelPackage);
+		return theTracemodelPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getGenericTraceModel() {
+		return genericTraceModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getGenericTraceModel_Traces() {
+		return (EReference)genericTraceModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getRelatedTo() {
+		return relatedToEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRelatedTo_ID() {
+		return (EAttribute)relatedToEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getRelatedTo_Name() {
+		return (EAttribute)relatedToEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getRelatedTo_Item() {
+		return (EReference)relatedToEClass.getEStructuralFeatures().get(2);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TracemodelFactory getTracemodelFactory() {
+		return (TracemodelFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		genericTraceModelEClass = createEClass(GENERIC_TRACE_MODEL);
+		createEReference(genericTraceModelEClass, GENERIC_TRACE_MODEL__TRACES);
+
+		relatedToEClass = createEClass(RELATED_TO);
+		createEAttribute(relatedToEClass, RELATED_TO__ID);
+		createEAttribute(relatedToEClass, RELATED_TO__NAME);
+		createEReference(relatedToEClass, RELATED_TO__ITEM);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(genericTraceModelEClass, GenericTraceModel.class, "GenericTraceModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getGenericTraceModel_Traces(), this.getRelatedTo(), null, "traces", null, 0, -1, GenericTraceModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(relatedToEClass, RelatedTo.class, "RelatedTo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getRelatedTo_ID(), theEcorePackage.getEString(), "ID", null, 0, 1, RelatedTo.class, IS_TRANSIENT, IS_VOLATILE, !IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, IS_DERIVED, IS_ORDERED);
+		initEAttribute(getRelatedTo_Name(), theEcorePackage.getEString(), "name", null, 0, 1, RelatedTo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getRelatedTo_Item(), theEcorePackage.getEObject(), null, "item", null, 0, -1, RelatedTo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //TracemodelPackageImpl
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/util/TracemodelAdapterFactory.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/util/TracemodelAdapterFactory.java
new file mode 100644
index 0000000..79ad752
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/util/TracemodelAdapterFactory.java
@@ -0,0 +1,138 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel.util;
+
+import org.eclipse.capra.generic.tracemodel.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage
+ * @generated
+ */
+public class TracemodelAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TracemodelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TracemodelAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = TracemodelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected TracemodelSwitch<Adapter> modelSwitch =
+		new TracemodelSwitch<Adapter>() {
+			@Override
+			public Adapter caseGenericTraceModel(GenericTraceModel object) {
+				return createGenericTraceModelAdapter();
+			}
+			@Override
+			public Adapter caseRelatedTo(RelatedTo object) {
+				return createRelatedToAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.generic.tracemodel.GenericTraceModel <em>Generic Trace Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.capra.generic.tracemodel.GenericTraceModel
+	 * @generated
+	 */
+	public Adapter createGenericTraceModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.generic.tracemodel.RelatedTo <em>Related To</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.capra.generic.tracemodel.RelatedTo
+	 * @generated
+	 */
+	public Adapter createRelatedToAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //TracemodelAdapterFactory
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/util/TracemodelSwitch.java b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/util/TracemodelSwitch.java
new file mode 100644
index 0000000..a4ac0f4
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/generic/tracemodel/util/TracemodelSwitch.java
@@ -0,0 +1,131 @@
+/**
+ */
+package org.eclipse.capra.generic.tracemodel.util;
+
+import org.eclipse.capra.generic.tracemodel.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.capra.generic.tracemodel.TracemodelPackage
+ * @generated
+ */
+public class TracemodelSwitch<T> extends Switch<T> {
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static TracemodelPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public TracemodelSwitch() {
+		if (modelPackage == null) {
+			modelPackage = TracemodelPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case TracemodelPackage.GENERIC_TRACE_MODEL: {
+				GenericTraceModel genericTraceModel = (GenericTraceModel)theEObject;
+				T result = caseGenericTraceModel(genericTraceModel);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case TracemodelPackage.RELATED_TO: {
+				RelatedTo relatedTo = (RelatedTo)theEObject;
+				T result = caseRelatedTo(relatedTo);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Generic Trace Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Generic Trace Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseGenericTraceModel(GenericTraceModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Related To</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Related To</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseRelatedTo(RelatedTo object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //TracemodelSwitch
diff --git a/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java b/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
new file mode 100644
index 0000000..ef20f50
--- /dev/null
+++ b/bundles/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
@@ -0,0 +1,246 @@
+/*******************************************************************************
+ * 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.generic.tracemodels;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.AbstractMetaModelAdapter;
+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.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.generic.tracemodel.GenericTraceModel;
+import org.eclipse.capra.generic.tracemodel.RelatedTo;
+import org.eclipse.capra.generic.tracemodel.TracemodelFactory;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provides generic functionality to deal with traceability meta models.
+ */
+public class GenericMetaModelAdapter extends AbstractMetaModelAdapter implements TraceMetaModelAdapter {
+	
+	private static final Logger LOG = LoggerFactory.getLogger(GenericMetaModelAdapter.class);
+
+	private static final int DEFAULT_INITIAL_TRANSITIVITY_DEPTH =-2;
+
+	public GenericMetaModelAdapter() {
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public EObject createModel() {
+		return TracemodelFactory.eINSTANCE.createGenericTraceModel();
+	}
+
+	@Override
+	public Collection<EClass> getAvailableTraceTypes(List<EObject> selection) {
+		Collection<EClass> traceTypes = new ArrayList<>();
+		if (selection.size() > 1) {
+			traceTypes.add(TracemodelPackage.eINSTANCE.getRelatedTo());
+		}
+		return traceTypes;
+	}
+
+	@Override
+	public EObject createTrace(EClass traceType, EObject traceModel, List<EObject> selection) {
+		GenericTraceModel tm = (GenericTraceModel) traceModel;
+		EObject trace = TracemodelFactory.eINSTANCE.create(traceType);
+		RelatedTo relatedToTrace = (RelatedTo) trace;
+		relatedToTrace.getItem().addAll(selection);
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+
+		// String builder to build the name of the trace link so by adding the
+		// elements it connects so as to make it easy for a user to visually
+		// differentiate trace links
+		StringBuilder name = new StringBuilder();
+		for (Object obj : selection) {
+			name.append(" ")
+					.append(artifactHelper.getHandler(artifactHelper.unwrapWrapper(obj)).get()
+							.withCastedHandler(artifactHelper.unwrapWrapper(obj), (h, e) -> h.getDisplayName(e))
+							.orElseGet(obj::toString));
+		}
+		relatedToTrace.setName(name.toString());
+		tm.getTraces().add(relatedToTrace);
+		return relatedToTrace;
+	}
+
+	@Override
+	public boolean isThereATraceBetween(EObject firstElement, EObject secondElement, EObject traceModel) {
+		GenericTraceModel root = (GenericTraceModel) traceModel;
+		List<RelatedTo> relevantLinks = new ArrayList<RelatedTo>();
+		List<RelatedTo> allTraces = root.getTraces();
+
+		for (RelatedTo trace : allTraces) {
+			if (!firstElement.equals(secondElement)) {
+				if (trace.getItem().contains(firstElement) && trace.getItem().contains(secondElement)) {
+					relevantLinks.add(trace);
+				}
+			}
+		}
+		return relevantLinks.size() > 0;
+	}
+
+	@Override
+	public List<Connection> getConnectedElements(EObject element, EObject tracemodel) {
+		GenericTraceModel root = (GenericTraceModel) tracemodel;
+		List<Connection> connections = new ArrayList<>();
+		List<RelatedTo> traces = root.getTraces();
+
+		if (element instanceof RelatedTo) {
+			RelatedTo trace = (RelatedTo) element;
+			connections.add(new Connection(element, trace.getItem(), trace));
+		} else {
+			for (RelatedTo trace : traces) {
+				if (trace.getItem().contains(element)) {
+					connections.add(new Connection(element, trace.getItem(), trace));
+				}
+			}
+		}
+		return connections;
+	}
+
+	@Override
+	public List<Connection> getConnectedElements(EObject element, EObject tracemodel,
+			List<String> selectedRelationshipTypes) {
+		GenericTraceModel root = (GenericTraceModel) tracemodel;
+		List<Connection> connections = new ArrayList<>();
+		List<RelatedTo> traces = root.getTraces();
+
+		if (selectedRelationshipTypes.size() == 0 || selectedRelationshipTypes
+				.contains(TracemodelPackage.eINSTANCE.getRelatedTo().getName())) {
+			if (element instanceof RelatedTo) {
+				RelatedTo trace = (RelatedTo) element;
+				connections.add(new Connection(element, trace.getItem(), trace));
+			} else {
+				for (RelatedTo trace : traces) {
+					if (trace.getItem().contains(element)) {
+						connections.add(new Connection(element, trace.getItem(), trace));
+					}
+				}
+			}
+		}
+		return connections;
+	}
+
+	private List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel,
+			List<Object> accumulator, int currentDepth, int maximumDepth) {
+		List<Connection> directElements = getConnectedElements(element, traceModel);
+		List<Connection> allElements = new ArrayList<>();
+
+		int currDepth = currentDepth + 1;
+		for (Connection connection : directElements) {
+			if (!accumulator.contains(connection.getTlink())) {
+				allElements.add(connection);
+				accumulator.add(connection.getTlink());
+				for (EObject e : connection.getTargets()) {
+					if (maximumDepth == 0 || currDepth <= maximumDepth) {
+						allElements.addAll(
+								getTransitivelyConnectedElements(e, traceModel, accumulator, currDepth, maximumDepth));
+					}
+				}
+			}
+		}
+		return allElements;
+	}
+
+	@Override
+	public List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel, int maximumDepth) {
+		List<Object> accumulator = new ArrayList<>();
+		return getTransitivelyConnectedElements(element, traceModel, accumulator, DEFAULT_INITIAL_TRANSITIVITY_DEPTH, maximumDepth);
+	}
+
+	@Override
+	public List<Connection> getAllTraceLinks(EObject traceModel) {
+		GenericTraceModel model = (GenericTraceModel) traceModel;
+		List<Connection> allLinks = new ArrayList<>();
+
+		for (RelatedTo trace : model.getTraces()) {
+			List<EObject> allItems = new ArrayList<>();
+			allItems.addAll(trace.getItem());
+			EObject origin = allItems.get(0);
+			allItems.remove(0);
+			allLinks.add(new Connection(origin, allItems, trace));
+		}
+		return allLinks;
+	}
+
+	@Override
+	public void deleteTrace(List<Connection> toDelete, EObject traceModel) {
+		if (traceModel instanceof GenericTraceModel) {
+			GenericTraceModel tModel = (GenericTraceModel) traceModel;
+			EList<RelatedTo> links = tModel.getTraces();
+			ResourceSet resourceSet = new ResourceSetImpl();
+			for (Connection c : toDelete) {
+				links.remove(c.getTlink());
+			}
+			GenericTraceModel newTraceModel = TracemodelFactory.eINSTANCE.createGenericTraceModel();
+			newTraceModel.getTraces().addAll(links);
+			URI traceModelURI = EcoreUtil.getURI(traceModel);
+			Resource resourceForTraces = resourceSet.createResource(traceModelURI);
+			resourceForTraces.getContents().add(newTraceModel);
+	
+			try {
+				resourceForTraces.save(null);
+                          	// TODO: Think of a way to let the developer handle such sitations (e.g., via an Exception)
+			} catch (IOException e) {
+				LOG.error("Trace model could not be saved.", e);
+			}
+		}
+	}
+
+	@Override
+	public List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel,
+			List<String> selectedRelationshipTypes, int maximumDepth) {
+		List<Object> accumulator = new ArrayList<>();
+		return getTransitivelyConnectedElements(element, traceModel, accumulator, selectedRelationshipTypes, DEFAULT_INITIAL_TRANSITIVITY_DEPTH,
+				maximumDepth);
+	}
+
+	private List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel,
+			List<Object> accumulator, List<String> selectedRelationshipTypes, int currentDepth, int maximumDepth) {
+		List<Connection> directElements = getConnectedElements(element, traceModel, selectedRelationshipTypes);
+		List<Connection> allElements = new ArrayList<>();
+		int currDepth = currentDepth + 1;
+		for (Connection connection : directElements) {
+			if (!accumulator.contains(connection.getTlink())) {
+				allElements.add(connection);
+				accumulator.add(connection.getTlink());
+				for (EObject e : connection.getTargets()) {
+					if (maximumDepth == 0 || currDepth <= maximumDepth) {
+						allElements.addAll(getTransitivelyConnectedElements(e, traceModel, accumulator,
+								selectedRelationshipTypes, currDepth, maximumDepth));
+					}
+				}
+			}
+		}
+
+		return allElements;
+	}
+}
diff --git a/org.eclipse.capra.handler.cdt/.classpath b/bundles/org.eclipse.capra.handler.cdt/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.cdt/.classpath
rename to bundles/org.eclipse.capra.handler.cdt/.classpath
diff --git a/org.eclipse.capra.handler.cdt/.gitignore b/bundles/org.eclipse.capra.handler.cdt/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.cdt/.gitignore
rename to bundles/org.eclipse.capra.handler.cdt/.gitignore
diff --git a/org.eclipse.capra.handler.cdt/.project b/bundles/org.eclipse.capra.handler.cdt/.project
similarity index 100%
rename from org.eclipse.capra.handler.cdt/.project
rename to bundles/org.eclipse.capra.handler.cdt/.project
diff --git a/org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..53b3f89
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for C/C++ Elements
+Bundle-SymbolicName: org.eclipse.capra.handler.cdt;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-Vendor: rt-labs.com
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.cdt.core,
+ org.eclipse.capra.core,
+ org.eclipse.text,
+ org.eclipse.ltk.core.refactoring,
+ org.eclipse.capra.core,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.ui.ide,
+ org.eclipse.capra.ui.notification,
+ org.apache.httpcomponents.httpclient,
+ org.apache.httpcomponents.httpcore
+Export-Package: org.eclipse.capra.handler.cdt,
+ org.eclipse.capra.handler.cdt.preferences
+Bundle-Activator: org.eclipse.capra.handler.cdt.Activator
+Bundle-ActivationPolicy: lazy
+
diff --git a/bundles/org.eclipse.capra.handler.cdt/build.properties b/bundles/org.eclipse.capra.handler.cdt/build.properties
new file mode 100644
index 0000000..5a2e446
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/build.properties
@@ -0,0 +1,18 @@
+###############################################################################
+# 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
diff --git a/bundles/org.eclipse.capra.handler.cdt/plugin.xml b/bundles/org.eclipse.capra.handler.cdt/plugin.xml
new file mode 100644
index 0000000..b7fa8d6
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.cdt.CDTHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.cdt.CDTHandler">
+      </artifactHandler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.capra.handler.cdt.notification.StartUp">
+      </startup>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.cdt/pom.xml b/bundles/org.eclipse.capra.handler.cdt/pom.xml
new file mode 100644
index 0000000..a9a78f1
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.cdt</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/Activator.java b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/Activator.java
new file mode 100644
index 0000000..642a08d
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/Activator.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+	// The plug-in ID
+	public static String PLUGIN_ID = "org.eclipse.capra.handler.cdt";
+
+	// The shared instance
+	private static Activator plugin;
+
+	/* (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		plugin = this;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTAnnotate.java b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTAnnotate.java
new file mode 100644
index 0000000..86c2153
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTAnnotate.java
@@ -0,0 +1,275 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.capra.handler.cdt.preferences.CDTPreferences;
+import org.eclipse.cdt.core.dom.ast.IASTComment;
+import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier;
+import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
+import org.eclipse.cdt.core.dom.rewrite.ASTRewrite;
+import org.eclipse.cdt.core.dom.rewrite.ASTRewrite.CommentPosition;
+import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.IBuffer;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ISourceRange;
+import org.eclipse.cdt.core.model.ISourceReference;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+
+/**
+ * Code for updating requirement annotation tag in Doxygen comments. Gets
+ * comments from the CDT element, matches out the requirement tag and replaces
+ * it with the new annotation.
+ * 
+ * TODO: This code doesn't work for the declaration of C++ class members. For
+ * some reason comments on C++ members are parsed as trailing to previous
+ * element instead of leading the one we want it to be associated with. Because
+ * of that we don't find them.
+ */
+public class CDTAnnotate {
+
+	/**
+	 * Creates or replaces the annotation on the handle element.
+	 * 
+	 * @param handle The CDT object that contains the source element where the tag annotation comment should be placed.
+	 * @param annotation The artifact annotation text (not including the tag)
+	 * @throws CoreException If an error occur while working with the C model. Potential errors include: IO error while
+	 * 	reading/writing to the file; the argument handle element has an unexpected structure which cannot be handled.
+	 */
+	public static void annotateArtifact(ICElement handle, String annotation) throws CoreException  {
+		if (!(handle instanceof ISourceReference)) return;
+
+		ISourceReference sourceRef = (ISourceReference) handle;
+
+		IEclipsePreferences preferences = CDTPreferences.getPreferences();
+		String tag = preferences.get(
+				CDTPreferences.ANNOTATE_CDT_TAG_PREFIX, CDTPreferences.ANNOTATE_CDT_TAG_PREFIX_DEFAULT).trim()
+			+ preferences.get(CDTPreferences.ANNOTATE_CDT_TAG, CDTPreferences.ANNOTATE_CDT_TAG_DEFAULT).trim();
+		
+		if (sourceRef instanceof ITranslationUnit) {
+			annotateFile(annotation, tag, (ITranslationUnit) sourceRef);
+		} else {
+			annotateDeclaration(annotation, tag, sourceRef);
+		}
+	}
+
+	private static void annotateFile(String annotation, String tag, ITranslationUnit translationUnit) throws CoreException {
+		Optional<IASTComment> oldCommentNode = Arrays.stream(translationUnit.getAST().getComments())
+			.filter(c -> isDoxygenFileComment(c.getRawSignature()))
+			.findFirst();
+		
+		String newline = findFirstNewline(translationUnit.getBuffer());
+		
+		String newCommentText = createNewCommentString(
+			oldCommentNode.map(c -> c.getRawSignature()), 
+			annotation, tag, newline, true);
+		
+		if (oldCommentNode.isPresent()) {
+			IASTFileLocation loc = oldCommentNode.orElse(null).getFileLocation();
+			translationUnit.getBuffer().replace(loc.getNodeOffset(), loc.getNodeLength(), newCommentText);
+		} else {
+			// Put some space after new comment
+			translationUnit.getBuffer().replace(0, 0, newCommentText + newline);
+		}
+
+		translationUnit.getBuffer().save(new NullProgressMonitor(), false);
+	}
+
+	private static Pattern FILE_TAG_PATTERN = Pattern.compile(""
+		+ "^((/\\*[!*])" // Start of Doxygen comment
+		+ "|"
+		+ "(\\s*\\*?))" // Comment body: Optionally leading star and spaces
+		+ "\\s*"
+		+ "[@\\\\]file\\W" // Tag: Either \file or @file, with non-word char afterwards
+		, Pattern.MULTILINE);
+
+	static boolean isDoxygenFileComment(String comment) {
+		return comment != null && FILE_TAG_PATTERN.matcher(comment).find();
+	}
+
+	private static void annotateDeclaration(String annotation, String tag, ISourceReference sourceRef) 
+		throws CoreException, CModelException
+	{
+		ITranslationUnit translationUnit = sourceRef.getTranslationUnit();
+		IASTTranslationUnit ast = translationUnit.getAST();
+
+		IASTNode node = findNode(sourceRef, ast);
+		String newline = findNewlineAndIndentationBefore(translationUnit.getBuffer(), node.getFileLocation().getNodeOffset());
+
+		// Use ASTRewrite just to get comments for node
+		ASTRewrite rewrite = ASTRewrite.create(ast);
+		Optional<IASTComment> oldCommentNode = getDoxygenComment(rewrite.getComments(node, CommentPosition.leading));
+		
+		String newCommentText = createNewCommentString(
+			oldCommentNode.map(c -> c.getRawSignature()), 
+			annotation, tag, newline, false);
+
+		if (oldCommentNode.isPresent()) {
+			IASTFileLocation loc = oldCommentNode.get().getFileLocation();
+			translationUnit.getBuffer().replace(loc.getNodeOffset(), loc.getNodeLength(), newCommentText);
+		} else {
+			translationUnit.getBuffer().replace(node.getFileLocation().getNodeOffset(), 0, newCommentText);
+		}
+
+		translationUnit.getBuffer().save(new NullProgressMonitor(), false);
+	}
+
+	
+	private static IASTNode findNode(ISourceReference sourceRef, IASTTranslationUnit ast) throws CModelException {
+		ISourceRange sourceRange = sourceRef.getSourceRange();
+		IASTNode node = ast.getNodeSelector(null)
+			.findEnclosingNode(sourceRange.getStartPos(), sourceRange.getLength());
+		
+		// If this is a struct with a typedef then the annotation should go on the typedef instead
+		if (node instanceof IASTCompositeTypeSpecifier) {
+			IASTNode parent = ((IASTCompositeTypeSpecifier) node).getParent();
+			
+			if (parent instanceof IASTSimpleDeclaration) {
+				return parent;
+			}
+		}
+		
+		return node;
+	}
+
+	/**
+	 * @return A new comment, either with the tag section in comment substituted by the content of 
+	 * 	annotation, or newly constructed comment with annotation as its content.  
+	 */
+	// Package visibility for testing
+	static String createNewCommentString(Optional<String> oldCom, String annotation, String tag, String nl, boolean addFileTag) {
+
+		if (!oldCom.isPresent()) {
+			// There were no previous comment, create a new one
+			String newComment = "/**" + nl;
+			if (addFileTag) newComment += " * @file" + nl;
+			newComment += " * " + tag + " " + annotation + nl 
+				+ " */" + nl;
+			return newComment;
+		}
+		
+		String oldComment = oldCom.get();
+		
+		int tagIx = oldComment.indexOf(tag);
+		
+		if (tagIx != -1) {
+			// There is an old tag. Match it and all of its annotation and replace with new content. 
+			
+			// Match the first thing after the tag and the annotations
+			Matcher endOfTagMatcher = Pattern.compile(
+				// Empty line, with star and optional spaces
+				"(\r?\n\\s*\\*\\s*\r?\n)"
+				+ "|"
+				// Comment end, including leading space and optional newline
+				+ "(\\s*(\r?\n)?\\s*\\*/(\r?\n)?)")  
+				.matcher(oldComment);
+			
+			if (endOfTagMatcher.find(tagIx + tag.length())) {
+				String beforeTagText = oldComment.substring(0, tagIx);
+				String afterTagText = oldComment.substring(endOfTagMatcher.start());
+				return beforeTagText +  tag + " " + annotation + afterTagText;
+			}
+		} else {
+			// There is no tag. Insert tag in the end of the comment.
+			Matcher commentEndMatcher = Pattern.compile(
+				".*?" // The whole comment, except the end, non-greedy 
+				+ "(" // A group for all text that should be replaced
+				+ "(\r?\n)?" // Remove last newline (if there is one)
+				+ "\\s*\\*/)", // Leading spaces and end-of-comment 
+				Pattern.DOTALL).matcher(oldComment);
+			
+			if (commentEndMatcher.find()) {
+				return oldComment.substring(0, commentEndMatcher.start(1))
+					+ nl + " * " + tag + " " + annotation + nl + " */";
+			}
+		}
+		
+		// This is a weird comment indeed. What to do?
+		throw new IllegalStateException("Weird comment: " + oldComment);
+	}
+
+	/**
+	 * @return The first comment that is in Doxygen format (starts with /**). 
+	 */
+	private static Optional<IASTComment> getDoxygenComment(List<IASTComment> comments) {
+		// Begging search from the comment nearest to the node
+		Collections.reverse(comments);
+		return comments.stream()
+			.filter(c -> isDoxygenComment(c))
+			.filter(c -> !isDoxygenFileComment(c.getRawSignature()))
+			.findAny();
+	}
+
+	private static boolean isDoxygenComment(IASTComment comment) {
+		String text = comment.getRawSignature();
+		return text.startsWith("/**") || text.startsWith("/*!");
+	}
+	
+	/**
+	 * Returns the newline chars of the first line in text.
+	 */
+	private static String findFirstNewline(IBuffer text) {
+		for (int charIx = 0; charIx < text.getLength(); charIx++) {
+			String newline = getNewline(text, charIx);
+			if (newline != null) return newline;
+		}
+		
+		// The argument text has no newlines, default to \n
+		return "\n";
+	}
+	
+	private static String getNewline(IBuffer text, int offset) {
+		if (text.getChar(offset) == '\n') {
+			if (offset > 0 && text.getChar(offset - 1) == '\r') return "\r\n";
+			else return "\n";
+		} else if (text.getChar(offset) == '\r') {
+			return "\r";
+		} else {
+			return null;
+		} 
+	}
+	
+	private static final Pattern NON_SPACES_PATTERN = Pattern.compile("\\S");
+
+	/**
+	 * Returns the newline and indentation chars for the line on offset.
+	 */
+	private static String findNewlineAndIndentationBefore(IBuffer text, int offset) {
+		for (int charIx = offset; charIx >= 0; charIx--) {
+			String newline = getNewline(text, charIx);
+			if (newline != null) {
+				// Get text from end of newline, to end of indentation (first non-space),
+				String indentation = text.getText(charIx + 1, offset - charIx - 1);
+
+				// Even if offset was for something with other char before it, we indent using
+				// only whitespace
+				return newline + NON_SPACES_PATTERN.matcher(indentation).replaceAll(" ");
+			}
+		}
+		
+		return findFirstNewline(text);
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
new file mode 100644
index 0000000..5445743
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.http.client.utils.URIBuilder;
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.handlers.AnnotationException;
+import org.eclipse.capra.core.handlers.IAnnotateArtifact;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.handler.cdt.preferences.CDTPreferences;
+import org.eclipse.cdt.core.dom.ast.ICompositeType;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Handler to allow tracing to and from elements of C such as files and
+ * functions. Uses CDT as the foundation.
+ * </p>
+ * This handler encodes a locator to the C element in artifact URI:s in the
+ * following way:
+ * {@code platform:/Project_name/path/to/file.c#classOrStructName/memberName}
+ * <p/>
+ * {@code platform:/Project_name/path/to/file.c#functionClassOrStructName}.
+ */
+public class CDTHandler extends AbstractArtifactHandler<ICElement> implements IAnnotateArtifact {
+
+	@Override
+	public EObject createWrapper(ICElement element, EObject artifactModel) {
+		ICompositeType type = (ICompositeType) element.getParent().getAncestor(ICElement.C_CLASS);
+		if (type == null)
+			type = (ICompositeType) element.getParent().getAncestor(ICElement.C_STRUCT);
+		if (type == null)
+			type = (ICompositeType) element.getParent().getAncestor(ICElement.C_UNION);
+
+		// TODO: Will this be unique? I don't know.
+		String typePrefix = type == null ? "" : type.getName() + "/";
+
+		// TODO: This does not take C++ function overloading on argument types
+		// into account when
+		// constructing the URI
+		String uri = new URIBuilder().setScheme("platform").setPath("/resource" + element.getPath())
+				.setFragment(typePrefix + element.getElementName()).toString();
+
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), uri,
+				element.getHandleIdentifier(), element.getElementName(), element.getPath().toString());
+
+		return wrapper;
+	}
+
+	@Override
+	public ICElement resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		return CoreModel.create(adapter.getArtifactIdentifier(wrapper));
+	}
+
+	@Override
+	public String getDisplayName(ICElement element) {
+		return element.getElementName();
+	}
+
+	@Override
+	public void annotateArtifact(EObject wrapper, String annotation) throws AnnotationException {
+		IEclipsePreferences preferences = CDTPreferences.getPreferences();
+
+		if (!preferences.getBoolean(CDTPreferences.ANNOTATE_CDT, CDTPreferences.ANNOTATE_CDT_DEFAULT))
+			return;
+
+		ICElement handle = resolveWrapper(wrapper);
+
+		try {
+			CDTAnnotate.annotateArtifact(handle, annotation);
+		} catch (CoreException e) {
+			throw new AnnotationException(e.getStatus());
+		}
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for C code
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/notification/CElementChangeListener.java b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/notification/CElementChangeListener.java
new file mode 100644
index 0000000..9eb7854
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/notification/CElementChangeListener.java
@@ -0,0 +1,249 @@
+/*******************************************************************************
+ * 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.cdt.notification;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.handler.cdt.CDTHandler;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper.IssueType;
+import org.eclipse.cdt.core.model.ElementChangedEvent;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICElementDelta;
+import org.eclipse.cdt.core.model.IElementChangedListener;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * Checks for changes of C/C++ elements to determine if they affect the trace
+ * model. Creates markers on the artifact model if the changes affect artifact
+ * wrappers.
+ *
+ * @author Dusan Kalanj
+ */
+public class CElementChangeListener implements IElementChangedListener {
+	ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	@Override
+	public void elementChanged(ElementChangedEvent event) {
+
+		TracePersistenceAdapter tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = tracePersistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		List<EObject> allArtifacts = artifactAdapter.getAllArtifacts(artifactModel);
+		List<EObject> cArtifacts = allArtifacts.stream()
+				.filter(p -> artifactAdapter.getArtifactHandler(p).equals(CDTHandler.class.getName()))
+				.collect(Collectors.toList());
+
+		if (cArtifacts.size() == 0)
+			return;
+
+		IPath path = new Path(EcoreUtil.getURI(artifactModel).toPlatformString(false));
+		IFile wrapperContainer = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+
+		new WorkspaceJob(CapraNotificationHelper.NOTIFICATION_JOB) {
+			@Override
+			public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+				handleDelta(event.getDelta(), cArtifacts, wrapperContainer);
+				return Status.OK_STATUS;
+			}
+		}.schedule();
+	}
+
+	private void handleDelta(ICElementDelta delta, List<EObject> cArtifacts, IFile wrapperContainer) {
+
+		// Visit all the affected children of affected element
+		for (ICElementDelta subDelta : delta.getAffectedChildren())
+			handleDelta(subDelta, cArtifacts, wrapperContainer);
+
+		int flags = delta.getFlags();
+		int changeType = delta.getKind();
+		ICElement affectedElement = delta.getElement();
+		IssueType issueType = null;
+
+		if (changeType == ICElementDelta.ADDED)
+			issueType = IssueType.ADDED;
+		// TODO doesn't work if a source folder is renamed - it says that the
+		// children have been deleted, instead of that their ancestor was
+		// renamed. But renaming the src folder isn't good practice anyway.
+		else if (changeType == ICElementDelta.REMOVED) {
+
+			if ((flags & ICElementDelta.F_MOVED_TO) != 0)
+				if (delta.getMovedToElement().getElementName().equals(affectedElement.getElementName()))
+					issueType = IssueType.MOVED;
+				else
+					issueType = IssueType.RENAMED;
+			else {
+				if (!(affectedElement instanceof ITranslationUnit
+						&& ((ITranslationUnit) affectedElement).isWorkingCopy()))
+					issueType = IssueType.DELETED;
+			}
+
+		} else if (changeType == ICElementDelta.CHANGED)
+			issueType = IssueType.CHANGED;
+
+		if (issueType != null) {
+			String affectedElementUri = affectedElement.getHandleIdentifier();
+			if (affectedElementUri != null) {
+				for (EObject aw : cArtifacts) {
+					String artifactId = artifactAdapter.getArtifactIdentifier(aw);
+					// If the change type is "CHANGED", meaning that the element
+					// wasn't deleted, renamed, added or moved, only consider
+					// making a marker if the URI of the affected element is the
+					// same as the URI in the wrapper.
+					if (issueType == IssueType.CHANGED && !artifactId.equals(affectedElementUri))
+						continue;
+					// Otherwise (the change is either "delete", "move" or
+					// "rename"), consider making the marker for the affected
+					// element as well as its children, who's URIs have changed
+					// and need updating.
+					IssueType[] markersToDelete = null;
+					String deleteMarkerUri = "";
+					if (issueType == IssueType.MOVED || issueType == IssueType.RENAMED) {
+						deleteMarkerUri = delta.getMovedToElement().getHandleIdentifier();
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.DELETED };
+					} else if (issueType == IssueType.DELETED) {
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.CHANGED };
+						deleteMarkerUri = affectedElementUri;
+					} else if (issueType == IssueType.ADDED) {
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.DELETED };
+						deleteMarkerUri = affectedElementUri;
+					}
+
+					if (!deleteMarkerUri.isEmpty() && artifactId.contains(deleteMarkerUri))
+						CapraNotificationHelper.deleteCapraMarker(artifactId, markersToDelete, wrapperContainer);
+
+					if (artifactId.contains(affectedElementUri)) {
+						HashMap<String, String> markerInfo = generateMarkerInfo(aw, delta, issueType);
+						CapraNotificationHelper.createCapraMarker(markerInfo, wrapperContainer);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Generates the attributes that will later be assigned (in the createMarker
+	 * method in the CapraNotificationHelper) to a Capra change marker.
+	 *
+	 * @param aw
+	 *            ArtifactWrapper that links to the element in the delta or to a
+	 *            child of the element in the delta
+	 * @param delta
+	 *            represents changes in the state of a C/C++ element
+	 * @param issueType
+	 *            the type of change that occurred
+	 * @return a key value HashMap, containing the attributes to be assigned to
+	 *         a Capra change marker and their keys (IDs).
+	 */
+	private HashMap<String, String> generateMarkerInfo(EObject aw, ICElementDelta delta, IssueType issueType) {
+		HashMap<String, String> markerInfo = new HashMap<String, String>();
+
+		// Properties from the C/C++ element in the wrapper (all elements)
+		String oldArtifactUri = artifactAdapter.getArtifactIdentifier(aw);
+		String oldArtifactName = artifactAdapter.getArtifactName(aw);
+
+		// Properties from the affected C/C++ element before the change.
+		ICElement oldAffectedElement = delta.getElement();
+		String oldAffectedElementUri = oldAffectedElement.getHandleIdentifier();
+		String oldAffectedElementName = oldAffectedElement.getElementName();
+
+		// Properties to be assigned to the marker so that they can be later
+		// used in quick fix solutions.
+		String newAffectedElementUri = null;
+		String newAffectedElementName = null;
+
+		// Affected element in it's new state, if it has been renamed or moved,
+		// otherwise null.
+		ICElement newAffectedElement = delta.getMovedToElement();
+		if (newAffectedElement != null) {
+			newAffectedElementUri = newAffectedElement.getHandleIdentifier();
+			newAffectedElementName = newAffectedElement.getElementName();
+		}
+
+		// Generate a message for the marker based on the change.
+		// TODO Make messages more readable (replaces uris with names?).
+		String message = "";
+		switch (issueType) {
+		case RENAMED:
+			if (oldArtifactUri.equals(oldAffectedElementUri))
+				// The element in the wrapper is the renamed element.
+				message = oldAffectedElementUri + " has been renamed to " + newAffectedElementUri + ".";
+			else
+				// The element in the wrapper is a child of the renamed element.
+				message = oldAffectedElementName + ", an ancestor of " + oldArtifactUri + ", has been renamed to "
+						+ newAffectedElementName + ".";
+			break;
+		case MOVED:
+			if (oldArtifactUri.equals(oldAffectedElementUri))
+				// The element in the wrapper is the moved element.
+				message = oldAffectedElementUri + " has been moved to " + newAffectedElementUri + ".";
+			else
+				// The element in the wrapper is a child of the moved element.
+				message = oldAffectedElementName + ", an ancestor of " + oldArtifactUri + ", has been moved to "
+						+ newAffectedElementUri;
+			break;
+		case DELETED:
+			message = artifactAdapter.getArtifactUri(aw) + " has been deleted or has had its signature changed.";
+			break;
+		case CHANGED:
+			message = artifactAdapter.getArtifactUri(aw)
+					+ " has been edited. Please check if associated trace links are still valid.";
+			break;
+		case ADDED:
+			break;
+		}
+
+		if (newAffectedElementUri != null) {
+			// The affected element has been renamed or moved.
+			String newArtifactUri;
+			String newArtifactName;
+
+			if (oldArtifactUri.equals(oldAffectedElementUri)) {
+				// The element in the wrapper is the affected element.
+				newArtifactUri = newAffectedElementUri;
+				newArtifactName = newAffectedElementName;
+			} else {
+				// The element in the wrapper is a child of the affected
+				// element. Update the relevant part of the URI.
+				newArtifactUri = oldArtifactUri.replace(oldAffectedElementUri, newAffectedElementUri);
+				newArtifactName = oldArtifactName;
+			}
+
+			markerInfo.put(CapraNotificationHelper.NEW_URI, newArtifactUri);
+			markerInfo.put(CapraNotificationHelper.NEW_NAME, newArtifactName);
+		}
+
+		markerInfo.put(CapraNotificationHelper.ISSUE_TYPE, issueType.getValue());
+		markerInfo.put(CapraNotificationHelper.OLD_URI, oldArtifactUri);
+		markerInfo.put(CapraNotificationHelper.MESSAGE, message);
+
+		return markerInfo;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/notification/StartUp.java b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/notification/StartUp.java
new file mode 100644
index 0000000..28a8c12
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/notification/StartUp.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * 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.cdt.notification;
+
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.ui.IStartup;
+
+/**
+ * Registers the startup extension to add the C Element change listener.
+ */
+public class StartUp implements IStartup {
+
+	@Override
+	public void earlyStartup() {
+		CoreModel.getDefault().addElementChangedListener(new CElementChangeListener());
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/preferences/CDTPreferences.java b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/preferences/CDTPreferences.java
new file mode 100644
index 0000000..633fd55
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/preferences/CDTPreferences.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * 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.cdt.preferences;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+public class CDTPreferences {
+
+    public static final IScopeContext SCOPE_CONTEXT = InstanceScope.INSTANCE;
+    public static final String PREFERENCE_NODE = "org.eclipse.capra.ui.cdt";
+
+	// Should annotate C source code?
+	public static final String ANNOTATE_CDT = "ANNOTATE_CDT";
+	public static final boolean ANNOTATE_CDT_DEFAULT = false;
+
+	// Doxygen tag to use for annotation
+	public static final String ANNOTATE_CDT_TAG = "ANNOTATE_CDT_TAG";
+	public static final String ANNOTATE_CDT_TAG_DEFAULT = "parent";
+
+	// Doxygen tag prefix to use for annotation
+	public static final String ANNOTATE_CDT_TAG_PREFIX = "ANNOTATE_CDT_TAG_PREFIX";
+	public static final String ANNOTATE_CDT_TAG_PREFIX_DEFAULT = "@";
+
+    public static IEclipsePreferences getPreferences() {
+        return SCOPE_CONTEXT.getNode(PREFERENCE_NODE);
+    }
+
+}
diff --git a/org.eclipse.capra.handler.emf/.classpath b/bundles/org.eclipse.capra.handler.emf/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.emf/.classpath
rename to bundles/org.eclipse.capra.handler.emf/.classpath
diff --git a/org.eclipse.capra.handler.emf/.gitignore b/bundles/org.eclipse.capra.handler.emf/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.emf/.gitignore
rename to bundles/org.eclipse.capra.handler.emf/.gitignore
diff --git a/org.eclipse.capra.handler.emf/.project b/bundles/org.eclipse.capra.handler.emf/.project
similarity index 100%
rename from org.eclipse.capra.handler.emf/.project
rename to bundles/org.eclipse.capra.handler.emf/.project
diff --git a/org.eclipse.capra.handler.emf/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.emf/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.emf/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.emf/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ffb39c1
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
@@ -0,0 +1,14 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for EMF Models
+Bundle-SymbolicName: org.eclipse.capra.handler.emf;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.emf.ecore,
+ org.eclipse.capra.core,
+ org.eclipse.core.resources,
+ org.eclipse.emf.compare,
+ org.eclipse.capra.ui.notification,
+ org.eclipse.equinox.registry,
+ org.eclipse.emf.ecore.editor
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.emf/build.properties b/bundles/org.eclipse.capra.handler.emf/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.emf/plugin.xml b/bundles/org.eclipse.capra.handler.emf/plugin.xml
new file mode 100644
index 0000000..ae9f395
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.emf.EMFHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.emf.EMFHandler">
+      </artifactHandler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.capra.handler.emf.notification.StartUp">
+      </startup>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.emf/pom.xml b/bundles/org.eclipse.capra.handler.emf/pom.xml
new file mode 100644
index 0000000..3c02a97
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.emf</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
new file mode 100644
index 0000000..0d81f26
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * 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.emf;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Handler to allow tracing to and from arbitrary model elements handled by EMF.
+ */
+public class EMFHandler extends AbstractArtifactHandler<EObject> {
+
+	@Override
+	public EObject createWrapper(EObject artifact, EObject artifactModel) {
+		return artifact;
+	}
+
+	@Override
+	public EObject resolveWrapper(EObject wrapper) {
+		return wrapper;
+	}
+
+	@Override
+	public String getDisplayName(EObject artifact) {
+		return EMFHelper.getIdentifier(artifact);
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for EMF models
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/EditorListener.java b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/EditorListener.java
new file mode 100644
index 0000000..1d17baf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/EditorListener.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * 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.emf.notification;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.views.properties.PropertySheet;
+
+/**
+ * Listens to changes in the IWorkbenchPage. If a model editor is activated in
+ * the page, the listener registers a ModelChangeListener to it and unregisters
+ * it from the previous editor.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class EditorListener implements IPartListener {
+
+	private ModelChangeListener modelChangeListener = new ModelChangeListener();
+	private ResourceSet previousResourceSet;
+
+	/**
+	 * The default constructor that registers the ModelChangeListener to the
+	 * currently active part, if the part is an EMF editor.
+	 */
+	public EditorListener() {
+		IWorkbenchPage wp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		IEditingDomainProvider domainProvider = wp.getActivePart().getAdapter(IEditingDomainProvider.class);
+
+		// If the editor that is active when the EditorListener is created is an
+		// EMF editor, directly register the ModelChangeListener.
+		if (domainProvider != null) {
+			ResourceSet resourceSet = domainProvider.getEditingDomain().getResourceSet();
+			if (resourceSet != null) {
+				EList<Adapter> adapters = resourceSet.eAdapters();
+				if (!adapters.contains(modelChangeListener))
+					adapters.add(modelChangeListener);
+				previousResourceSet = resourceSet;
+			}
+		}
+	}
+
+	@Override
+	public void partActivated(IWorkbenchPart part) {
+
+		if (part instanceof PropertySheet)
+			return;
+
+		IEditingDomainProvider domainProvider = part.getAdapter(IEditingDomainProvider.class);
+		ResourceSet currentResourceSet = null;
+		if (domainProvider != null)
+			currentResourceSet = domainProvider.getEditingDomain().getResourceSet();
+
+		if (previousResourceSet == currentResourceSet)
+			return;
+
+		if (currentResourceSet != null) {
+			if (previousResourceSet != null)
+				// Remove ModelChangeListener from the previous ResourceSet.
+				previousResourceSet.eAdapters().remove(modelChangeListener);
+			previousResourceSet = currentResourceSet;
+			EList<Adapter> adapters = currentResourceSet.eAdapters();
+			if (!adapters.contains(modelChangeListener))
+				// Add ModelChangeListener to the current ResourceSet.
+				Display.getDefault().syncExec(() -> adapters.add(modelChangeListener));
+		}
+	}
+
+	@Override
+	public void partBroughtToTop(IWorkbenchPart part) {
+	}
+
+	@Override
+	public void partClosed(IWorkbenchPart part) {
+	}
+
+	@Override
+	public void partDeactivated(IWorkbenchPart part) {
+	}
+
+	@Override
+	public void partOpened(IWorkbenchPart part) {
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/ModelChangeListener.java b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/ModelChangeListener.java
new file mode 100644
index 0000000..fbfc125
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/ModelChangeListener.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * 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.emf.notification;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+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.helpers.ExtensionPointHelper;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper.IssueType;
+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.common.notify.Notification;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceKind;
+import org.eclipse.emf.compare.EMFCompare;
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.compare.scope.DefaultComparisonScope;
+import org.eclipse.emf.compare.scope.IComparisonScope;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * Listens to changes in the target model and produces a notification, if they
+ * affect the Capra trace model.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class ModelChangeListener extends EContentAdapter {
+	List<Integer> eventsToProcess = Arrays.asList(new Integer[] { 1, 3, 4 });
+
+	@Override
+	public void notifyChanged(Notification notification) {
+		Object notifier = notification.getNotifier();
+		// Only process the notification if it signifies a set, add or remove
+		// operation on an EObject.
+		if (!eventsToProcess.contains(notification.getEventType()) || !(notifier instanceof EObject))
+			return;
+
+		Resource changedResource = ((EObject) notifier).eResource();
+		if (changedResource != null)
+			// Compare the current state of the model (changedResource) with the
+			// previously saved state of the same model.
+			compareTracedItems(changedResource);
+	}
+
+	private void compareTracedItems(Resource changedResource) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSetImpl newResourceSet = new ResourceSetImpl();
+		EObject traceModel = persistenceAdapter.getTraceModel(newResourceSet);
+		//check that atleast one trace link exists
+		if (traceModel!=null && traceModel.eContents().size() > 0) {
+
+			IPath path = new Path(EcoreUtil.getURI(traceModel).toPlatformString(false));
+			IFile traceContainer = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+
+			TraceMetaModelAdapter traceMetamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+
+			List<Connection> connections = traceMetamodelAdapter
+					.getAllTraceLinks(persistenceAdapter.getTraceModel(new ResourceSetImpl()));
+			if (!connections.isEmpty()) {
+				for (Connection c : connections) {
+					List<EObject> tempList = new ArrayList<>();
+					tempList.add(c.getOrigin());
+					tempList.addAll(c.getTargets());
+
+					for (EObject tracedItem : tempList) {
+						Resource oldResource = tracedItem.eResource();
+						if (oldResource == null)
+							oldResource = newResourceSet.getResource(EcoreUtil.getURI(tracedItem).trimFragment(), true);
+
+						if (oldResource != null) {
+							if (CapraNotificationHelper.getFileUri(oldResource)
+									.equals(CapraNotificationHelper.getFileUri(changedResource))) {
+								IComparisonScope scope = new DefaultComparisonScope(changedResource, oldResource, null);
+								// Build a comparison object with EMFCompare and
+								// recursively resolve the Match elements.
+								Comparison comparison = EMFCompare.builder().build().compare(scope);
+								for (Match match : comparison.getMatches())
+									resolveMatch(tracedItem, match, null, traceContainer);
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private void resolveMatch(EObject tracedItem, Match match, DifferenceKind diffKind, IFile traceContainer) {
+		EList<Diff> differences = match.getDifferences();
+		if (!differences.isEmpty())
+			diffKind = differences.get(0).getKind();
+
+		for (Match subMatch : match.getSubmatches())
+			// Recursively resolve the subMatches, if they exist.
+			resolveMatch(tracedItem, subMatch, diffKind, traceContainer);
+
+		EObject newObject = match.getLeft();
+		if (newObject != null) {
+			// Potentially deletes an existing marker, if the state of the
+			// newObject is the same as the state of the same object in the
+			// previously saved resource.
+			URI oldUri = CapraNotificationHelper.getFileUri(tracedItem);
+			if (CapraNotificationHelper.getFileUri(newObject).equals(oldUri))
+				CapraNotificationHelper.deleteCapraMarker(oldUri.toString(), null, traceContainer);
+		}
+
+		if (diffKind != null) {
+			EObject oldObject = match.getRight();
+			if (oldObject != null && oldObject.equals(tracedItem)) {
+				// If the match or a parent match contains a difference that
+				// affects the tracedItem, produce a marker.
+
+				IssueType issueType = null;
+				if (diffKind.equals(DifferenceKind.DELETE))
+					issueType = IssueType.DELETED;
+				else if (diffKind.equals(DifferenceKind.MOVE))
+					issueType = IssueType.MOVED;
+				else if (diffKind.equals(DifferenceKind.ADD))
+					issueType = IssueType.ADDED;
+				else if (diffKind.equals(DifferenceKind.CHANGE))
+					issueType = IssueType.RENAMED;
+
+				if (issueType != null)
+					createCapraMarker(tracedItem, match, issueType, traceContainer);
+			}
+		}
+	}
+
+	/**
+	 * Generates the info for the to-be-created marker which notifies the user
+	 * that the tracedItem has been affected - and calls the method from the
+	 * CapraNotificationHelper class that actually creates the marker.
+	 * 
+	 * @param tracedItem
+	 *            the item from the Capra trace model that was affected by the
+	 *            change
+	 * @param match
+	 *            the Match element generated by EMF Compare from which the
+	 *            marker info will be extracted
+	 * @param diffKind
+	 *            the difference type that describes the change that happened to
+	 *            the tracedItem
+	 * @param file
+	 *            the file to which the marker will be attached
+	 */
+	private void createCapraMarker(EObject tracedItem, Match match, IssueType issueType, IFile file) {
+		String oldUri = CapraNotificationHelper.getFileUri(tracedItem).toString();
+		String oldName = (String) tracedItem.eGet(tracedItem.eClass().getEStructuralFeature("name"));
+
+		EObject changedObject = match.getLeft();
+		String newUri = "";
+		String newName = "";
+		if (changedObject != null) {
+			newUri = CapraNotificationHelper.getFileUri(changedObject).toString();
+			newName = (String) changedObject.eGet(changedObject.eClass().getEStructuralFeature("name"));
+		}
+
+		String message = "";
+		switch (issueType) {
+		case DELETED:
+			if (changedObject == null)
+				message = oldUri + " has been deleted.";
+			break;
+		case MOVED:
+			if (!oldUri.equals(newUri))
+				message = oldName + " has been moved to " + newUri + ".";
+			break;
+		case RENAMED:
+			if (!newName.equals(oldName))
+				message = oldUri + " has been renamed to " + newName + ".";
+			else
+				message = "An ancestor of " + oldName + " has been renamed." + " The new URI of the element is "
+						+ newUri;
+			break;
+		case ADDED:
+			break;
+		case CHANGED:
+			break;
+		}
+
+		if (issueType != null) {
+			HashMap<String, String> markerInfo = new HashMap<String, String>();
+			markerInfo.put(CapraNotificationHelper.ISSUE_TYPE, issueType.getValue());
+			markerInfo.put(CapraNotificationHelper.MESSAGE, message);
+			markerInfo.put(CapraNotificationHelper.OLD_URI, oldUri);
+			markerInfo.put(CapraNotificationHelper.NEW_URI, newUri);
+			markerInfo.put(CapraNotificationHelper.NEW_NAME, newName);
+			CapraNotificationHelper.createCapraMarker(markerInfo, file);
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/StartUp.java b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/StartUp.java
new file mode 100644
index 0000000..97a15dd
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/notification/StartUp.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.emf.notification;
+
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * A startup extension that registers the EditorListener (that is tasked with
+ * registering a ModelChangeListener) when the plugin starts.
+ */
+public class StartUp implements IStartup {
+
+	@Override
+	public void earlyStartup() {
+		Display.getDefault().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				// Add the EditorListener that registers the ModelChangeListener
+				// to newly opened EMF editors.
+				PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
+						.addPartListener(new EditorListener());
+			}
+		});
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.featureide/.classpath b/bundles/org.eclipse.capra.handler.featureide/.classpath
new file mode 100644
index 0000000..0dc3991
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/.classpath
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.handler.featureide/.project b/bundles/org.eclipse.capra.handler.featureide/.project
new file mode 100644
index 0000000..f425416
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.featureide</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.featureide/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.featureide/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..672496e
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+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.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.capra.handler.featureide/.settings/org.eclipse.m2e.core.prefs b/bundles/org.eclipse.capra.handler.featureide/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1dd109c
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for FeatureIDE Models
+Bundle-SymbolicName: org.eclipse.capra.handler.featureide;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Export-Package: org.eclipse.capra.handler.featureide
+Require-Bundle: org.eclipse.emf.ecore,
+ org.eclipse.jface,
+ org.eclipse.capra.core,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ de.ovgu.featureide.fm.core
+Import-Package: org.eclipse.papyrus.infra.emf.utils
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.featureide/build.properties b/bundles/org.eclipse.capra.handler.featureide/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.featureide/plugin.xml b/bundles/org.eclipse.capra.handler.featureide/plugin.xml
new file mode 100644
index 0000000..9c92204
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/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 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
+         id="org.eclipse.capra.handler.featureide.FeatureIdeHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.featureide.FeatureIdeHandler">
+      </artifactHandler>
+   </extension>
+
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.featureide/pom.xml b/bundles/org.eclipse.capra.handler.featureide/pom.xml
new file mode 100644
index 0000000..0c12f88
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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>
+	<artifactId>org.eclipse.capra.handler.featureide</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<parent>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.7.0-SNAPSHOT</version>
+		<relativePath>../../pom.xml</relativePath>
+	</parent>
+</project>
diff --git a/bundles/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java b/bundles/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java
new file mode 100644
index 0000000..885f9bd
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.featureide/src/org/eclipse/capra/handler/featureide/FeatureIdeHandler.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.featureide;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+
+import de.ovgu.featureide.fm.core.base.impl.Feature;
+
+public class FeatureIdeHandler extends AbstractArtifactHandler<Feature> {
+
+	@Override
+	public EObject createWrapper(Feature spec, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+		final IPath path = Path.fromOSString(spec.getFeatureModel().getSourceFile().toString());
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		final IFile file = root.getFileForLocation(path);
+		String uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true).toPlatformString(false);
+
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), uri,
+				Long.toString(spec.getInternalId()), spec.getName(), spec.getFeatureModel().getSourceFile().toString());
+		return wrapper;
+	}
+
+	@Override
+	public Feature resolveWrapper(EObject wrapper) {
+		return null;
+	}
+
+	@Override
+	public String getDisplayName(Feature spec) {
+		return spec.getName();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for FeatureIDE models
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/org.eclipse.capra.handler.file/.classpath b/bundles/org.eclipse.capra.handler.file/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.file/.classpath
rename to bundles/org.eclipse.capra.handler.file/.classpath
diff --git a/org.eclipse.capra.handler.file/.gitignore b/bundles/org.eclipse.capra.handler.file/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.file/.gitignore
rename to bundles/org.eclipse.capra.handler.file/.gitignore
diff --git a/org.eclipse.capra.handler.file/.project b/bundles/org.eclipse.capra.handler.file/.project
similarity index 100%
rename from org.eclipse.capra.handler.file/.project
rename to bundles/org.eclipse.capra.handler.file/.project
diff --git a/org.eclipse.capra.handler.file/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.file/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.file/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.file/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e016af7
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Arbitrary Files
+Bundle-SymbolicName: org.eclipse.capra.handler.file;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.core.resources,
+ org.eclipse.emf.ecore,
+ org.eclipse.core.runtime,
+ org.eclipse.capra.core,
+ org.eclipse.ui.ide,
+ org.eclipse.capra.ui.notification
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.file/build.properties b/bundles/org.eclipse.capra.handler.file/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.file/plugin.xml b/bundles/org.eclipse.capra.handler.file/plugin.xml
new file mode 100644
index 0000000..0606124
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.file.FileHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.file.FileHandler">
+      </artifactHandler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.capra.handler.file.notification.StartUp">
+      </startup>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.file/pom.xml b/bundles/org.eclipse.capra.handler.file/pom.xml
new file mode 100644
index 0000000..f951e60
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.file</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/FileHandler.java b/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/FileHandler.java
new file mode 100644
index 0000000..c405702
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/FileHandler.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.file;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * Handler to allow tracing to and from arbitrary files in the file system.
+ */
+public class FileHandler extends AbstractArtifactHandler<IFile> {
+
+	@Override
+	public EObject createWrapper(IFile file, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		String uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true).toPlatformString(false);
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), uri, file.getName(),
+				file.getFullPath().toString());
+		return wrapper;
+	}
+
+	@Override
+
+	public IFile resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		String uri = adapter.getArtifactUri(wrapper);
+		IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri));
+		return file;
+	}
+
+	@Override
+	public String getDisplayName(IFile file) {
+		return file.getName();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return delta.getResource().getName()
+				+ " has been changed. Please check if associated trace links are still valid.";
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Files
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/notification/FileChangeListener.java b/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/notification/FileChangeListener.java
new file mode 100644
index 0000000..c9ed7fc
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/notification/FileChangeListener.java
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * 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.file.notification;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.handler.file.FileHandler;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper.IssueType;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * Checks for changes in workspace files and produces a Capra warning marker if
+ * the changes affect a file that is traced.
+ *
+ * @author Michael Warne
+ */
+public class FileChangeListener implements IResourceChangeListener {
+
+	private final ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	@Override
+	public void resourceChanged(IResourceChangeEvent event) {
+		TracePersistenceAdapter tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = tracePersistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+
+		// get all artifacts
+		List<EObject> allArtifacts = artifactAdapter.getAllArtifacts(artifactModel);
+		List<EObject> fileArtifacts = allArtifacts.stream()
+				.filter(p -> artifactAdapter.getArtifactHandler(p).equals(FileHandler.class.getName()))
+				.collect(Collectors.toList());
+
+		if (fileArtifacts.size() == 0) {
+			return;
+		}
+
+		IPath path = new Path(EcoreUtil.getURI(artifactModel).toPlatformString(false));
+		IFile wrapperContainer = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+		IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
+
+			@Override
+			public boolean visit(IResourceDelta delta) throws CoreException {
+				WorkspaceJob job = new WorkspaceJob(CapraNotificationHelper.NOTIFICATION_JOB) {
+					@Override
+					public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+						handleDelta(delta, fileArtifacts, wrapperContainer);
+						return Status.OK_STATUS;
+					}
+				};
+				job.schedule();
+				return true;
+			}
+		};
+
+		try {
+			IResourceDelta delta = event.getDelta();
+			if (delta != null)
+				delta.accept(visitor);
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Checks if the provided delta affects any of the artifacts and if it does,
+	 * produces a marker and attaches it to the wrapperContainer.
+	 *
+	 * @param delta
+	 *            represents changes in the state of the file
+	 * @param fileArtifacts
+	 *            the artifacts that were created by the file handler
+	 * @param wrapperContainer
+	 *            the file that contains the ArtifactWrapper model
+	 */
+	private void handleDelta(IResourceDelta delta, List<EObject> fileArtifacts, IFile wrapperContainer) {
+		for (EObject aw : fileArtifacts) {
+
+			if (artifactAdapter.getArtifactUri(aw).equals(delta.getFullPath().toString())) {
+				int changeType = delta.getKind();
+				IssueType issueType = null;
+
+				if (changeType == IResourceDelta.REMOVED) {
+					IPath toPath = delta.getMovedToPath();
+
+					if (toPath == null) {
+						issueType = IssueType.DELETED;
+					} else if (delta.getFullPath().toFile().getName().equals(toPath.toFile().getName())) {
+						issueType = IssueType.MOVED;
+					} else {
+						issueType = IssueType.RENAMED;
+					}
+
+				} else if (changeType == IResourceDelta.CHANGED) {
+					issueType = IssueType.CHANGED;
+				} else if (changeType == IResourceDelta.ADDED) {
+					issueType = IssueType.ADDED;
+				}
+				if (issueType == IssueType.ADDED) {
+					CapraNotificationHelper.deleteCapraMarker(artifactAdapter.getArtifactUri(aw),
+							new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.DELETED },
+							wrapperContainer);
+				} else {
+					Map<String, String> markerInfo = generateMarkerInfo(aw, delta, issueType);
+					CapraNotificationHelper.createCapraMarker(markerInfo, wrapperContainer);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Generates the attributes that will be assigned (in the createMarker
+	 * method) to a Capra warning marker.
+	 *
+	 * @param aw
+	 *            ArtifactWrapper that links to the file in the delta
+	 * @param delta
+	 *            represents changes in the state of the file
+	 * @param issueType
+	 *            the type of change that occurred
+	 * @return a key value HashMap, containing the attributes to be assigned to
+	 *         a Capra change marker and their keys (IDs).
+	 */
+	private Map<String, String> generateMarkerInfo(EObject aw, IResourceDelta delta, IssueType issueType) {
+		Map<String, String> markerInfo = new HashMap<String, String>();
+
+		String oldArtifactUri = delta.getFullPath().toString();
+		IPath newArtifactUri = delta.getMovedToPath();
+
+		String message = "";
+		switch (issueType) {
+		case RENAMED:
+			message = oldArtifactUri + " has been renamed to " + newArtifactUri + ".";
+			break;
+		case MOVED:
+			message = oldArtifactUri + " has been moved to " + newArtifactUri + ".";
+			break;
+		case DELETED:
+			message = oldArtifactUri + " has been deleted.";
+			break;
+		case CHANGED:
+			message = oldArtifactUri + " has been changed. Please check if associated trace links are still valid.";
+			break;
+		case ADDED:
+			break;
+		}
+
+		markerInfo.put(CapraNotificationHelper.ISSUE_TYPE, issueType.getValue());
+		markerInfo.put(CapraNotificationHelper.MESSAGE, message);
+		markerInfo.put(CapraNotificationHelper.OLD_URI, oldArtifactUri);
+		if (newArtifactUri != null) {
+			markerInfo.put(CapraNotificationHelper.NEW_URI, newArtifactUri.toString());
+			markerInfo.put(CapraNotificationHelper.NEW_NAME, newArtifactUri.toFile().getName());
+		}
+
+		return markerInfo;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/notification/StartUp.java b/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/notification/StartUp.java
new file mode 100644
index 0000000..2c6ac5c
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/notification/StartUp.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.file.notification;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.ui.IStartup;
+
+/**
+ * Registers the startup extension to get access to resource changes.
+ */
+public class StartUp implements IStartup {
+
+	@Override
+	public void earlyStartup() {
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(new FileChangeListener());
+	}
+}
diff --git a/org.eclipse.capra.handler.gef/.classpath b/bundles/org.eclipse.capra.handler.gef/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.gef/.classpath
rename to bundles/org.eclipse.capra.handler.gef/.classpath
diff --git a/org.eclipse.capra.handler.gef/.gitignore b/bundles/org.eclipse.capra.handler.gef/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.gef/.gitignore
rename to bundles/org.eclipse.capra.handler.gef/.gitignore
diff --git a/org.eclipse.capra.handler.gef/.project b/bundles/org.eclipse.capra.handler.gef/.project
similarity index 100%
rename from org.eclipse.capra.handler.gef/.project
rename to bundles/org.eclipse.capra.handler.gef/.project
diff --git a/org.eclipse.capra.handler.gef/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.gef/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.gef/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.gef/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a4d3be1
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for GEF Models
+Bundle-SymbolicName: org.eclipse.capra.handler.gef;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.papyrus.infra.gmfdiag.css,
+ org.eclipse.papyrus.infra.emf,
+ org.eclipse.gmf.runtime.diagram.ui
+Import-Package: org.eclipse.capra.ui.helpers
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.gef/build.properties b/bundles/org.eclipse.capra.handler.gef/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.gef/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.gef/plugin.xml b/bundles/org.eclipse.capra.handler.gef/plugin.xml
new file mode 100644
index 0000000..b21f3fe
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.gef/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.gef.GEFHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.gef.GEFHandler">
+      </artifactHandler>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.gef/pom.xml b/bundles/org.eclipse.capra.handler.gef/pom.xml
new file mode 100644
index 0000000..93bf22f
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.gef/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.gef</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java b/bundles/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
new file mode 100644
index 0000000..f10ac11
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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.gef;
+
+import java.util.Collections;
+import java.util.List;
+
+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;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+
+/**
+ * Handler to allow tracing to and from visual model representations handled by
+ * editors built with GEF.
+ */
+public class GEFHandler extends AbstractArtifactHandler<EditPart> {
+
+	@Override
+	public EObject createWrapper(EditPart artifact, EObject artifactModel) {
+		return EMFHelper.getEObject(artifact);
+	}
+
+	@Override
+	public EditPart resolveWrapper(EObject wrapper) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getDisplayName(EditPart artifact) {
+		return org.eclipse.capra.core.helpers.EMFHelper.getIdentifier(EMFHelper.getEObject(artifact));
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for GEF models
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/org.eclipse.capra.handler.hudson/.classpath b/bundles/org.eclipse.capra.handler.hudson/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.hudson/.classpath
rename to bundles/org.eclipse.capra.handler.hudson/.classpath
diff --git a/org.eclipse.capra.handler.hudson/.gitignore b/bundles/org.eclipse.capra.handler.hudson/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.hudson/.gitignore
rename to bundles/org.eclipse.capra.handler.hudson/.gitignore
diff --git a/org.eclipse.capra.handler.hudson/.project b/bundles/org.eclipse.capra.handler.hudson/.project
similarity index 100%
rename from org.eclipse.capra.handler.hudson/.project
rename to bundles/org.eclipse.capra.handler.hudson/.project
diff --git a/org.eclipse.capra.handler.hudson/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.hudson/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.hudson/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.hudson/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c55817e
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Builds and Testcase Executions in Hudson
+Bundle-SymbolicName: org.eclipse.capra.handler.hudson;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.mylyn.hudson.core,
+ org.eclipse.mylyn.builds.core,
+ org.eclipse.capra.core,
+ org.eclipse.core.resources
+Export-Package: org.eclipse.capra.handler.hudson
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.hudson/build.properties b/bundles/org.eclipse.capra.handler.hudson/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.hudson/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.hudson/plugin.xml b/bundles/org.eclipse.capra.handler.hudson/plugin.xml
new file mode 100644
index 0000000..2a4ed02
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.hudson/plugin.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.hudson.BuildElementHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.hudson.BuildElementHandler">
+      </artifactHandler>
+   </extension>
+   <extension
+         id="org.eclipse.capra.handler.hudson.TestElementHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.hudson.TestElementHandler">
+      </artifactHandler>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.hudson/pom.xml b/bundles/org.eclipse.capra.handler.hudson/pom.xml
new file mode 100644
index 0000000..b1c10c0
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.hudson/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.hudson</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java b/bundles/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java
new file mode 100644
index 0000000..d40aad3
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/BuildElementHandler.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * 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.hudson;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.mylyn.builds.internal.core.BuildElement;
+
+/**
+ * A handler to allow tracing to and from build elements handled by the
+ * continuous integration server Hudson via the integrated Mylyn facilities.
+ */
+public class BuildElementHandler extends AbstractArtifactHandler<BuildElement> {
+
+	@Override
+	public EObject createWrapper(BuildElement build, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), build.getUrl(),
+				build.getLabel(), build.getUrl());
+		return wrapper;
+	}
+
+	@Override
+	public BuildElement resolveWrapper(EObject wrapper) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getDisplayName(BuildElement build) {
+		return build.getName();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Build elements
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java b/bundles/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java
new file mode 100644
index 0000000..ef530d7
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/TestElementHandler.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * 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.hudson;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.mylyn.builds.internal.core.TestElement;
+
+/**
+ * A handler to allow tracing to and from test elements handled by the
+ * continuous integration server Hudson via the integrated Mylyn facilities.
+ */
+public class TestElementHandler extends AbstractArtifactHandler<TestElement> {
+
+	@Override
+	public EObject createWrapper(TestElement test, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(),
+				EcoreUtil.getURI(test).toPlatformString(false), test.getLabel(), test.getLabel());
+		return wrapper;
+	}
+
+	@Override
+	public TestElement resolveWrapper(EObject wrapper) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getDisplayName(TestElement test) {
+		return test.getLabel();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Test elements
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+
+}
diff --git a/org.eclipse.capra.handler.jdt/.classpath b/bundles/org.eclipse.capra.handler.jdt/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.jdt/.classpath
rename to bundles/org.eclipse.capra.handler.jdt/.classpath
diff --git a/org.eclipse.capra.handler.jdt/.gitignore b/bundles/org.eclipse.capra.handler.jdt/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.jdt/.gitignore
rename to bundles/org.eclipse.capra.handler.jdt/.gitignore
diff --git a/org.eclipse.capra.handler.jdt/.project b/bundles/org.eclipse.capra.handler.jdt/.project
similarity index 100%
rename from org.eclipse.capra.handler.jdt/.project
rename to bundles/org.eclipse.capra.handler.jdt/.project
diff --git a/org.eclipse.capra.handler.jdt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.jdt/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.jdt/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.jdt/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7ee7542
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Java Elements
+Bundle-SymbolicName: org.eclipse.capra.handler.jdt;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.jdt.core,
+ org.eclipse.capra.core,
+ org.eclipse.emf.ecore,
+ org.eclipse.jface.text,
+ org.eclipse.emf.ecore,
+ org.eclipse.core.resources,
+ org.eclipse.ui.ide,
+ org.eclipse.capra.core,
+ org.eclipse.capra.ui.notification,
+ org.eclipse.core.runtime,
+ org.apache.httpcomponents.httpclient,
+ org.apache.httpcomponents.httpcore
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.handler.jdt,
+ org.eclipse.capra.handler.jdt.preferences
+Bundle-ActivationPolicy: lazy
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.jdt/build.properties b/bundles/org.eclipse.capra.handler.jdt/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.jdt/plugin.xml b/bundles/org.eclipse.capra.handler.jdt/plugin.xml
new file mode 100644
index 0000000..e4092be
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/plugin.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.jdt.JavaElementHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.jdt.JavaElementHandler">
+      </artifactHandler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.capra.handler.jdt.notification.StartUp">
+      </startup>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.jdt/pom.xml b/bundles/org.eclipse.capra.handler.jdt/pom.xml
new file mode 100644
index 0000000..b13fe1f
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.jdt</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/Activator.java b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/Activator.java
new file mode 100644
index 0000000..ccd5628
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/Activator.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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.jdt;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+	public static final String PLUGIN_ID = "org.eclipse.capra.handler.jdt";
+
+	@Override
+	public void start(BundleContext context) throws Exception {
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JDTAnnotate.java b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JDTAnnotate.java
new file mode 100644
index 0000000..0cd1733
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JDTAnnotate.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * 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.jdt;
+
+import java.util.List;
+
+import org.eclipse.capra.core.handlers.AnnotationException;
+import org.eclipse.capra.handler.jdt.preferences.JDTPreferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.ISourceReference;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
+import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.ChildPropertyDescriptor;
+import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.Javadoc;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.NodeFinder;
+import org.eclipse.jdt.core.dom.TagElement;
+import org.eclipse.jdt.core.dom.TextElement;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.text.edits.MalformedTreeException;
+import org.eclipse.text.edits.TextEdit;
+
+public class JDTAnnotate {
+
+	private static final String TAG_PREFIX = "@";
+	private static final String ANNOTATION_FAILED = "Annotation failed";
+
+	@SuppressWarnings("unchecked")
+	public static void annotateArtifact(IJavaElement handle, String annotation) throws AnnotationException {
+		if (handle instanceof ISourceReference) {
+			try {
+				ISourceReference sourceReference = (ISourceReference) handle;
+				ISourceRange range = sourceReference.getSourceRange();
+				ICompilationUnit cu = getCompilationUnit(sourceReference);
+				ASTParser parser = ASTParser.newParser(AST.JLS8);
+
+				String source = cu.getSource();
+				IDocument document = new Document(source);
+				parser.setSource(cu);
+
+				CompilationUnit root = (CompilationUnit) parser.createAST(null);
+				ASTRewrite rewrite = ASTRewrite.create(root.getAST());
+				ASTNode node = getNode(root, range.getOffset(), range.getLength());
+				AST ast = node.getAST();
+
+				ChildPropertyDescriptor property = getJavadocPropertyDescriptor(handle);
+				Javadoc javaDoc = (Javadoc) rewrite.get(node, property);
+				if (javaDoc == null)
+					javaDoc = ast.newJavadoc();
+
+				ListRewrite tagsRewriter = rewrite.getListRewrite(javaDoc, Javadoc.TAGS_PROPERTY);
+
+				// Get preferred tag name
+				IEclipsePreferences preferences = JDTPreferences.getPreferences();
+				String tagName = TAG_PREFIX + preferences.get(JDTPreferences.ANNOTATE_JDT_TAG,
+						JDTPreferences.ANNOTATE_JDT_TAG_DEFAULT).trim();
+
+				// Remove existing tags
+				((List<TagElement>)javaDoc.tags())
+					.stream()
+					.filter(t -> t.getTagName() != null && t.getTagName().equals(tagName))
+					.forEach(t -> tagsRewriter.remove(t, null));
+
+				// Create new tag
+				TagElement tag = ast.newTagElement();
+				TextElement text = ast.newTextElement();
+				text.setText(annotation);
+				tag.fragments().add(text);
+				tag.setTagName(tagName);
+
+				tagsRewriter.insertLast(tag, null);
+
+				rewrite.set(node, property, javaDoc, null);
+				TextEdit edit = rewrite.rewriteAST();
+				edit.apply(document);
+
+				String newSource = document.get();
+				cu.getBuffer().setContents(newSource);
+				cu.save(null, false);
+			} catch (JavaModelException e) {
+				throw new AnnotationException(e.getStatus());
+			} catch (MalformedTreeException e) {
+				Status status = new Status(Status.INFO, Activator.PLUGIN_ID, ANNOTATION_FAILED, e.getCause());
+				throw new AnnotationException(status);
+			} catch (BadLocationException e) {
+				Status status = new Status(Status.INFO, Activator.PLUGIN_ID, ANNOTATION_FAILED, e.getCause());
+				throw new AnnotationException(status);
+			}
+		}
+	}
+
+	private static ASTNode getNode(ASTNode root, int offset, int length) {
+		NodeFinder finder = new NodeFinder(root, offset, length);
+		ASTNode result = finder.getCoveringNode();
+		if (result != null)
+			return result;
+		return finder.getCoveredNode();
+	}
+
+	private static ICompilationUnit getCompilationUnit(ISourceReference o) {
+		if (o instanceof ICompilationUnit)
+			return (ICompilationUnit) o;
+		if (o instanceof IMethod)
+			return ((IMethod) o).getCompilationUnit();
+		if (o instanceof IJavaElement)
+			return (ICompilationUnit) ((IJavaElement) o).getAncestor(IJavaElement.COMPILATION_UNIT);
+		return null;
+	}
+
+	private static ChildPropertyDescriptor getJavadocPropertyDescriptor(IJavaElement handle) {
+		switch (handle.getElementType()) {
+		case IJavaElement.METHOD:
+			return MethodDeclaration.JAVADOC_PROPERTY;
+		case IJavaElement.TYPE:
+			return TypeDeclaration.JAVADOC_PROPERTY;
+		default:
+			return MethodDeclaration.JAVADOC_PROPERTY;
+		}
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
new file mode 100644
index 0000000..2a51751
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
@@ -0,0 +1,176 @@
+/*******************************************************************************
+ * 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.jdt;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.http.client.utils.URIBuilder;
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.handlers.AnnotationException;
+import org.eclipse.capra.core.handlers.IAnnotateArtifact;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.handler.jdt.preferences.JDTPreferences;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFileState;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.ISourceReference;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+
+/**
+ * A handler to allow creating traces to and from java elements such as classes
+ * and methods based on JDT.
+ * </p>
+ * This handler encodes a locator to the Java element in artifact URI:s in the
+ * following way:
+ * {@code platform:/Project_name/path/to/file.java#com.pack.ClassName/methodName}.
+ */
+public class JavaElementHandler extends AbstractArtifactHandler<IJavaElement> implements IAnnotateArtifact {
+
+	@Override
+	public EObject createWrapper(IJavaElement element, EObject artifactModel) {
+		IType type = (IType) element.getParent().getAncestor(IJavaElement.TYPE);
+
+		String fragment;
+		if (type == null) {
+			if (element.getElementType() == IJavaElement.TYPE) {
+				// Top level classes get their fully qualified name
+				fragment = ((IType) element).getFullyQualifiedName();
+			} else {
+				// This will probably never happen, if something doesn't
+				// have a type ancestor it is always a type itself
+				fragment = element.getElementName();
+			}
+		} else {
+			// Case for members: A list of '/' separated type names, followed by
+			// a member name
+			fragment = type.getFullyQualifiedName().replaceAll("\\$", "/") + "/" + element.getElementName();
+		}
+
+		URIBuilder uriBuilder = new URIBuilder().setScheme("platform").setPath("/resource" + element.getPath())
+				.setFragment(fragment);
+
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+		String displayName = (type == null ? "" : (type.getElementName() + ".")) + element.getElementName();
+
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), uriBuilder.toString(),
+				element.getHandleIdentifier(), displayName, element.getPath().toString());
+
+		return wrapper;
+	}
+
+	@Override
+	public IJavaElement resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		return JavaCore.create(adapter.getArtifactIdentifier(wrapper));
+	}
+
+	@Override
+	public String getDisplayName(IJavaElement element) {
+		return element.getElementName();
+	}
+
+	@Override
+	public void annotateArtifact(EObject wrapper, String annotation) throws AnnotationException {
+		IEclipsePreferences preferences = JDTPreferences.getPreferences();
+		if (preferences.getBoolean(JDTPreferences.ANNOTATE_JDT, JDTPreferences.ANNOTATE_JDT_DEFAULT)) {
+			IJavaElement handle = resolveWrapper(wrapper);
+			JDTAnnotate.annotateArtifact(handle, annotation);
+		}
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		// Satisfied condition: delta contains change info about the file that
+		// is either directly referenced by the wrapperUri or contains a child
+		// element that is referenced by the wrapperUri.
+		String message = "";
+
+		IJavaElement linkedElement = JavaCore.create(wrapperUri);
+		IJavaElement changedResource = JavaCore.create(delta.getResource());
+
+		// changedResource is the Java file that is either directly
+		// referenced by the wrapperUri or contains a child element that is
+		// referenced by the wrapperUri.
+		if (linkedElement == null || changedResource == null)
+			return null;
+
+		if (changedResource.getHandleIdentifier().equals(wrapperUri)) {
+			// The object in the wrapper is a Java file.
+
+			message = delta.getResource().getFullPath().toString()
+					+ " has been edited. Please check if associated trace links are still valid.";
+
+		} else {
+			// The object referenced by the wrapper isn't a Java file, but a
+			// child of the changed Java file (changedResource).
+
+			IJavaElement[] jElements = ((ICompilationUnit) changedResource).findElements(linkedElement);
+			if (jElements == null) {
+				// The element from the wrapper has either been deleted,
+				// renamed, or had its signature changed.
+
+				message = linkedElement.getHandleIdentifier()
+						+ " has either been deleted or had its signature changed. Please check if associated trace links are still valid.";
+			} else {
+				// The element from the wrapper has been changed (but not
+				// renamed or deleted or had its signature changed).
+				IJavaElement jElement = jElements[0];
+
+				try {
+					// Get the previous local version of the file.
+					IFileState fs = ((IFile) delta.getResource()).getHistory(new NullProgressMonitor())[0];
+					String previousState = new BufferedReader(new InputStreamReader(fs.getContents())).lines()
+							.collect(Collectors.joining("\n"));
+
+					if (linkedElement instanceof ISourceReference) {
+						if (!previousState.contains(((ISourceReference) jElement).getSource())) {
+							message = linkedElement.getHandleIdentifier()
+									+ " has been edited. Please check if associated trace links are still valid.";
+						}
+					}
+				} catch (CoreException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+
+		return message;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Java code
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/notification/JavaElementChangeListener.java b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/notification/JavaElementChangeListener.java
new file mode 100644
index 0000000..fb0caf3
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/notification/JavaElementChangeListener.java
@@ -0,0 +1,278 @@
+/*******************************************************************************
+ * 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.jdt.notification;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.handler.jdt.JavaElementHandler;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper.IssueType;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jdt.core.ElementChangedEvent;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IElementChangedListener;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaElementDelta;
+import org.eclipse.jdt.core.ISourceReference;
+import org.eclipse.jdt.core.JavaCore;
+
+/**
+ * Checks for changes of JavaElements to determine if they affect the trace
+ * model. Creates markers on the artifact model if the changes affect artifact
+ * wrappers.
+ *
+ * @author Dusan Kalanj
+ */
+public class JavaElementChangeListener implements IElementChangedListener {
+	ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	@Override
+	public void elementChanged(ElementChangedEvent event) {
+
+		TracePersistenceAdapter tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = tracePersistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		// get all artifacts
+		List<EObject> allArtifacts = artifactAdapter.getAllArtifacts(artifactModel);
+		List<EObject> javaArtifacts = allArtifacts.stream()
+				.filter(p -> artifactAdapter.getArtifactHandler(p).equals(JavaElementHandler.class.getName()))
+				.collect(Collectors.toList());
+
+		if (javaArtifacts.size() == 0)
+			return;
+
+		IPath path = new Path(EcoreUtil.getURI(artifactModel).toPlatformString(false));
+		IFile wrapperContainer = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+
+		new WorkspaceJob(CapraNotificationHelper.NOTIFICATION_JOB) {
+			@Override
+			public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+				handleDelta(event.getDelta(), javaArtifacts, wrapperContainer);
+				return Status.OK_STATUS;
+			}
+		}.schedule();
+	}
+
+	private void handleDelta(IJavaElementDelta delta, List<EObject> javaArtifacts, IFile wrapperContainer) {
+
+		// If the changes are not made manually (by typing in the
+		// editor) this recursion only goes as far as the source file. The
+		// changes to the child elements of the source file have to be
+		// additionally processed. Furthermore, if deletion/moving/renaming is
+		// performed, the change only traverses up to the first element that was
+		// affected. Example: if a package is moved, this won't reach the files
+		// in the package.
+		if (!(delta.getElement() instanceof ICompilationUnit))
+			// Only go as far as the source file
+			for (IJavaElementDelta subDelta : delta.getAffectedChildren())
+			handleDelta(subDelta, javaArtifacts, wrapperContainer);
+
+		int flags = delta.getFlags();
+		int changeType = delta.getKind();
+		IssueType issueType = null;
+
+		if (changeType == IJavaElementDelta.ADDED)
+			issueType = IssueType.ADDED;
+		else if (changeType == IJavaElementDelta.REMOVED) {
+
+			if ((flags & IJavaElementDelta.F_MOVED_TO) != 0)
+				if (delta.getMovedToElement().getElementName().equals(delta.getElement().getElementName()))
+					issueType = IssueType.MOVED;
+				else
+					issueType = IssueType.RENAMED;
+			else
+				issueType = IssueType.DELETED;
+
+		} else if (changeType == IJavaElementDelta.CHANGED && (flags & IJavaElementDelta.F_PRIMARY_RESOURCE) != 0)
+			// This is only true if a source file changes.
+			issueType = IssueType.CHANGED;
+
+		if (issueType != null) {
+			String affectedElementUri = delta.getElement().getHandleIdentifier();
+			if (affectedElementUri != null) {
+				for (EObject aw : javaArtifacts) {
+					String artifactId = artifactAdapter.getArtifactIdentifier(aw);
+					// Only create a marker if a signature of a
+					// method/variable/class... has changed inside of a source
+					// file.
+
+					IssueType[] markersToDelete = null;
+					String deleteMarkerUri = "";
+					IJavaElement element = JavaCore.create(artifactId);
+					if (element != null && element.exists()) {
+						deleteMarkerUri = artifactId;
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.DELETED };
+					} else if (issueType == IssueType.DELETED) {
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.CHANGED };
+						deleteMarkerUri = affectedElementUri;
+					}
+
+					if (!deleteMarkerUri.isEmpty() && artifactId.contains(deleteMarkerUri))
+						CapraNotificationHelper.deleteCapraMarker(artifactId, markersToDelete, wrapperContainer);
+
+					if (artifactId.contains(affectedElementUri)) {
+						HashMap<String, String> markerInfo = generateMarkerInfo(aw, delta, issueType);
+						CapraNotificationHelper.createCapraMarker(markerInfo, wrapperContainer);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Generates the attributes that will later be assigned (in the createMarker
+	 * method) to a Capra change marker.
+	 *
+	 * @param aw
+	 *            ArtifactWrapper that links to the element in the delta or to a
+	 *            child of the element in the delta
+	 * @param delta
+	 *            represents changes in the state of a JavaElement
+	 * @param issue
+	 *            the type of change that occurred
+	 * @return a key value HashMap, containing the attributes to be assigned to
+	 *         a Capra change marker and their keys (IDs).
+	 */
+	// This works OK for all levels above the class level. For variables,
+	// methods, classes, if the signature is changed, it will say that the
+	// element has been deleted. That is because, if the listener even
+	// recognizes that a method/variable has been changed (which it doesn't
+	// always do), it doesn't provide a "movedToElement", as it does for
+	// everything on file level. Is there some way to go around this or does it
+	// even make sense to do it? One way to do it would be to get the previous
+	// version of the file and compare the body of the method/variable. If it is
+	// the same, compare the signature. The problem is that there can be methods
+	// and variables with identical bodies, although highly unlikely. Either
+	// way, I don't think there is a completely foolproof solution for this.
+	private HashMap<String, String> generateMarkerInfo(EObject aw, IJavaElementDelta delta, IssueType issueType) {
+		HashMap<String, String> markerInfo = new HashMap<String, String>();
+
+		// Properties from the Java element in the wrapper (all elements)
+		String oldArtifactUri = artifactAdapter.getArtifactIdentifier(aw);
+		String oldArtifactName = artifactAdapter.getArtifactName(aw);
+
+		// Properties from the affected Java element with its former path
+		// (files, folder, packages... not variables, methods or classes)
+		String oldAffectedElementUri = delta.getElement().getHandleIdentifier();
+		String oldAffectedElementName = delta.getElement().getElementName();
+		String newAffectedElementUri = null;
+		String newAffectedElementName = null;
+
+		// Affected element with its new path (null if not renamed or moved)
+		IJavaElement newAffectedElement = delta.getMovedToElement();
+		if (newAffectedElement != null) {
+			newAffectedElementUri = newAffectedElement.getHandleIdentifier();
+			newAffectedElementName = newAffectedElement.getElementName();
+		}
+
+		String message = "";
+		// TODO Make messages more readable (replaces uris with names?).
+		switch (issueType) {
+		case RENAMED:
+			if (oldArtifactUri.equals(oldAffectedElementUri))
+				// The element in the wrapper is the renamed element.
+				message = oldAffectedElementUri + " has been renamed to " + newAffectedElementUri + ".";
+			else
+				// The element in the wrapper is a child of the renamed element.
+				message = oldAffectedElementName + ", an ancestor of " + oldArtifactUri + ", has been renamed to "
+						+ newAffectedElementName + ".";
+			break;
+		case MOVED:
+			if (oldArtifactUri.equals(oldAffectedElementUri))
+				// The element in the wrapper is the moved element.
+				message = oldAffectedElementUri + " has been moved to " + newAffectedElementUri + ".";
+			else
+				// The element in the wrapper is a child of the moved element.
+				message = oldAffectedElementName + ", an ancestor of " + oldArtifactUri + ", has been moved to "
+						+ newAffectedElementUri;
+			break;
+		default:
+			IJavaElement el = JavaCore.create(oldArtifactUri);
+			if (el == null || !el.exists()) {
+				issueType = IssueType.DELETED;
+				message = artifactAdapter.getArtifactUri(aw);
+
+				if (el instanceof ISourceReference && !(el instanceof ICompilationUnit))
+					message += " has been deleted or has had its signature changed.";
+				else
+					message += " has been deleted.";
+			}
+			break;
+		}
+
+		// The affected element has been renamed or moved.
+		if (newAffectedElementUri != null) {
+
+			String newArtifactUri;
+			String newArtifactName;
+			if (oldArtifactUri.equals(oldAffectedElementUri)) {
+				// The element in the wrapper is the affected element.
+				newArtifactUri = newAffectedElementUri;
+				newArtifactName = newAffectedElementName;
+			} else {
+				// The element in the wrapper is a child of the affected
+				// element.
+
+				// Build new uri for the moved class
+				newArtifactUri = oldArtifactUri.replace(oldAffectedElementUri, newAffectedElementUri);
+				newArtifactName = oldArtifactName;
+
+				// Check if artifact belongs to the public class (because
+				// the
+				// public class changes with the file name)
+				if (newAffectedElement instanceof ICompilationUnit) {
+					String oldPublicClassName = oldAffectedElementName.replace(".java", "");
+					String newPublicClassName = newAffectedElementName.replace(".java", "");
+
+					int classStartIndex = newAffectedElementUri.length() + 1;
+					int classEndIndex = classStartIndex + oldPublicClassName.length();
+
+					if (newArtifactUri.substring(classStartIndex, classEndIndex).equals(oldPublicClassName))
+						newArtifactUri = newArtifactUri.substring(0, classStartIndex) + newPublicClassName
+								+ newArtifactUri.substring(classEndIndex);
+
+					// The object in the artifact is the public class
+					// declaration.
+					if (newArtifactName.contentEquals(oldPublicClassName))
+						newArtifactName = newPublicClassName;
+				}
+			}
+
+			markerInfo.put(CapraNotificationHelper.NEW_URI, newArtifactUri);
+			markerInfo.put(CapraNotificationHelper.NEW_NAME, newArtifactName);
+		}
+
+		markerInfo.put(CapraNotificationHelper.ISSUE_TYPE, issueType.getValue());
+		markerInfo.put(CapraNotificationHelper.OLD_URI, oldArtifactUri);
+		markerInfo.put(CapraNotificationHelper.MESSAGE, message);
+
+		return markerInfo;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/notification/StartUp.java b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/notification/StartUp.java
new file mode 100644
index 0000000..64a20d8
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/notification/StartUp.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.jdt.notification;
+
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.ui.IStartup;
+
+/**
+ * Registers the startup extension to add the Java Element change listener.
+ */
+public class StartUp implements IStartup {
+
+	@Override
+	public void earlyStartup() {
+		JavaCore.addElementChangedListener(new JavaElementChangeListener());
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/preferences/JDTPreferences.java b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/preferences/JDTPreferences.java
new file mode 100644
index 0000000..8961aa6
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/preferences/JDTPreferences.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.jdt.preferences;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+public class JDTPreferences {
+
+    public static final IScopeContext SCOPE_CONTEXT = InstanceScope.INSTANCE;
+    public static final String PREFERENCE_NODE = "org.eclipse.capra.ui.jdt";
+
+	// Should annotate Java source code?
+	public static final String ANNOTATE_JDT = "ANNOTATE_JDT";
+	public static final boolean ANNOTATE_JDT_DEFAULT = false;
+
+	// Doxygen tag to use for annotation
+	public static final String ANNOTATE_JDT_TAG = "ANNOTATE_JDT_TAG";
+	public static final String ANNOTATE_JDT_TAG_DEFAULT = "parent";
+
+    public static IEclipsePreferences getPreferences() {
+        return SCOPE_CONTEXT.getNode(PREFERENCE_NODE);
+    }
+
+}
diff --git a/org.eclipse.capra.documentation/.classpath b/bundles/org.eclipse.capra.handler.marker/.classpath
similarity index 100%
rename from org.eclipse.capra.documentation/.classpath
rename to bundles/org.eclipse.capra.handler.marker/.classpath
diff --git a/bundles/org.eclipse.capra.handler.marker/.project b/bundles/org.eclipse.capra.handler.marker/.project
new file mode 100644
index 0000000..05584ad
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.marker/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.marker</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.marker/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..a542eee
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.marker/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Eclipse Markers
+Bundle-SymbolicName: org.eclipse.capra.handler.marker;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.editors,
+ org.eclipse.ui.ide
+Import-Package: org.eclipse.capra.ui.helpers
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.marker/build.properties b/bundles/org.eclipse.capra.handler.marker/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.marker/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.marker/plugin.xml b/bundles/org.eclipse.capra.handler.marker/plugin.xml
new file mode 100644
index 0000000..3aec155
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.marker/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.marker.MarkerHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.marker.MarkerHandler">
+      </artifactHandler>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.marker/pom.xml b/bundles/org.eclipse.capra.handler.marker/pom.xml
new file mode 100644
index 0000000..463828f
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.marker/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.marker</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java b/bundles/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
new file mode 100644
index 0000000..ac87925
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.marker/src/org/eclipse/capra/handler/marker/MarkerHandler.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * 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.marker;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.handlers.IArtifactUnpacker;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ui.texteditor.MarkerUtilities;
+import org.eclipse.ui.views.markers.MarkerItem;
+
+/**
+ * Handler to allow tracing to and from IMarker instances as used by Eclipse to
+ * associate notes with resources.
+ */
+public class MarkerHandler extends AbstractArtifactHandler<IMarker> implements IArtifactUnpacker<MarkerItem, IMarker> {
+
+	@Override
+	public EObject createWrapper(IMarker artifact, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+		IResource resource = artifact.getResource();
+
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(),
+				resource.getLocationURI().toString(), Long.toString(artifact.getId()), this.getDisplayName(artifact),
+				resource.getFullPath().toString());
+
+		return wrapper;
+	}
+
+	@Override
+	public IMarker resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		IResource target = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot()
+				.findMember(adapter.getArtifactPath(wrapper));
+		Long id = new Long(adapter.getArtifactIdentifier(wrapper));
+		IMarker marker = target.getMarker(id);
+		return marker;
+	}
+
+	@Override
+	public String getDisplayName(IMarker artifact) {
+		return MarkerUtilities.getMarkerType(artifact) + ": " + MarkerUtilities.getMessage(artifact);
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public IMarker unpack(MarkerItem container) {
+		return container.getMarker();
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Markers
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/org.eclipse.capra.handler.mylyn/.classpath b/bundles/org.eclipse.capra.handler.mylyn/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.mylyn/.classpath
rename to bundles/org.eclipse.capra.handler.mylyn/.classpath
diff --git a/org.eclipse.capra.handler.mylyn/.gitignore b/bundles/org.eclipse.capra.handler.mylyn/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.mylyn/.gitignore
rename to bundles/org.eclipse.capra.handler.mylyn/.gitignore
diff --git a/org.eclipse.capra.handler.mylyn/.project b/bundles/org.eclipse.capra.handler.mylyn/.project
similarity index 100%
rename from org.eclipse.capra.handler.mylyn/.project
rename to bundles/org.eclipse.capra.handler.mylyn/.project
diff --git a/org.eclipse.capra.handler.mylyn/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.mylyn/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.mylyn/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.mylyn/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e58af22
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Tasks in MyLyn
+Bundle-SymbolicName: org.eclipse.capra.handler.mylyn;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.mylyn.tasks.core,
+ org.eclipse.mylyn.tasks.ui,
+ org.eclipse.capra.core,
+ org.eclipse.core.resources
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.mylyn/build.properties b/bundles/org.eclipse.capra.handler.mylyn/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.mylyn/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.mylyn/plugin.xml b/bundles/org.eclipse.capra.handler.mylyn/plugin.xml
new file mode 100644
index 0000000..3ff00eb
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.mylyn/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.mylyn.MylynHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.mylyn.MylynHandler">
+      </artifactHandler>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.mylyn/pom.xml b/bundles/org.eclipse.capra.handler.mylyn/pom.xml
new file mode 100644
index 0000000..ad0b56d
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.mylyn/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.mylyn</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java b/bundles/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
new file mode 100644
index 0000000..9d373f7
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * 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.mylyn;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
+import org.eclipse.mylyn.internal.tasks.core.TaskList;
+import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
+import org.eclipse.mylyn.tasks.core.ITask;
+
+/**
+ * A handler to allow tracing from and to tasks handled by Mylyn.
+ */
+@SuppressWarnings("restriction")
+public class MylynHandler extends AbstractArtifactHandler<ITask> {
+
+	@Override
+	public EObject createWrapper(ITask task, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), task.getUrl(),
+				task.getSummary(), task.getUrl());
+		return wrapper;
+	}
+
+	@Override
+	public ITask resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		TaskList taskList = (TaskList) TasksUiInternal.getTaskList();
+		Collection<AbstractTask> allTasks = taskList.getAllTasks();
+		Optional<AbstractTask> task = allTasks.stream()
+				.filter(t -> t.getUrl().equals(adapter.getArtifactUri(wrapper)))
+				.findFirst();
+		if (task.isPresent()) {
+			return task.get();
+		} else
+		return null;
+	}
+
+	@Override
+	public String getDisplayName(ITask task) {
+		return task.getTaskId() + " : " + task.getSummary();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Mylyn Tasks
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/org.eclipse.capra.core/.classpath b/bundles/org.eclipse.capra.handler.office/.classpath
similarity index 100%
copy from org.eclipse.capra.core/.classpath
copy to bundles/org.eclipse.capra.handler.office/.classpath
diff --git a/bundles/org.eclipse.capra.handler.office/.project b/bundles/org.eclipse.capra.handler.office/.project
new file mode 100644
index 0000000..87f6ca0
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.office/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.office</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/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.office/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
copy to bundles/org.eclipse.capra.handler.office/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..407208b
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.office/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Microsoft Office Files
+Bundle-SymbolicName: org.eclipse.capra.handler.office;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.capra.ui.office,
+ org.eclipse.core.resources,
+ org.eclipse.ui
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.office/build.properties b/bundles/org.eclipse.capra.handler.office/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.office/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.office/plugin.xml b/bundles/org.eclipse.capra.handler.office/plugin.xml
new file mode 100644
index 0000000..f1520d2
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.office/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+	<extension
+       id="org.eclipse.capra.handler.office.OfficeHandler"
+       point="org.eclipse.capra.configuration.artifactHandlers">
+	  	<artifactHandler
+	    	class="org.eclipse.capra.handler.office.OfficeHandler">
+	  	</artifactHandler>
+	</extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.office/pom.xml b/bundles/org.eclipse.capra.handler.office/pom.xml
new file mode 100644
index 0000000..8dee78d
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.office/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+	<artifactId>org.eclipse.capra.handler.office</artifactId>
+	<parent>
+		<artifactId>parent</artifactId>
+		<groupId>org.eclipse.capra</groupId>
+		<version>0.7.1-SNAPSHOT</version>
+		<relativePath>../../pom.xml</relativePath>
+	</parent>
+	<packaging>eclipse-plugin</packaging>
+</project>
diff --git a/bundles/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java b/bundles/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java
new file mode 100644
index 0000000..e3ee3bf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.office/src/org/eclipse/capra/handler/office/OfficeHandler.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * 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.office;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.ui.office.Activator;
+import org.eclipse.capra.ui.office.model.CapraOfficeObject;
+import org.eclipse.capra.ui.office.preferences.OfficePreferences;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * A handler to create trace links from and to content of Office files.
+ * 
+ * @author Dusan Kalanj
+ * 
+ */
+public class OfficeHandler extends AbstractArtifactHandler<CapraOfficeObject> {
+
+	@Override
+	public EObject createWrapper(CapraOfficeObject officeObject, EObject artifactModel) {
+		// Returns the EObject corresponding to the input object if the input is
+		// an EObject, or if it is Adaptable to an EObject
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), officeObject.getUri(),
+				officeObject.getData(), officeObject.getUri());
+		return wrapper;
+	}
+
+	@Override
+	public CapraOfficeObject resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		String uri = adapter.getArtifactUri(wrapper);
+		CapraOfficeObject object = new CapraOfficeObject();
+		object.setUri(uri);
+		object.setData(adapter.getArtifactName(wrapper));
+		return object;
+	}
+
+	@Override
+	public String getDisplayName(CapraOfficeObject officeObject) {
+		int minAllowed = Activator.getDefault().getPreferenceStore()
+				.getInt(OfficePreferences.CHAR_COUNT);
+		String text = officeObject.toString();
+		int textLength = Math.min(text.length(), minAllowed);
+		if (textLength == minAllowed) {
+			text = text.substring(0, textLength) + "...";
+		}
+		return text;
+	}
+
+	@Override
+	public String generateMarkerMessage(org.eclipse.core.resources.IResourceDelta delta, String wrapperUri) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for Office documents.
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+
+}
diff --git a/org.eclipse.capra.handler.papyrus/.classpath b/bundles/org.eclipse.capra.handler.papyrus/.classpath
similarity index 100%
rename from org.eclipse.capra.handler.papyrus/.classpath
rename to bundles/org.eclipse.capra.handler.papyrus/.classpath
diff --git a/org.eclipse.capra.handler.papyrus/.gitignore b/bundles/org.eclipse.capra.handler.papyrus/.gitignore
similarity index 100%
rename from org.eclipse.capra.handler.papyrus/.gitignore
rename to bundles/org.eclipse.capra.handler.papyrus/.gitignore
diff --git a/org.eclipse.capra.handler.papyrus/.project b/bundles/org.eclipse.capra.handler.papyrus/.project
similarity index 100%
rename from org.eclipse.capra.handler.papyrus/.project
rename to bundles/org.eclipse.capra.handler.papyrus/.project
diff --git a/org.eclipse.capra.handler.papyrus/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.papyrus/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.handler.papyrus/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.handler.papyrus/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f5c2132
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for Papyrus Models
+Bundle-SymbolicName: org.eclipse.capra.handler.papyrus;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.capra.ui,
+ org.eclipse.emf.ecore,
+ org.eclipse.papyrus.emf.facet.custom.metamodel,
+ org.eclipse.papyrus.infra.emf,
+ org.eclipse.core.resources
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.papyrus/build.properties b/bundles/org.eclipse.capra.handler.papyrus/build.properties
new file mode 100644
index 0000000..a40b961
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.papyrus/build.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

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

+source.. = src/

+bin.includes = META-INF/,\

+               .,\

+               plugin.xml

diff --git a/bundles/org.eclipse.capra.handler.papyrus/plugin.xml b/bundles/org.eclipse.capra.handler.papyrus/plugin.xml
new file mode 100644
index 0000000..11f3c94
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.papyrus/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<?eclipse version="3.4"?>

+<!--

+    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

+ -->

+
+<plugin>

+	<extension

+       id="org.eclipse.capra.handler.papyrus.PapyrusHandler"

+       point="org.eclipse.capra.configuration.artifactHandlers">

+	  	<artifactHandler

+	    	class="org.eclipse.capra.handler.papyrus.PapyrusHandler">

+	  	</artifactHandler>

+	</extension>

+</plugin>

diff --git a/bundles/org.eclipse.capra.handler.papyrus/pom.xml b/bundles/org.eclipse.capra.handler.papyrus/pom.xml
new file mode 100644
index 0000000..1c8dc8e
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.papyrus/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.papyrus</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java b/bundles/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
new file mode 100644
index 0000000..17d9c66
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * 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.papyrus;
+
+import java.util.Collections;
+import java.util.List;
+
+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;
+import org.eclipse.papyrus.emf.facet.custom.metamodel.v0_2_0.internal.treeproxy.EObjectTreeElement;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+
+/**
+ * A handler to create trace links from and to model elements created in
+ * Papyrus.
+ */
+public class PapyrusHandler extends AbstractArtifactHandler<EObjectTreeElement> {
+
+	@Override
+	public EObject createWrapper(EObjectTreeElement artifact, EObject artifactModel) {
+		// Returns the EObject corresponding to the input object if the input is
+		// an EObject, or if it is Adaptable to an EObject
+		return EMFHelper.getEObject(artifact);
+	}
+
+	@Override
+	public EObjectTreeElement resolveWrapper(EObject wrapper) {
+		return (EObjectTreeElement) wrapper; // TODO
+	}
+
+	@Override
+	public String getDisplayName(EObjectTreeElement artifact) {
+		EObject sel = EMFHelper.getEObject(artifact);
+		return org.eclipse.capra.core.helpers.EMFHelper.getIdentifier(sel); // TODO
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links specific for Papyrus models.
+		// Currently, UML links such as association and those from the SYSML
+		// Profile are handled by the UML Handler.
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.capra.documentation/.classpath b/bundles/org.eclipse.capra.handler.php/.classpath
similarity index 100%
copy from org.eclipse.capra.documentation/.classpath
copy to bundles/org.eclipse.capra.handler.php/.classpath
diff --git a/bundles/org.eclipse.capra.handler.php/.project b/bundles/org.eclipse.capra.handler.php/.project
new file mode 100644
index 0000000..498afb0
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.php</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.php/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.php/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..152e208
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for PHP Elements
+Bundle-SymbolicName: org.eclipse.capra.handler.php;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.capra.core,
+ org.eclipse.php.core,
+ org.eclipse.dltk.core,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.capra.ui.notification,
+ org.eclipse.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.php/build.properties b/bundles/org.eclipse.capra.handler.php/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.php/plugin.xml b/bundles/org.eclipse.capra.handler.php/plugin.xml
new file mode 100644
index 0000000..f71dc3e
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="id1"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.php.PhpHandler">
+      </artifactHandler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.startup">
+      <startup
+            class="org.eclipse.capra.handler.php.notification.StartUp">
+      </startup>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.php/pom.xml b/bundles/org.eclipse.capra.handler.php/pom.xml
new file mode 100644
index 0000000..5e261fe
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.handler.php</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java b/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java
new file mode 100644
index 0000000..29f0a11
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/PhpHandler.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * 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.php;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.emf.ecore.EObject;
+
+public class PhpHandler extends AbstractArtifactHandler<IModelElement> {
+
+	@Override
+	public EObject createWrapper(IModelElement artifact, EObject artifactModel) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(),
+				artifact.getHandleIdentifier(), artifact.getElementName(), artifact.getPath().toString());
+		return wrapper;
+	}
+
+	@Override
+	public IModelElement resolveWrapper(EObject wrapper) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		String handleIdentifier = adapter.getArtifactUri(wrapper);
+		return DLTKCore.create(handleIdentifier);
+	}
+
+	@Override
+	public String getDisplayName(IModelElement artifact) {
+		return artifact.getElementName();
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		// Method currently left empty to wait for user requirements of relevant
+		// internal links for PHP code.
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/notification/PHPElementChangeListener.java b/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/notification/PHPElementChangeListener.java
new file mode 100644
index 0000000..0f86ae7
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/notification/PHPElementChangeListener.java
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * 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.php.notification;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.handler.php.PhpHandler;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper;
+import org.eclipse.capra.ui.notification.CapraNotificationHelper.IssueType;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.ElementChangedEvent;
+import org.eclipse.dltk.core.IElementChangedListener;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IModelElementDelta;
+import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.ISourceReference;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+/**
+ * Checks for changes of PHP Elements to determine if they affect the trace
+ * model. Creates markers on the artifact model if the changes affect artifact
+ * wrappers.
+ *
+ * @author Dusan Kalanj, Salome Maro
+ */
+public class PHPElementChangeListener implements IElementChangedListener {
+
+	ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	@Override
+	public void elementChanged(ElementChangedEvent event) {
+		TracePersistenceAdapter tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = tracePersistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		// get all artifacts
+		List<EObject> allArtifacts = artifactAdapter.getAllArtifacts(artifactModel);
+		List<EObject> phpArtifacts = allArtifacts.stream()
+				.filter(p -> artifactAdapter.getArtifactHandler(p).equals(PhpHandler.class.getName()))
+				.collect(Collectors.toList());
+
+		if (phpArtifacts.size() == 0)
+			return;
+
+		IPath path = new Path(EcoreUtil.getURI(artifactModel).toPlatformString(false));
+		IFile wrapperContainer = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+
+		new WorkspaceJob(CapraNotificationHelper.NOTIFICATION_JOB) {
+			@Override
+			public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+				handleDelta(event.getDelta(), phpArtifacts, wrapperContainer);
+				return Status.OK_STATUS;
+			}
+		}.schedule();
+	}
+
+	private void handleDelta(IModelElementDelta delta, List<EObject> phpArtifacts, IFile wrapperContainer) {
+		if (!(delta.getElement() instanceof ISourceModule))
+			// Only go as far as the source file
+			for (IModelElementDelta subDelta : delta.getAffectedChildren())
+			handleDelta(subDelta, phpArtifacts, wrapperContainer);
+
+		int flags = delta.getFlags();
+		int changeType = delta.getKind();
+		IssueType issueType = null;
+
+		if (changeType == IModelElementDelta.ADDED)
+			issueType = IssueType.ADDED;
+		else if (changeType == IModelElementDelta.REMOVED) {
+
+			if ((flags & IModelElementDelta.F_MOVED_TO) != 0)
+				if (delta.getMovedToElement().getElementName().equals(delta.getElement().getElementName()))
+					issueType = IssueType.MOVED;
+				else
+					issueType = IssueType.RENAMED;
+			else
+				issueType = IssueType.DELETED;
+
+		} else if (changeType == IModelElementDelta.CHANGED && (flags & IModelElementDelta.F_PRIMARY_RESOURCE) != 0)
+			// This is only true if a source file changes.
+			issueType = IssueType.CHANGED;
+
+		if (issueType != null) {
+			String affectedElementUri = delta.getElement().getHandleIdentifier();
+			if (affectedElementUri != null) {
+				for (EObject aw : phpArtifacts) {
+					String artifactUri = artifactAdapter.getArtifactUri(aw);
+					// Only create a marker if a signature of a
+					// method/variable/class... has changed inside of a source
+					// file.
+
+					IssueType[] markersToDelete = null;
+					String deleteMarkerUri = "";
+					IModelElement element = DLTKCore.create(artifactUri);
+					if (element != null && element.exists()) {
+						deleteMarkerUri = artifactUri;
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.DELETED };
+					} else if (issueType == IssueType.DELETED) {
+						markersToDelete = new IssueType[] { IssueType.MOVED, IssueType.RENAMED, IssueType.CHANGED };
+						deleteMarkerUri = affectedElementUri;
+					}
+
+					if (!deleteMarkerUri.isEmpty() && artifactUri.contains(deleteMarkerUri))
+						CapraNotificationHelper.deleteCapraMarker(artifactUri, markersToDelete, wrapperContainer);
+
+					if (artifactUri.contains(affectedElementUri)) {
+						HashMap<String, String> markerInfo = generateMarkerInfo(aw, delta, issueType);
+						CapraNotificationHelper.createCapraMarker(markerInfo, wrapperContainer);
+					}
+				}
+			}
+		}
+	}
+
+	/**
+	 * Generates the attributes that will later be assigned (in the createMarker
+	 * method) to a Capra change marker.
+	 *
+	 * @param aw
+	 *            ArtifactWrapper that links to the element in the delta or to a
+	 *            child of the element in the delta
+	 * @param delta
+	 *            represents changes in the state of a PHP Element
+	 * @param issue
+	 *            the type of change that occurred
+	 * @return a key value HashMap, containing the attributes to be assigned to
+	 *         a Capra change marker and their keys (IDs).
+	 */
+	// This works well for child elements if files are renamed or deleted.
+	// Renaming classes/methods/variables inside a class
+	// translates to a deleted classes/methods/variables because the delta does
+	// not keep track of
+	// the new name of the class. It just knows about the old name.
+	private HashMap<String, String> generateMarkerInfo(EObject aw, IModelElementDelta delta, IssueType issueType) {
+		HashMap<String, String> markerInfo = new HashMap<String, String>();
+
+		// Properties from the PHP element in the wrapper
+		String oldArtifactUri = artifactAdapter.getArtifactUri(aw);
+		String oldArtifactName = artifactAdapter.getArtifactName(aw);
+
+		// Properties from the affected PHP element with its former path
+		String oldAffectedElementUri = delta.getElement().getHandleIdentifier();
+		String oldAffectedElementName = delta.getElement().getElementName();
+		String newAffectedElementUri = null;
+		String newAffectedElementName = null;
+
+		// Affected element with its new path (null if not renamed or moved)
+		IModelElement newAffectedElement = delta.getMovedToElement();
+		if (newAffectedElement != null) {
+			newAffectedElementUri = newAffectedElement.getHandleIdentifier();
+			newAffectedElementName = newAffectedElement.getElementName();
+		}
+
+		String message = "";
+		// TODO Make messages more readable (replaces uris with names?).
+		switch (issueType) {
+		case RENAMED:
+			if (oldArtifactUri.equals(oldAffectedElementUri))
+				// The element in the wrapper is the renamed element.
+				message = oldAffectedElementUri + " has been renamed to " + newAffectedElementUri + ".";
+			else
+				// The element in the wrapper is a child of the renamed element.
+				message = oldAffectedElementName + ", an ancestor of " + oldArtifactUri + ", has been renamed to "
+						+ newAffectedElementName + ".";
+			break;
+		case MOVED:
+			if (oldArtifactUri.equals(oldAffectedElementUri))
+				// The element in the wrapper is the moved element.
+				message = oldAffectedElementUri + " has been moved to " + newAffectedElementUri + ".";
+			else
+				// The element in the wrapper is a child of the moved element.
+				message = oldAffectedElementName + ", an ancestor of " + oldArtifactUri + ", has been moved to "
+						+ newAffectedElementUri;
+			break;
+		default:
+			IModelElement el = DLTKCore.create(oldArtifactUri);
+			if (el == null || !el.exists()) {
+				issueType = IssueType.DELETED;
+				message = artifactAdapter.getArtifactUri(aw);
+
+				if (el instanceof ISourceReference && !(el instanceof ISourceModule))
+					message += " has been deleted or has had its signature changed.";
+				else
+					message += " has been deleted.";
+			}
+			break;
+		}
+
+		// The affected element has been renamed or moved.
+		if (newAffectedElementUri != null) {
+
+			String newArtifactUri;
+			String newArtifactName;
+			if (oldArtifactUri.equals(oldAffectedElementUri)) {
+				// The element in the wrapper is the affected element.
+				newArtifactUri = newAffectedElementUri;
+				newArtifactName = newAffectedElementName;
+			} else {
+				// The element in the wrapper is a child of the affected
+				// element.
+
+				// Build new uri for the moved class
+				newArtifactUri = oldArtifactUri.replace(oldAffectedElementUri, newAffectedElementUri);
+				newArtifactName = oldArtifactName;
+
+				// Check if artifact belongs to the PHP files (because
+				// inner elements in the PHP file change with the file name)
+				if (newAffectedElement instanceof ISourceModule) {
+					String oldPublicClassName = oldAffectedElementName.replace(".php", "");
+					String newPublicClassName = newAffectedElementName.replace(".php", "");
+
+					int classStartIndex = newAffectedElementUri.length();
+					int classEndIndex = classStartIndex + oldPublicClassName.length();
+
+					if (newArtifactUri.substring(classStartIndex, classEndIndex).equals(oldPublicClassName))
+						newArtifactUri = newArtifactUri.substring(0, classStartIndex) + newPublicClassName
+								+ newArtifactUri.substring(classEndIndex);
+
+					if (newArtifactName.contentEquals(oldPublicClassName))
+						newArtifactName = newPublicClassName;
+				}
+			}
+
+			markerInfo.put(CapraNotificationHelper.NEW_URI, newArtifactUri);
+			markerInfo.put(CapraNotificationHelper.NEW_NAME, newArtifactName);
+		}
+
+		markerInfo.put(CapraNotificationHelper.ISSUE_TYPE, issueType.getValue());
+		markerInfo.put(CapraNotificationHelper.OLD_URI, oldArtifactUri);
+		markerInfo.put(CapraNotificationHelper.MESSAGE, message);
+
+		return markerInfo;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/notification/StartUp.java b/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/notification/StartUp.java
new file mode 100644
index 0000000..9a74d93
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.php/src/org/eclipse/capra/handler/php/notification/StartUp.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.php.notification;
+
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.ui.IStartup;
+
+/**
+ * Registers the startup extension to add the PHP Element change listener.
+ */
+public class StartUp implements IStartup {
+
+	@Override
+	public void earlyStartup() {
+		DLTKCore.addElementChangedListener(new PHPElementChangeListener());
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.reqIf/.classpath b/bundles/org.eclipse.capra.handler.reqIf/.classpath
new file mode 100644
index 0000000..0dc3991
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/.classpath
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.handler.reqIf/.project b/bundles/org.eclipse.capra.handler.reqIf/.project
new file mode 100644
index 0000000..8181675
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.reqIf</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.reqIf/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.handler.reqIf/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..672496e
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+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.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.capra.handler.reqIf/.settings/org.eclipse.m2e.core.prefs b/bundles/org.eclipse.capra.handler.reqIf/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e9a5c55
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for ReqIF Models
+Bundle-SymbolicName: org.eclipse.capra.handler.reqIf;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Export-Package: org.eclipse.capra.handler.reqif,
+ org.eclipse.capra.handler.reqif.preferences
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.rmf.reqif10.pror,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.handler.reqIf/build.properties b/bundles/org.eclipse.capra.handler.reqIf/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.reqIf/plugin.xml b/bundles/org.eclipse.capra.handler.reqIf/plugin.xml
new file mode 100644
index 0000000..37f1823
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="org.eclipse.capra.handler.reqif.ReqIfHandler"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.reqif.ReqIfHandler">
+      </artifactHandler>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.reqIf/pom.xml b/bundles/org.eclipse.capra.handler.reqIf/pom.xml
new file mode 100644
index 0000000..62b8624
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+	<artifactId>org.eclipse.capra.handler.reqIf</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<parent>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.7.1-SNAPSHOT</version>
+		<relativePath>../../pom.xml</relativePath>
+	</parent>
+</project>
diff --git a/bundles/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java b/bundles/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
new file mode 100644
index 0000000..5de66aa
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * 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.reqif;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.capra.handler.reqif.preferences.ReqifPreferences;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.rmf.reqif10.AttributeValue;
+import org.eclipse.rmf.reqif10.SpecHierarchy;
+import org.eclipse.rmf.reqif10.SpecObject;
+import org.eclipse.rmf.reqif10.SpecRelation;
+import org.eclipse.rmf.reqif10.Specification;
+import org.eclipse.rmf.reqif10.common.util.ReqIF10Util;
+
+public class ReqIfHandler extends AbstractArtifactHandler<SpecHierarchy> {
+
+	// TODO: This used to expect IStructuredSelection input, why?
+
+	@Override
+	public EObject createWrapper(SpecHierarchy spec, EObject artifactModel) {
+		return spec;
+	}
+
+	@Override
+	public SpecHierarchy resolveWrapper(EObject wrapper) {
+		return (SpecHierarchy) wrapper;
+	}
+
+	@Override
+	public String getDisplayName(SpecHierarchy spec) {
+		IEclipsePreferences preference = ReqifPreferences.getPreferences();
+		String idAttribute = preference.get(ReqifPreferences.REQIF_ID_ATTRIBUTE,
+				ReqifPreferences.REQIF_ID_ATTRIBUTE_DEFAULT);
+		SpecObject specObject = spec.getObject();
+		if (specObject != null) {
+			AttributeValue attributeValue = ReqIF10Util.getAttributeValueForLabel(specObject, idAttribute);
+			if (attributeValue != null) {
+				return ReqIF10Util.getTheValue(attributeValue).toString();
+			} else {
+				// as a default fall back use the first column as an ID
+				// column
+				AttributeValue defaultAttributeValue = specObject.getValues().get(0);
+				return ReqIF10Util.getTheValue(defaultAttributeValue).toString();
+			}
+		} else // empty row is selected
+			return "";
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		if (investigatedElement instanceof SpecHierarchy) {
+			SpecHierarchy spec = (SpecHierarchy) investigatedElement;
+
+			// get all relationships in the model
+			EList<SpecRelation> specRelations = ReqIF10Util.getReqIF(spec).getCoreContent()
+					.getSpecRelations();
+			List<Specification> specifications = ReqIF10Util.getReqIF(spec).getCoreContent().getSpecifications();
+
+			// get relationships containing the investigated element
+			List<SpecRelation> relevantRelations = specRelations.stream()
+					.filter(r -> (r.getSource().equals(spec.getObject())) || r.getTarget().equals(spec.getObject()))
+					.collect(Collectors.toList());
+			List<Connection> connections = new ArrayList<>();
+
+			// get all specHierachy objects contained in the relevant links as
+			// targets
+			for(SpecRelation r: relevantRelations) {
+				List<EObject> targets = new ArrayList<>();
+				for (Specification specification : specifications) {
+					for (EObject object : EMFHelper.linearize(specification)) {
+						if (object instanceof SpecHierarchy) {
+							SpecHierarchy spechierachy = (SpecHierarchy) object;
+							if ((spechierachy.getObject().getIdentifier().equals(r.getTarget().getIdentifier()))
+									|| spechierachy.getObject().getIdentifier().equals(r.getSource().getIdentifier())) {
+								targets.add(spechierachy);
+							}
+					}
+				}
+				connections.add(new Connection(investigatedElement, targets, r));
+				}
+			}
+			return connections;
+		} else
+		return Collections.emptyList();
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		return false;
+	}
+}
diff --git a/bundles/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/preferences/ReqifPreferences.java b/bundles/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/preferences/ReqifPreferences.java
new file mode 100644
index 0000000..039255c
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/preferences/ReqifPreferences.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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.reqif.preferences;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+
+public class ReqifPreferences {
+	public static final IScopeContext SCOPE_CONTEXT = InstanceScope.INSTANCE;
+	public static final String PREFERENCE_NODE = "org.eclipse.capra.ui.reqif";
+
+	// ID attribute
+	public static final String REQIF_ID_ATTRIBUTE = "";
+	public static final String REQIF_ID_ATTRIBUTE_DEFAULT = "ID";
+
+	public static IEclipsePreferences getPreferences() {
+		return SCOPE_CONTEXT.getNode(PREFERENCE_NODE);
+	}
+}
diff --git a/org.eclipse.capra.documentation/.classpath b/bundles/org.eclipse.capra.handler.uml/.classpath
similarity index 100%
copy from org.eclipse.capra.documentation/.classpath
copy to bundles/org.eclipse.capra.handler.uml/.classpath
diff --git a/bundles/org.eclipse.capra.handler.uml/.project b/bundles/org.eclipse.capra.handler.uml/.project
new file mode 100644
index 0000000..efb105b
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.uml/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.uml</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.uml/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.handler.uml/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..abe2243
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.uml/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Handler for UML Models
+Bundle-SymbolicName: org.eclipse.capra.handler.uml;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Export-Package: org.eclipse.capra.handler.uml
+Require-Bundle: org.eclipse.uml2.uml,
+ org.eclipse.emf.ecore,
+ org.eclipse.capra.core,
+ org.eclipse.core.resources
+Bundle-Vendor: Capra Development Team
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+
diff --git a/bundles/org.eclipse.capra.handler.uml/build.properties b/bundles/org.eclipse.capra.handler.uml/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.uml/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.handler.uml/plugin.xml b/bundles/org.eclipse.capra.handler.uml/plugin.xml
new file mode 100644
index 0000000..a34ab78
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.uml/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         id="id1"
+         point="org.eclipse.capra.configuration.artifactHandlers">
+      <artifactHandler
+            class="org.eclipse.capra.handler.uml.UMLHandler">
+      </artifactHandler>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.handler.uml/pom.xml b/bundles/org.eclipse.capra.handler.uml/pom.xml
new file mode 100644
index 0000000..b133207
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.uml/pom.xml
@@ -0,0 +1,23 @@
+<?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>
+	<artifactId>org.eclipse.capra.handler.uml</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<parent>
+		<groupId>org.eclipse.capra</groupId>
+		<artifactId>parent</artifactId>
+		<version>0.7.1-SNAPSHOT</version>
+		<relativePath>../../pom.xml</relativePath>
+	</parent>
+</project>
diff --git a/bundles/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java b/bundles/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java
new file mode 100644
index 0000000..ecdf065
--- /dev/null
+++ b/bundles/org.eclipse.capra.handler.uml/src/org/eclipse/capra/handler/uml/UMLHandler.java
@@ -0,0 +1,519 @@
+/*******************************************************************************
+ * 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.uml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.handlers.AbstractArtifactHandler;
+import org.eclipse.capra.core.helpers.EMFHelper;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.uml2.uml.ActivityEdge;
+import org.eclipse.uml2.uml.Connector;
+import org.eclipse.uml2.uml.ConnectorEnd;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.Message;
+import org.eclipse.uml2.uml.MessageOccurrenceSpecification;
+import org.eclipse.uml2.uml.Port;
+import org.eclipse.uml2.uml.Relationship;
+import org.eclipse.uml2.uml.Transition;
+
+/**
+ * Handler to allow tracing to and from arbitrary UML model elements.
+ * 
+ * @author Dominik Einkemmer
+ */
+public class UMLHandler extends AbstractArtifactHandler<EModelElement> {
+
+	@Override
+	public EObject createWrapper(EModelElement artifact, EObject artifactModel) {
+		return artifact;
+	}
+
+	@Override
+	public EModelElement resolveWrapper(EObject wrapper) {
+		return (EModelElement) wrapper;
+	}
+
+	@Override
+	public String getDisplayName(EModelElement artifact) {
+		return EMFHelper.getIdentifier(artifact);
+	}
+
+	@Override
+	public List<Connection> addInternalLinks(EObject investigatedElement, List<String> selectedRelationshipTypes) {
+		List<Integer> duplicationCheck = new ArrayList<>();
+		List<Connection> allElements = new ArrayList<>();
+		if (Relationship.class.isAssignableFrom(investigatedElement.getClass())) {
+			if (selectedRelationshipTypes.size() == 0
+					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
+				Relationship rel = Relationship.class.cast(investigatedElement);
+				List<EObject> relatedElements = new ArrayList<>();
+				int connectionHash = investigatedElement.hashCode() + rel.hashCode();
+				for (Element element : rel.getRelatedElements()) {
+					relatedElements.add(element);
+					connectionHash += element.hashCode();
+				}
+				if (!duplicationCheck.contains(connectionHash)) {
+					Connection conn = new Connection(investigatedElement, relatedElements, rel);
+					allElements.add(conn);
+					duplicationCheck.add(connectionHash);
+				}
+			}
+		} else if (ActivityEdge.class.isAssignableFrom(investigatedElement.getClass())) {
+			if (selectedRelationshipTypes.size() == 0
+					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
+				ActivityEdge activityEdge = ActivityEdge.class.cast(investigatedElement);
+				List<EObject> relatedElements = new ArrayList<>();
+				relatedElements.add(activityEdge.getTarget());
+				relatedElements.add(activityEdge.getSource());
+				int connectionHash = investigatedElement.hashCode() + activityEdge.hashCode();
+				if (!duplicationCheck.contains(connectionHash)) {
+					Connection conn = new Connection(investigatedElement, relatedElements, activityEdge);
+					allElements.add(conn);
+					duplicationCheck.add(connectionHash);
+				}
+			}
+		} else if (Transition.class.isAssignableFrom(investigatedElement.getClass())) {
+			if (selectedRelationshipTypes.size() == 0
+					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
+				Transition transition = Transition.class.cast(investigatedElement);
+				List<EObject> relatedElements = new ArrayList<>();
+				relatedElements.add(transition.getSource());
+				relatedElements.add(transition.getTarget());
+				int connectionHash = investigatedElement.hashCode() + transition.hashCode()
+						+ transition.getTarget().hashCode() + transition.getSource().hashCode();
+				if (!duplicationCheck.contains(connectionHash)) {
+					Connection conn = new Connection(investigatedElement, relatedElements, transition);
+					allElements.add(conn);
+					duplicationCheck.add(connectionHash);
+				}
+			}
+		} else if (Message.class.isAssignableFrom(investigatedElement.getClass())) {
+			if (selectedRelationshipTypes.size() == 0
+					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
+				Message msg = Message.class.cast(investigatedElement);
+				MessageOccurrenceSpecification receiver = (MessageOccurrenceSpecification) msg.getReceiveEvent();
+				MessageOccurrenceSpecification sender = (MessageOccurrenceSpecification) msg.getSendEvent();
+				if (receiver != null) {
+					List<EObject> relatedElements = new ArrayList<>();
+					relatedElements.add(sender.getCovered());
+					relatedElements.add(receiver.getCovered());
+					int connectionHash = investigatedElement.hashCode() + msg.hashCode()
+							+ msg.getMessageSort().hashCode() + sender.getCovered().hashCode()
+							+ receiver.getCovered().hashCode();
+					if (!duplicationCheck.contains(connectionHash)) {
+						Connection conn = new Connection(investigatedElement, relatedElements, msg);
+						allElements.add(conn);
+						duplicationCheck.add(connectionHash);
+					}
+				}
+			}
+		} else if (Port.class.isAssignableFrom(investigatedElement.getClass())) {
+			if (selectedRelationshipTypes.size() == 0
+					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
+				Port port = Port.class.cast(investigatedElement);
+				EList<Interface> provideds = port.getProvideds();
+				EList<Interface> requireds = port.getRequireds();
+				List<EObject> relatedElements = new ArrayList<>();
+				relatedElements.addAll(requireds);
+				relatedElements.addAll(provideds);
+				int connectionHash = investigatedElement.hashCode() + port.hashCode();
+				for (EObject el : relatedElements) {
+					connectionHash += el.hashCode();
+				}
+				if (!duplicationCheck.contains(connectionHash)) {
+					Connection conn = new Connection(investigatedElement, relatedElements, port);
+					allElements.add(conn);
+					duplicationCheck.add(connectionHash);
+				}
+			}
+		} else if (Connector.class.isAssignableFrom(investigatedElement.getClass())) {
+			if (selectedRelationshipTypes.size() == 0
+					|| selectedRelationshipTypes.contains(investigatedElement.eClass().getName())) {
+				Connector connector = Connector.class.cast(investigatedElement);
+				EList<ConnectorEnd> connectedEnds = connector.getEnds();
+				List<EObject> relatedElements = new ArrayList<>();
+				connectedEnds.forEach(connectedEnd -> {
+					if (connectedEnd.getPartWithPort() != null) {
+						relatedElements.add(connectedEnd.getPartWithPort());
+					} else {
+						relatedElements.add(connectedEnd);
+					}
+				});
+				int connectionHash = investigatedElement.hashCode() + connector.hashCode();
+				for (EObject el : relatedElements) {
+					connectionHash += el.hashCode();
+				}
+				if (!duplicationCheck.contains(connectionHash)) {
+					Connection conn = new Connection(investigatedElement, relatedElements, connector);
+					allElements.add(conn);
+					duplicationCheck.add(connectionHash);
+				}
+			}
+		} else {
+			EObject root = EcoreUtil.getRootContainer(investigatedElement);
+			TreeIterator<EObject> modelContents = root.eAllContents();
+			while (modelContents.hasNext()) {
+				EObject content = modelContents.next();
+				if (selectedRelationshipTypes.size() == 0
+						|| selectedRelationshipTypes.contains(content.eClass().getName())) {
+					if (Relationship.class.isAssignableFrom(content.getClass())) {
+						Relationship relation = Relationship.class.cast(content);
+						boolean isRelatedToElement = false;
+						List<EObject> relatedElements = new ArrayList<>();
+						for (Element relatedElement : relation.getRelatedElements()) {
+							if (relatedElement.hashCode() == investigatedElement.hashCode()) {
+								isRelatedToElement = true;
+							} else {
+								relatedElements.add(relatedElement);
+							}
+						}
+						if (isRelatedToElement) {
+							int connectionHash = investigatedElement.hashCode() + relation.hashCode();
+							for (EObject element : relatedElements) {
+								connectionHash += element.hashCode();
+							}
+							if (!duplicationCheck.contains(connectionHash)) {
+								Connection conn = new Connection(investigatedElement, relatedElements, relation);
+								allElements.add(conn);
+								duplicationCheck.add(connectionHash);
+							}
+						}
+					} else if (ActivityEdge.class.isAssignableFrom(content.getClass())) {
+						if (selectedRelationshipTypes.size() == 0
+								|| selectedRelationshipTypes.contains(content.eClass().getName())) {
+							ActivityEdge activityEdge = ActivityEdge.class.cast(content);
+							List<EObject> relatedElements = new ArrayList<>();
+							if (activityEdge.getTarget().hashCode() == investigatedElement.hashCode()) {
+								relatedElements.add(activityEdge.getSource());
+							} else if (activityEdge.getSource().hashCode() == investigatedElement.hashCode()) {
+								relatedElements.add(activityEdge.getTarget());
+							}
+							int connectionHash = investigatedElement.hashCode() + activityEdge.hashCode();
+							if (!duplicationCheck.contains(connectionHash)) {
+								Connection conn = new Connection(investigatedElement, relatedElements, activityEdge);
+								allElements.add(conn);
+								duplicationCheck.add(connectionHash);
+							}
+						}
+					} else if (Transition.class.isAssignableFrom(content.getClass())) {
+						Transition transition = Transition.class.cast(content);
+						List<EObject> relatedElements = new ArrayList<>();
+						if (transition.getSource().hashCode() == investigatedElement.hashCode()) {
+							relatedElements.add(transition.getTarget());
+							int connectionHash = investigatedElement.hashCode() + transition.hashCode()
+									+ transition.getTarget().hashCode();
+							if (!duplicationCheck.contains(connectionHash)) {
+								Connection conn = new Connection(investigatedElement, relatedElements, transition);
+								allElements.add(conn);
+								duplicationCheck.add(connectionHash);
+							}
+						} else if (transition.getTarget().hashCode() == investigatedElement.hashCode()) {
+							relatedElements.add(transition.getSource());
+							int connectionHash = investigatedElement.hashCode() + transition.hashCode()
+									+ transition.getSource().hashCode();
+							if (!duplicationCheck.contains(connectionHash)) {
+								Connection conn = new Connection(investigatedElement, relatedElements, transition);
+								allElements.add(conn);
+								duplicationCheck.add(connectionHash);
+							}
+						}
+					} else if (Message.class.isAssignableFrom(content.getClass())) {
+						Message msg = Message.class.cast(content);
+						MessageOccurrenceSpecification receiver = (MessageOccurrenceSpecification) msg
+								.getReceiveEvent();
+						MessageOccurrenceSpecification sender = (MessageOccurrenceSpecification) msg.getSendEvent();
+						List<EObject> relatedElements = new ArrayList<>();
+						if (receiver != null && receiver.getCovered() != null) {
+							if (receiver.getCovered().hashCode() == investigatedElement.hashCode()) {
+								relatedElements.add(sender.getCovered());
+								int connectionHash = investigatedElement.hashCode() + msg.hashCode()
+										+ msg.getMessageSort().hashCode() + sender.getCovered().hashCode();
+								if (!duplicationCheck.contains(connectionHash)) {
+									Connection conn = new Connection(investigatedElement, relatedElements, msg);
+									allElements.add(conn);
+									duplicationCheck.add(connectionHash);
+								}
+							} else if (sender.getCovered().hashCode() == investigatedElement.hashCode()) {
+								relatedElements.add(receiver.getCovered());
+								int connectionHash = investigatedElement.hashCode() + msg.hashCode()
+										+ msg.getMessageSort().hashCode() + receiver.getCovered().hashCode();
+								if (!duplicationCheck.contains(connectionHash)) {
+									Connection conn = new Connection(investigatedElement, relatedElements, msg);
+									allElements.add(conn);
+									duplicationCheck.add(connectionHash);
+								}
+							}
+						}
+					} else if (Port.class.isAssignableFrom(content.getClass())) {
+						Port port = Port.class.cast(content);
+						EList<Interface> provideds = port.getProvideds();
+						boolean investigatedIsProvided = false;
+						for (Interface provided : provideds) {
+							if (provided.hashCode() == investigatedElement.hashCode()) {
+								investigatedIsProvided = true;
+							}
+						}
+						EList<Interface> requireds = port.getRequireds();
+						boolean investigatedIsRequired = false;
+						for (Interface required : requireds) {
+							if (required.hashCode() == investigatedElement.hashCode()) {
+								investigatedIsRequired = true;
+							}
+
+						}
+						List<EObject> relatedElements = new ArrayList<>();
+
+						if (investigatedIsProvided) {
+							relatedElements.addAll(requireds);
+						} else if (investigatedIsRequired) {
+							relatedElements.addAll(provideds);
+						}
+						if (investigatedIsProvided || investigatedIsRequired) {
+							int connectionHash = investigatedElement.hashCode() + port.hashCode();
+							for (EObject el : relatedElements) {
+								connectionHash += el.hashCode();
+							}
+							if (!duplicationCheck.contains(connectionHash)) {
+								Connection conn = new Connection(investigatedElement, relatedElements, port);
+								allElements.add(conn);
+								duplicationCheck.add(connectionHash);
+							}
+						}
+					} else if (Connector.class.isAssignableFrom(content.getClass())) {
+						Connector connector = Connector.class.cast(content);
+						EList<ConnectorEnd> connectedEnds = connector.getEnds();
+						List<EObject> relatedElements = new ArrayList<>();
+						boolean isConnected = false;
+						for (ConnectorEnd connectedEnd : connectedEnds) {
+							if (connectedEnd.getPartWithPort() != null) {
+								relatedElements.add(connectedEnd.getPartWithPort());
+								if (connectedEnd.getPartWithPort().hashCode() == investigatedElement.hashCode()) {
+									isConnected = true;
+									relatedElements.remove(connectedEnd.getPartWithPort());
+								}
+							} else {
+								relatedElements.add(connectedEnd);
+								if (connectedEnd.hashCode() == investigatedElement.hashCode()) {
+									isConnected = true;
+									relatedElements.remove(connectedEnd);
+								}
+							}
+						}
+						if (isConnected) {
+							int connectionHash = investigatedElement.hashCode() + connector.hashCode();
+							for (EObject el : relatedElements) {
+								connectionHash += el.hashCode();
+							}
+							if (!duplicationCheck.contains(connectionHash)) {
+								Connection conn = new Connection(investigatedElement, relatedElements, connector);
+								allElements.add(conn);
+								duplicationCheck.add(connectionHash);
+							}
+						}
+					}
+				}
+			}
+		}
+		return allElements;
+	}
+
+	@Override
+	public boolean isThereAnInternalTraceBetween(EObject first, EObject second) {
+		if (first.equals(second)) {
+			return false;
+		}
+		if (Relationship.class.isAssignableFrom(first.getClass())
+				|| Relationship.class.isAssignableFrom(second.getClass())) {
+			Relationship rel;
+			if (Relationship.class.isAssignableFrom(first.getClass())) {
+				rel = Relationship.class.cast(first);
+			} else {
+				rel = Relationship.class.cast(second);
+			}
+			boolean isRelated = false;
+			for (Element relatedElement : rel.getRelatedElements()) {
+				if (relatedElement.hashCode() == first.hashCode() || relatedElement.hashCode() == second.hashCode()) {
+					isRelated = true;
+				}
+			}
+
+			return isRelated;
+
+		} else if (ActivityEdge.class.isAssignableFrom(first.getClass())
+				|| ActivityEdge.class.isAssignableFrom(second.getClass())) {
+			ActivityEdge activityEdge;
+			if (ActivityEdge.class.isAssignableFrom(first.getClass())) {
+				activityEdge = ActivityEdge.class.cast(first);
+			} else {
+				activityEdge = ActivityEdge.class.cast(second);
+			}
+			int sourceHash = activityEdge.getSource().hashCode();
+			int targetHash = activityEdge.getTarget().hashCode();
+
+			boolean relationContainsFirstElement = sourceHash == first.hashCode() || targetHash == first.hashCode();
+			boolean relationContainsSecondElement = sourceHash == second.hashCode() || targetHash == second.hashCode();
+			if (relationContainsFirstElement && relationContainsSecondElement) {
+				return true;
+			}
+		} else if (Transition.class.isAssignableFrom(first.getClass())
+				|| Transition.class.isAssignableFrom(second.getClass())) {
+			Transition transition;
+			if (Transition.class.isAssignableFrom(first.getClass())) {
+				transition = Transition.class.cast(first);
+			} else {
+				transition = Transition.class.cast(second);
+			}
+			int sourceHash = transition.getSource().hashCode();
+			int targetHash = transition.getTarget().hashCode();
+			boolean relationContainsFirstElement = sourceHash == first.hashCode() || targetHash == first.hashCode();
+			boolean relationContainsSecondElement = sourceHash == second.hashCode() || sourceHash == second.hashCode();
+			if (relationContainsFirstElement && relationContainsSecondElement) {
+				return true;
+			}
+		} else if (Message.class.isAssignableFrom(first.getClass())
+				|| Message.class.isAssignableFrom(second.getClass())) {
+			Message msg;
+			if (Message.class.isAssignableFrom(first.getClass())) {
+				msg = Message.class.cast(first);
+			} else {
+				msg = Message.class.cast(second);
+			}
+			MessageOccurrenceSpecification receiver = (MessageOccurrenceSpecification) msg.getReceiveEvent();
+			MessageOccurrenceSpecification sender = (MessageOccurrenceSpecification) msg.getSendEvent();
+			if (receiver != null) {
+				int sourceHash = sender.getCovered().hashCode();
+				int targetHash = receiver.getCovered().hashCode();
+				boolean relationContainsFirstElement = sourceHash == first.hashCode() || targetHash == first.hashCode();
+				boolean relationContainsSecondElement = sourceHash == second.hashCode()
+						|| targetHash == second.hashCode();
+				if (relationContainsFirstElement && relationContainsSecondElement) {
+					return true;
+				}
+			}
+		} else if (Connector.class.isAssignableFrom(first.getClass())
+				|| Connector.class.isAssignableFrom(second.getClass())) {
+			Connector connector;
+			if (Connector.class.isAssignableFrom(first.getClass())) {
+				connector = Connector.class.cast(first);
+			} else {
+				connector = Connector.class.cast(second);
+			}
+			EList<ConnectorEnd> connectedEnds = connector.getEnds();
+			boolean isRelated = false;
+			for (ConnectorEnd connectedEnd : connectedEnds) {
+				if (connectedEnd.getPartWithPort() != null
+						&& (connectedEnd.getPartWithPort().hashCode() == first.hashCode()
+								|| connectedEnd.getPartWithPort().hashCode() == second.hashCode())) {
+					isRelated = true;
+				} else if (connectedEnd.hashCode() == first.hashCode()
+						|| connectedEnd.hashCode() == second.hashCode()) {
+					isRelated = true;
+				}
+			}
+			if (isRelated) {
+				return true;
+			}
+		} else {
+			boolean relationContainsFirstElement = false;
+			boolean relationContainsSecondElement = false;
+			int numberofInternalLinks = 0;
+			EObject root = EcoreUtil.getRootContainer(first);
+			TreeIterator<EObject> modelContents = root.eAllContents();
+			while (modelContents.hasNext()) {
+				EObject content = modelContents.next();
+				if (Relationship.class.isAssignableFrom(content.getClass())) {
+					Relationship relation = Relationship.class.cast(content);
+					for (Element relatedElement : relation.getRelatedElements()) {
+						if (relatedElement.hashCode() == first.hashCode()) {
+							relationContainsFirstElement = true;
+						} else if (relatedElement.hashCode() == second.hashCode()) {
+							relationContainsSecondElement = true;
+						}
+					}
+					if (relationContainsFirstElement && relationContainsSecondElement) {
+						numberofInternalLinks++;
+					}
+				} else if (ActivityEdge.class.isAssignableFrom(content.getClass())) {
+					ActivityEdge activityEdge = ActivityEdge.class.cast(content);
+					int sourceHash = activityEdge.getSource().hashCode();
+					int targetHash = activityEdge.getTarget().hashCode();
+
+					relationContainsFirstElement = sourceHash == first.hashCode() || targetHash == first.hashCode();
+					relationContainsSecondElement = sourceHash == second.hashCode() || targetHash == second.hashCode();
+					if (relationContainsFirstElement && relationContainsSecondElement) {
+						numberofInternalLinks++;
+					}
+				} else if (Transition.class.isAssignableFrom(content.getClass())) {
+					Transition transition = Transition.class.cast(content);
+					int sourceHash = transition.getSource().hashCode();
+					int targetHash = transition.getTarget().hashCode();
+					relationContainsFirstElement = sourceHash == first.hashCode() || targetHash == first.hashCode();
+					relationContainsSecondElement = sourceHash == second.hashCode() || targetHash == second.hashCode();
+					if (relationContainsFirstElement && relationContainsSecondElement) {
+						numberofInternalLinks++;
+					}
+				} else if (Message.class.isAssignableFrom(content.getClass())) {
+					Message msg = Message.class.cast(content);
+					MessageOccurrenceSpecification receiver = (MessageOccurrenceSpecification) msg.getReceiveEvent();
+					MessageOccurrenceSpecification sender = (MessageOccurrenceSpecification) msg.getSendEvent();
+					if (receiver != null) {
+						int sourceHash = sender.getCovered().hashCode();
+						int targetHash = receiver.getCovered().hashCode();
+						relationContainsFirstElement = sourceHash == first.hashCode() || targetHash == first.hashCode();
+						relationContainsSecondElement = sourceHash == second.hashCode()
+								|| targetHash == second.hashCode();
+						if (relationContainsFirstElement && relationContainsSecondElement) {
+							numberofInternalLinks++;
+						}
+					} else if (Connector.class.isAssignableFrom(content.getClass())) {
+						Connector connector = Connector.class.cast(content);
+						EList<ConnectorEnd> connectedEnds = connector.getEnds();
+						for (ConnectorEnd connectedEnd : connectedEnds) {
+							if (connectedEnd.getPartWithPort() != null
+									&& (connectedEnd.getPartWithPort().hashCode() == first.hashCode()
+											|| connectedEnd.getPartWithPort().hashCode() == second.hashCode())) {
+								relationContainsFirstElement = true;
+							} else if (connectedEnd.hashCode() == first.hashCode()
+									|| connectedEnd.hashCode() == second.hashCode()) {
+								relationContainsSecondElement = true;
+							}
+						}
+						if (relationContainsFirstElement && relationContainsSecondElement) {
+							numberofInternalLinks++;
+						}
+					}
+				}
+			}
+			if (numberofInternalLinks > 0) {
+				return true;
+			}
+		}
+		return false;
+
+	}
+
+	@Override
+	public String generateMarkerMessage(IResourceDelta delta, String wrapperUri) {
+		return null;
+	}
+}
diff --git a/org.eclipse.capra.handler.cdt/.classpath b/bundles/org.eclipse.capra.ui.cdt/.classpath
similarity index 100%
copy from org.eclipse.capra.handler.cdt/.classpath
copy to bundles/org.eclipse.capra.ui.cdt/.classpath
diff --git a/bundles/org.eclipse.capra.ui.cdt/.project b/bundles/org.eclipse.capra.ui.cdt/.project
new file mode 100644
index 0000000..6b3aed8
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.cdt</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/org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.cdt/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs
copy to bundles/org.eclipse.capra.ui.cdt/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..589b918
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.cdt;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-Activator: org.eclipse.capra.ui.cdt.Activator
+Bundle-Vendor: %Bundle-Vendor
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jface,
+ org.eclipse.ui.workbench,
+ org.eclipse.capra.ui,
+ org.eclipse.capra.handler.cdt
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.capra.ui.cdt/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.cdt/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..71ca2da
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/OSGI-INF/l10n/bundle.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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.cdt
+page.name = C/C++ traces
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra CDT Handler UI Contributions
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.cdt/build.properties b/bundles/org.eclipse.capra.ui.cdt/build.properties
new file mode 100644
index 0000000..f197967
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/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,\
+               OSGI-INF/l10n/bundle.properties
diff --git a/bundles/org.eclipse.capra.ui.cdt/plugin.xml b/bundles/org.eclipse.capra.ui.cdt/plugin.xml
new file mode 100644
index 0000000..10cd005
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/plugin.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer
+            class="org.eclipse.capra.ui.cdt.preferences.CDTPreferenceInitializer">
+      </initializer>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.capra.ui.preferences.CapraPreferences"
+            class="org.eclipse.capra.ui.cdt.preferences.CDTPreferencePage"
+            id="org.eclipse.capra.ui.cdt.preferencePage"
+            name="%page.name">
+      </page>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.cdt/pom.xml b/bundles/org.eclipse.capra.ui.cdt/pom.xml
new file mode 100644
index 0000000..baed2b3
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.cdt</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/Activator.java b/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/Activator.java
new file mode 100644
index 0000000..b2db247
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/Activator.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.capra.ui.cdt"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/preferences/CDTPreferenceInitializer.java b/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/preferences/CDTPreferenceInitializer.java
new file mode 100644
index 0000000..ff3ce62
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/preferences/CDTPreferenceInitializer.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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.cdt.preferences;
+
+import org.eclipse.capra.handler.cdt.preferences.CDTPreferences;
+import org.eclipse.capra.ui.cdt.Activator;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class CDTPreferenceInitializer extends AbstractPreferenceInitializer {
+
+	@Override
+	public void initializeDefaultPreferences() {
+        IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+        store.setDefault(CDTPreferences.ANNOTATE_CDT, CDTPreferences.ANNOTATE_CDT_DEFAULT);
+        store.setDefault(CDTPreferences.ANNOTATE_CDT_TAG, CDTPreferences.ANNOTATE_CDT_TAG_DEFAULT);
+        store.setDefault(CDTPreferences.ANNOTATE_CDT_TAG_PREFIX, CDTPreferences.ANNOTATE_CDT_TAG_PREFIX_DEFAULT);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/preferences/CDTPreferencePage.java b/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/preferences/CDTPreferencePage.java
new file mode 100644
index 0000000..2fdaea1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.cdt/src/org/eclipse/capra/ui/cdt/preferences/CDTPreferencePage.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.cdt.preferences;
+
+import org.eclipse.capra.handler.cdt.preferences.CDTPreferences;
+import org.eclipse.capra.ui.cdt.Activator;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class CDTPreferencePage extends FieldEditorPreferencePage
+	implements IWorkbenchPreferencePage {
+
+	public CDTPreferencePage() {
+		super(GRID);
+	}
+
+	@Override
+	protected void createFieldEditors() {
+		addField(new BooleanFieldEditor(
+				CDTPreferences.ANNOTATE_CDT,
+				"Annotate C source code",
+				getFieldEditorParent()));
+
+		addField(new StringFieldEditor(
+				CDTPreferences.ANNOTATE_CDT_TAG,
+				"Annotation tag",
+				getFieldEditorParent()));
+
+		addField(new StringFieldEditor(
+				CDTPreferences.ANNOTATE_CDT_TAG_PREFIX,
+				"Doxygen tag prefix",
+				getFieldEditorParent()));
+}
+
+	@Override
+	public void init(IWorkbench workbench) {
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(null); // TODO?
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.drive/.classpath b/bundles/org.eclipse.capra.ui.drive/.classpath
new file mode 100644
index 0000000..0f05a44
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/.classpath
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-oauth-client-jetty-1.22.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-api-services-drive-v3-rev61-1.22.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-api-client-1.22.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-http-client-1.22.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-http-client-jackson2-1.22.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-oauth-client-1.22.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/google-oauth-client-java6-1.22.0.jar"/>
+	<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="output" path="bin"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.ui.drive/.project b/bundles/org.eclipse.capra.ui.drive/.project
new file mode 100644
index 0000000..64d5982
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.drive</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/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.drive/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
copy to bundles/org.eclipse.capra.ui.drive/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..639eeb9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/META-INF/MANIFEST.MF
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: C%Bundle-Vendor
+Bundle-SymbolicName: org.eclipse.capra.ui.drive;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.equinox.registry,
+ org.eclipse.capra.ui.office,
+ org.eclipse.ui,
+ com.fasterxml.jackson.core.jackson-core,
+ org.mortbay.jetty.server,
+ org.mortbay.jetty.util,
+ javax.servlet
+Bundle-ClassPath: .,
+ lib/google-api-client-1.22.0.jar,
+ lib/google-http-client-1.22.0.jar,
+ lib/google-http-client-jackson2-1.22.0.jar,
+ lib/google-oauth-client-java6-1.22.0.jar,
+ lib/google-oauth-client-1.22.0.jar,
+ lib/google-api-services-drive-v3-rev61-1.22.0.jar,
+ lib/google-oauth-client-jetty-1.22.0.jar
+Import-Package: org.slf4j
diff --git a/bundles/org.eclipse.capra.ui.drive/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.drive/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..a663adb
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# 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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.drive
+category.name = Capra Traceability
+view.name = Capra Google Drive Selection
+command.name = Open in browser
+command.label = Open in browser
+command.name.0 = Open in Capra Office Selection View
+command.label.0 = Open in Capra Office Selection View
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Office Handler (Google Drive) UI Contributions
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.drive/build.properties b/bundles/org.eclipse.capra.ui.drive/build.properties
new file mode 100644
index 0000000..9f3cbd4
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/build.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# 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,\
+               lib/google-oauth-client-java6-1.22.0.jar,\
+               lib/google-oauth-client-1.22.0.jar,\
+               lib/google-http-client-jackson2-1.22.0.jar,\
+               lib/google-http-client-1.22.0.jar,\
+               lib/google-api-client-1.22.0.jar,\
+               lib/google-api-services-drive-v3-rev61-1.22.0.jar,\
+               lib/google-oauth-client-jetty-1.22.0.jar,\
+               OSGI-INF/l10n/bundle.properties
+source.. = src/
diff --git a/bundles/org.eclipse.capra.ui.drive/client_secret.json b/bundles/org.eclipse.capra.ui.drive/client_secret.json
new file mode 100644
index 0000000..13c9b57
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/client_secret.json
@@ -0,0 +1 @@
+{"installed":{"client_id":"62584412035-1n3is8571r3u2rte2heui056pjcu5m2t.apps.googleusercontent.com","project_id":"spartan-context-162213","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"OoT7kHga7GGiOxYiNFhIBdO7","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.drive/icons/excel.png b/bundles/org.eclipse.capra.ui.drive/icons/excel.png
new file mode 100644
index 0000000..850d131
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/icons/excel.png
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-api-client-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-api-client-1.22.0.jar
new file mode 100644
index 0000000..b9c2b2d
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-api-client-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-api-services-drive-v3-rev61-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-api-services-drive-v3-rev61-1.22.0.jar
new file mode 100644
index 0000000..2d285d8
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-api-services-drive-v3-rev61-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-http-client-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-http-client-1.22.0.jar
new file mode 100644
index 0000000..a31a9b1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-http-client-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-http-client-jackson2-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-http-client-jackson2-1.22.0.jar
new file mode 100644
index 0000000..64f0c15
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-http-client-jackson2-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-1.22.0.jar
new file mode 100644
index 0000000..93d284d
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-java6-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-java6-1.22.0.jar
new file mode 100644
index 0000000..956f263
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-java6-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-jetty-1.22.0.jar b/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-jetty-1.22.0.jar
new file mode 100644
index 0000000..25b5ac5
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/lib/google-oauth-client-jetty-1.22.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.drive/plugin.xml b/bundles/org.eclipse.capra.ui.drive/plugin.xml
new file mode 100644
index 0000000..87dc5c3
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/plugin.xml
@@ -0,0 +1,68 @@
+<!--
+    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
+ -->
+<plugin>
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            id="org.eclipse.capra.ui.views"
+			name="%category.name">
+      </category>
+	  <view
+			category="org.eclipse.capra.ui.views"
+			class="org.eclipse.capra.ui.drive.CapraGoogleDriveView"
+			icon="platform:/plugin/org.eclipse.capra.ui/icons/selectionView.png"
+			id="org.eclipse.capra.ui.drive.CapraGoogleDriveView"
+			name="%view.name">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+			id="org.eclipse.capra.ui.drive.openInBrowser"
+            name="%command.name">
+      </command>
+      <command
+            id="org.eclipse.capra.ui.drive.openInOfficeView"
+            name="%command.name.0">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            allPopups="false"
+            locationURI="popup:org.eclipse.capra.ui.drive.CapraGoogleDriveView?after=additions">
+         <command
+               commandId="org.eclipse.capra.ui.drive.openInBrowser"
+               label="%command.label"
+               style="push">
+         </command>
+         <command
+               commandId="org.eclipse.capra.ui.drive.openInOfficeView"
+               label="%command.label.0"
+               style="push">
+         </command>
+      </menuContribution>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.capra.ui.drive.OpenInBrowserHandler"
+            commandId="org.eclipse.capra.ui.drive.openInBrowser">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.drive.OpenInOfficeViewHandler"
+            commandId="org.eclipse.capra.ui.drive.openInOfficeView">
+      </handler>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.drive/pom.xml b/bundles/org.eclipse.capra.ui.drive/pom.xml
new file mode 100644
index 0000000..86a7aa6
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.drive</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/CapraGoogleDriveView.java b/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/CapraGoogleDriveView.java
new file mode 100644
index 0000000..4f229d1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/CapraGoogleDriveView.java
@@ -0,0 +1,296 @@
+/*******************************************************************************
+ * 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.drive;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.capra.ui.office.views.OfficeView;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.api.client.auth.oauth2.Credential;
+import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
+import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
+import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
+import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
+import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
+import com.google.api.client.http.HttpTransport;
+import com.google.api.client.json.JsonFactory;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.client.util.IOUtils;
+import com.google.api.client.util.store.FileDataStoreFactory;
+import com.google.api.services.drive.Drive;
+import com.google.api.services.drive.DriveScopes;
+import com.google.api.services.drive.model.File;
+
+/**
+ * Provides a Capra perspective view for displaying the contents of Google
+ * sheets from Google Drive.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraGoogleDriveView extends ViewPart {
+
+	private static final Logger LOG = LoggerFactory.getLogger(CapraGoogleDriveView.class);
+
+	/**
+	 * The actual view that contains the contents of the documents.
+	 */
+	private TableViewer viewer;
+
+	/**
+	 * Contains the File objects that are listed in the view.
+	 */
+	private List<File> selection = new ArrayList<File>();
+
+	/**
+	 * Application name for authentication purposes.
+	 */
+	private static final String APPLICATION_NAME = "CapraDrive";
+
+	/**
+	 * Directory to store user credentials for this application.
+	 */
+	private static final java.io.File DATA_STORE_DIR_DRIVE = new java.io.File(System.getProperty("user.home"),
+			".capra-drive-credentials" + java.io.File.separator + "drive.googleapis.capra-drive");
+
+	private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
+	private static FileDataStoreFactory DATA_STORE_FACTORY_DRIVE;
+	private static HttpTransport HTTP_TRANSPORT;
+	private static Drive driveService;
+
+	static {
+		try {
+			HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
+			DATA_STORE_FACTORY_DRIVE = new FileDataStoreFactory(DATA_STORE_DIR_DRIVE);
+		} catch (IOException | GeneralSecurityException ex) {
+			LOG.warn("Could not establish connection to Google services: {}", ex.getLocalizedMessage());
+		}
+	}
+
+	private GoogleClientSecrets getClientSecrets() {
+		GoogleClientSecrets googleClientSecrets = null;
+		InputStream in = CapraGoogleDriveView.class.getResourceAsStream("/client_secret.json");
+		try {
+			googleClientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
+		} catch (IOException ex) {
+			LOG.warn("Could not load Google client secrets: {}", ex.getLocalizedMessage());
+		}
+		return googleClientSecrets;
+	}
+
+	/**
+	 * Creates an authorized Credential object.
+	 *
+	 * @return an authorized Credential object.
+	 * @throws IOException
+	 */
+	private Credential authorizeDrive() throws IOException {
+		// Load client secrets.
+		GoogleClientSecrets clientSecrets = getClientSecrets();
+
+		// Build flow and trigger user authorization request.
+		GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY,
+				clientSecrets, Arrays.asList(DriveScopes.DRIVE)).setDataStoreFactory(DATA_STORE_FACTORY_DRIVE)
+						.setAccessType("offline").build();
+		Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
+		// Credentials saved to " + DATA_STORE_DIR_DRIVE.getAbsolutePath()
+
+		return credential;
+	}
+
+	/**
+	 * Build and return an authorized Drive client service.
+	 *
+	 * @return an authorized Drive client service
+	 * @throws IOException
+	 */
+	private Drive getAuthorizedDriveService() throws IOException {
+		Credential credential = authorizeDrive();
+		return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
+	}
+
+	/**
+	 * Fills the Capra Drive view with Google sheet files from the Drive
+	 *
+	 * @param driveService
+	 *            authorized Drive client service
+	 */
+	private void fillSelection() {
+		try {
+			driveService = getAuthorizedDriveService();
+			List<File> files = driveService.files().list().setQ("mimeType='application/vnd.google-apps.spreadsheet'")
+					.setSpaces("drive").setFields("nextPageToken, files(id, name)").execute().getFiles();
+			if (files != null && files.size() > 0)
+				for (File file : files)
+					selection.add(file);
+			viewer.refresh();
+		} catch (IOException ex) {
+			LOG.warn("Could not read file list from Google Drive: {}", ex.getLocalizedMessage());
+		}
+	}
+
+	/**
+	 * The content provider class used by the view.
+	 */
+	class ViewContentProvider implements IStructuredContentProvider {
+
+		@Override
+		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public Object[] getElements(Object parent) {
+			return selection.toArray();
+		}
+	}
+
+	/**
+	 * The label provider class used by the view.
+	 */
+	static class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+		private ImageDescriptor imgDesc = AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.capra.ui.drive", "icons/excel.png");
+		private Image image = imgDesc.createImage();
+
+		@Override
+		public String getText(Object obj) {
+			if (obj instanceof File)
+				return ((File) obj).getName();
+			else
+				return obj.toString();
+		};
+
+		@Override
+		public String getColumnText(Object obj, int index) {
+			return getText(obj);
+		}
+
+		@Override
+		public Image getColumnImage(Object obj, int index) {
+			return getImage(obj);
+		}
+
+		@Override
+		public Image getImage(Object obj) {
+			return image;
+		}
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+
+		viewer = new TableViewer(parent);
+		viewer.setContentProvider(new ViewContentProvider());
+		viewer.setLabelProvider(new ViewLabelProvider());
+		viewer.setInput(getViewSite());
+
+		getSite().setSelectionProvider(viewer);
+
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				IStructuredSelection eventSelection = (IStructuredSelection) ((DoubleClickEvent) event).getSelection();
+
+				if (eventSelection.getFirstElement() instanceof String)
+					fillSelection();
+				else {
+					File file = (File) eventSelection.getFirstElement();
+					String spreadSheetId = file.getId();
+					if (!spreadSheetId.isEmpty())
+						displaySheetInOfficeView(spreadSheetId);
+				}
+			}
+		});
+
+		viewer.add("Double click to fetch sheets from Drive.");
+		hookContextMenu();
+	}
+
+	/**
+	 * Getter for the authorized drive service object.
+	 *
+	 * @return authorized drive service
+	 */
+	public static Drive getDriveService() {
+		return driveService;
+	}
+
+	/**
+	 * Displays the sheet with the provided ID in the Capra Office view.
+	 *
+	 * @param spreadSheetId
+	 *            the ID of the sheet
+	 */
+	public static void displaySheetInOfficeView(String spreadSheetId) {
+		try {
+			java.io.File tempFile = java.io.File.createTempFile("tmpFile", ".xlsx");
+			InputStream in = driveService.files()
+					.export(spreadSheetId, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
+					.executeAsInputStream();
+			IOUtils.copy(in, new FileOutputStream(tempFile));
+			OfficeView.getOpenedView().parseExcelDocument(tempFile, spreadSheetId, null);
+		} catch (IOException ex) {
+			LOG.warn("Could not get data for selected sheet from Google services: {}", ex.getLocalizedMessage());
+		}
+	}
+
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			@Override
+			public void menuAboutToShow(IMenuManager manager) {
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	@Override
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/OpenInBrowserHandler.java b/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/OpenInBrowserHandler.java
new file mode 100644
index 0000000..29563eb
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/OpenInBrowserHandler.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * 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.drive;
+
+import java.awt.Desktop;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import com.google.api.services.drive.model.File;
+
+/**
+ * A handler for displaying the selected Google sheet in the default browser.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OpenInBrowserHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
+		IWorkbenchPage activePage = window.getActivePage();
+		ISelection selection = activePage.getSelection();
+		if (selection instanceof IStructuredSelection) {
+			File driveFile = (File) ((IStructuredSelection) selection).getFirstElement();
+			try {
+				Desktop.getDesktop().browse(new URI("https://docs.google.com/spreadsheets/d/" + driveFile.getId()));
+			} catch (IOException | URISyntaxException e) {
+				e.printStackTrace();
+			}
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/OpenInOfficeViewHandler.java b/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/OpenInOfficeViewHandler.java
new file mode 100644
index 0000000..b398373
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.drive/src/org/eclipse/capra/ui/drive/OpenInOfficeViewHandler.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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.drive;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import com.google.api.services.drive.model.File;
+
+/**
+ * A handler for displaying the selected Google sheet in the Capra Office view.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OpenInOfficeViewHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
+		IWorkbenchPage activePage = window.getActivePage();
+		ISelection selection = activePage.getSelection();
+		if (selection instanceof IStructuredSelection) {
+			File driveFile = (File) ((IStructuredSelection) selection).getFirstElement();
+			CapraGoogleDriveView.displaySheetInOfficeView(driveFile.getId());
+		}
+		return null;
+	}
+}
diff --git a/org.eclipse.capra.handler.cdt/.classpath b/bundles/org.eclipse.capra.ui.jdt/.classpath
similarity index 100%
copy from org.eclipse.capra.handler.cdt/.classpath
copy to bundles/org.eclipse.capra.ui.jdt/.classpath
diff --git a/bundles/org.eclipse.capra.ui.jdt/.project b/bundles/org.eclipse.capra.ui.jdt/.project
new file mode 100644
index 0000000..6251205
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.jdt</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/org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.jdt/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.handler.cdt/.settings/org.eclipse.jdt.core.prefs
copy to bundles/org.eclipse.capra.ui.jdt/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1be698f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.jdt;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-Activator: org.eclipse.capra.ui.jdt.Activator
+Bundle-Vendor: %Bundle-Vendor
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jface,
+ org.eclipse.ui.workbench,
+ org.eclipse.capra.ui,
+ org.eclipse.capra.handler.jdt
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.capra.ui.jdt/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.jdt/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..d08b8b8
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/OSGI-INF/l10n/bundle.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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.jdt
+page.name = Java traces
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra JDT Handler UI Contributions
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.jdt/build.properties b/bundles/org.eclipse.capra.ui.jdt/build.properties
new file mode 100644
index 0000000..f197967
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/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,\
+               OSGI-INF/l10n/bundle.properties
diff --git a/bundles/org.eclipse.capra.ui.jdt/plugin.xml b/bundles/org.eclipse.capra.ui.jdt/plugin.xml
new file mode 100644
index 0000000..14d202f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/plugin.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer
+            class="org.eclipse.capra.ui.jdt.preferences.JDTPreferenceInitializer">
+      </initializer>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.capra.ui.preferences.CapraPreferences"
+            class="org.eclipse.capra.ui.jdt.preferences.JDTPreferencePage"
+            id="org.eclipse.capra.ui.jdt.preferencePage"
+            name="%page.name">
+      </page>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.jdt/pom.xml b/bundles/org.eclipse.capra.ui.jdt/pom.xml
new file mode 100644
index 0000000..41c8852
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.jdt</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/Activator.java b/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/Activator.java
new file mode 100644
index 0000000..62567df
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/Activator.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * 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.jdt;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.capra.ui.cdt"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/preferences/JDTPreferenceInitializer.java b/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/preferences/JDTPreferenceInitializer.java
new file mode 100644
index 0000000..41cba77
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/preferences/JDTPreferenceInitializer.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * 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.jdt.preferences;
+
+import org.eclipse.capra.handler.jdt.preferences.JDTPreferences;
+import org.eclipse.capra.ui.jdt.Activator;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class JDTPreferenceInitializer extends AbstractPreferenceInitializer {
+
+	@Override
+	public void initializeDefaultPreferences() {
+        IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+        store.setDefault(JDTPreferences.ANNOTATE_JDT, JDTPreferences.ANNOTATE_JDT_DEFAULT);
+        store.setDefault(JDTPreferences.ANNOTATE_JDT_TAG, JDTPreferences.ANNOTATE_JDT_TAG_DEFAULT);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/preferences/JDTPreferencePage.java b/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/preferences/JDTPreferencePage.java
new file mode 100644
index 0000000..1af06b9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.jdt/src/org/eclipse/capra/ui/jdt/preferences/JDTPreferencePage.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * 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.jdt.preferences;
+
+import org.eclipse.capra.handler.jdt.preferences.JDTPreferences;
+import org.eclipse.capra.ui.jdt.Activator;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+public class JDTPreferencePage extends FieldEditorPreferencePage
+	implements IWorkbenchPreferencePage {
+
+	public JDTPreferencePage() {
+		super(GRID);
+	}
+
+	@Override
+	protected void createFieldEditors() {
+		addField(new BooleanFieldEditor(
+				JDTPreferences.ANNOTATE_JDT,
+				"Annotate Java source code",
+				getFieldEditorParent()));
+
+		addField(new StringFieldEditor(
+				JDTPreferences.ANNOTATE_JDT_TAG,
+				"Annotation tag",
+				getFieldEditorParent()));
+	}
+
+	@Override
+	public void init(IWorkbench workbench) {
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+		setDescription(null); // TODO?
+	}
+
+}
diff --git a/org.eclipse.capra.ui.notification/.classpath b/bundles/org.eclipse.capra.ui.notification/.classpath
similarity index 100%
rename from org.eclipse.capra.ui.notification/.classpath
rename to bundles/org.eclipse.capra.ui.notification/.classpath
diff --git a/org.eclipse.capra.ui.notification/.gitignore b/bundles/org.eclipse.capra.ui.notification/.gitignore
similarity index 100%
rename from org.eclipse.capra.ui.notification/.gitignore
rename to bundles/org.eclipse.capra.ui.notification/.gitignore
diff --git a/org.eclipse.capra.ui.notification/.project b/bundles/org.eclipse.capra.ui.notification/.project
similarity index 100%
rename from org.eclipse.capra.ui.notification/.project
rename to bundles/org.eclipse.capra.ui.notification/.project
diff --git a/org.eclipse.capra.ui.notification/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.notification/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.ui.notification/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.ui.notification/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..87010e0
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.notification;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.capra.core,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.emf.common,
+ org.eclipse.emf.ecore,
+ org.eclipse.ui.ide
+Import-Package: org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.resource,
+ org.eclipse.emf.ecore.resource.impl,
+ org.eclipse.emf.edit.ui.util,
+ org.slf4j
+Bundle-Vendor: %Bundle-Vendor
+Export-Package: org.eclipse.capra.ui.notification
diff --git a/bundles/org.eclipse.capra.ui.notification/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.notification/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..5f9aff3
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/OSGI-INF/l10n/bundle.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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.notification
+extension.name = Capra Issues
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Notification Support
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.notification/build.properties b/bundles/org.eclipse.capra.ui.notification/build.properties
new file mode 100644
index 0000000..f197967
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/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,\
+               OSGI-INF/l10n/bundle.properties
diff --git a/bundles/org.eclipse.capra.ui.notification/plugin.xml b/bundles/org.eclipse.capra.ui.notification/plugin.xml
new file mode 100644
index 0000000..505108e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/plugin.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.ui.ide.markerResolution">
+      <markerResolutionGenerator
+            class="org.eclipse.capra.ui.notification.MarkerResolutionGenerator"
+            markerType="org.eclipse.capra.ui.notification.capraProblemMarker">
+      </markerResolutionGenerator>
+   </extension>
+   <extension
+         id="org.eclipse.capra.ui.notification.capraProblemMarker"
+         name="%extension.name"
+         point="org.eclipse.core.resources.markers">
+      <super
+            type="org.eclipse.core.resources.problemmarker">
+      </super>
+      <persistent
+            value="true">
+      </persistent>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.notification/pom.xml b/bundles/org.eclipse.capra.ui.notification/pom.xml
new file mode 100644
index 0000000..00a024e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.notification</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/CapraNotificationHelper.java b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/CapraNotificationHelper.java
new file mode 100644
index 0000000..68b2274
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/CapraNotificationHelper.java
@@ -0,0 +1,243 @@
+/*******************************************************************************
+ * 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.notification;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Contains methods that support the Capra notification (marker) solution.
+ *
+ * @author Dusan Kalanj
+ */
+public class CapraNotificationHelper {
+	
+	private static final Logger LOG = LoggerFactory.getLogger(CapraNotificationHelper.class);
+
+	/**
+	 * ID of Capra custom marker for reporting a generic problem.
+	 */
+	public static final String CAPRA_PROBLEM_MARKER_ID = "org.eclipse.capra.ui.notification.capraProblemMarker";
+
+	/**
+	 * Custom enum that describes possible changes made to a traced element.
+	 */
+	public enum IssueType {
+		RENAMED("renamed"), MOVED("moved"), DELETED("deleted"), CHANGED("changed"), ADDED("added");
+
+		private final String value;
+
+		private IssueType(String value) {
+			this.value = value;
+		}
+
+		public String getValue() {
+			return value;
+		}
+	}
+
+	/**
+	 * Job ID for the capra notification solution.
+	 */
+	public static final String NOTIFICATION_JOB = "CapraNotificationJob";
+
+	/**
+	 * Key to be used to specify IssueType value in markerInfo HashMap
+	 */
+	public static final String ISSUE_TYPE = "issueType";
+
+	/**
+	 * Key to be used to specify oldArtifactUri value in markerInfo HashMap
+	 */
+	public static final String OLD_URI = "oldArtifactUri";
+
+	/**
+	 * Key to be used to specify newArtifactUri value in markerInfo HashMap
+	 */
+	public static final String NEW_URI = "newArtifactUri";
+
+	/**
+	 * Key to be used to specify newArtifactName value in markerInfo HashMap
+	 */
+	public static final String NEW_NAME = "newArtifactName";
+
+	/**
+	 * Key to be used to specify message value in markerInfo HashMap
+	 */
+	public static final String MESSAGE = "message";
+
+	private CapraNotificationHelper() {
+		// Deliberately do nothing
+	}
+
+	// TODO necessary to specify all the fields that have to be filled out in
+	// order for the method to work! Maybe make a custom exception for when
+	// something is not filled out?
+	/**
+	 * Creates a Capra marker from the provided information about the artifact
+	 * and the change that occurred.
+	 * 
+	 * @param markerInfo
+	 *            contains attributes that are to be assigned to the created
+	 *            marker
+	 * @param container
+	 *            file that the created marker will be attached to
+	 */
+	public static void createCapraMarker(Map<String, String> markerInfo, IFile container) {
+
+		try {
+			String newMarkerIssue = markerInfo.get(ISSUE_TYPE);
+			String newMarkerUri = markerInfo.get(OLD_URI);
+
+			IMarker[] existingMarkers = container.findMarkers(CAPRA_PROBLEM_MARKER_ID, false, 0);
+			for (IMarker existingMarker : existingMarkers) {
+				String existingMarkerIssue = existingMarker.getAttribute(ISSUE_TYPE, null);
+				String existingMarkerUri = existingMarker.getAttribute(OLD_URI, null);
+
+				if (existingMarkerUri.equals(newMarkerUri) && existingMarkerIssue.equals(newMarkerIssue)) {
+					existingMarker.delete();
+				}
+				// The code bellow deletes the marker that signifies a delete
+				// operation in case the new marker signifies a rename/move
+				// operation. The only thing that doesn't work with this
+				// solution is when a user renames/moves a file, renames/moves
+				// it back, and then deletes it. Markers will appear correctly
+				// for the first operation, but they will also stay there, if
+				// the user then deletes the object (there will be two markers,
+				// rename and delete). This problem disappears if automatic
+				// marker removal is implemented (already done for EMF).
+				if (existingMarkerUri.equals(newMarkerUri) && existingMarkerIssue.equals(IssueType.DELETED.getValue())
+						&& newMarkerIssue.matches(IssueType.RENAMED.getValue() + "|" + IssueType.MOVED.getValue())) {
+					existingMarker.delete();
+				}
+				if (existingMarkerUri.equals(newMarkerUri) && newMarkerIssue.equalsIgnoreCase(IssueType.ADDED.getValue())) {
+					existingMarker.delete();
+				}
+			}
+			
+			String message = markerInfo.get(MESSAGE);
+			if (message == null || message.isEmpty()) {
+				return;
+			}
+			IMarker marker = container.createMarker(CAPRA_PROBLEM_MARKER_ID);
+			marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
+			marker.setAttribute(IMarker.MESSAGE, message);
+			markerInfo.remove(MESSAGE);
+
+			for (Entry<String, String> entry : markerInfo.entrySet()) {
+				marker.setAttribute(entry.getKey(), entry.getValue());
+			}
+		} catch (CoreException e) {
+			if (container.exists()) {
+				LOG.warn("CoreException occured when creating a marker even though container exists.", e);
+			}
+		}
+	}
+
+	/**
+	 * Deletes an existing marker.
+	 * 
+	 * @param uri
+	 *            the uri of the artifact/element that the marker points to
+	 * @param issues
+	 *            an array of issues - only markers that describe the provided
+	 *            issues will be deleted. If null is provided, all will be
+	 *            deleted.
+	 * @param containingFile
+	 *            the file that contains the marker to be deleted
+	 */
+	public static void deleteCapraMarker(String uri, IssueType[] issues, IFile containingFile) {
+		try {
+			IMarker[] markers = containingFile.findMarkers(CAPRA_PROBLEM_MARKER_ID, true, 0);
+
+			for (IMarker marker : markers) {
+				String existingMarkerUri = marker.getAttribute(OLD_URI, null);
+				String existingMarkerIssue = marker.getAttribute(ISSUE_TYPE, null);
+
+				if (existingMarkerUri.equals(uri)) {
+					if (issues == null) {
+						marker.delete();
+					} else {
+						for (IssueType issue : issues) {
+							if (existingMarkerIssue.equals(issue.getValue())) {
+								marker.delete();
+							}
+						}
+					}
+				}
+			}
+		} catch (CoreException e) {
+			LOG.warn("CoreException occured when deleting a marker.", e);
+		}
+	}
+
+	/**
+	 * Converts the platform URI into a file URI. Returns the same object if it
+	 * already is a file URI.
+	 * 
+	 * @param uri
+	 *            the URI to be converted
+	 * @return the same URI in a file scheme
+	 */
+	public static URI convertToFileUri(URI uri) {
+
+		if (!uri.isPlatformResource()) {
+			return uri;
+		} else {
+			String platformUri = uri.toPlatformString(true);
+			IPath filePath = ResourcesPlugin.getWorkspace().getRoot().findMember(platformUri).getRawLocation();
+			URI fileUri = URI.createFileURI(filePath.toString());
+
+			String fragment = uri.fragment();
+			if (fragment != null) {
+				fileUri = fileUri.appendFragment(fragment);
+			}
+			return fileUri;
+		}
+	}
+
+	/**
+	 * Gets the file-scheme URI of an EObject.
+	 * 
+	 * @param eObject
+	 *            the eObject in question
+	 * @return the URI of the eObject with a file scheme
+	 */
+	public static URI getFileUri(EObject eObject) {
+		return convertToFileUri(EcoreUtil.getURI(eObject));
+	}
+
+	/**
+	 * Gets the file-scheme URI of a resource.
+	 * 
+	 * @param resource
+	 *            the resource in question
+	 * @return the URI of the resource with a file scheme
+	 */
+	public static URI getFileUri(Resource resource) {
+		return convertToFileUri(resource.getURI());
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/ChangeQuickFix.java b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/ChangeQuickFix.java
new file mode 100644
index 0000000..3b60d7b
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/ChangeQuickFix.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.notification;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.ui.IMarkerResolution;
+
+/**
+ * Removes the marker associated with the trace link if the user decides to keep
+ * the tracelink without any modifications
+ * 
+ * @author Salome Maro
+ */
+public class ChangeQuickFix implements IMarkerResolution {
+
+	private String label;
+
+	public ChangeQuickFix(String label) {
+		this.label = label;
+	}
+
+	@Override
+	public String getLabel() {
+		return label;
+	}
+
+	@Override
+	public void run(IMarker marker) {
+		try {
+			marker.delete();
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/DeleteQuickFix.java b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/DeleteQuickFix.java
new file mode 100644
index 0000000..ececf7f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/DeleteQuickFix.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * 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.notification;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+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.helpers.ExtensionPointHelper;
+import org.eclipse.capra.core.helpers.TraceHelper;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ui.IMarkerResolution;
+
+/**
+ * A quick fix to delete a trace link if one of the linked objects is no longer
+ * available.
+ *
+ * @author Michael Warne
+ */
+public class DeleteQuickFix implements IMarkerResolution {
+	ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	private String label;
+
+	DeleteQuickFix(String label) {
+		this.label = label;
+	}
+
+	@Override
+	public String getLabel() {
+		return label;
+	}
+
+	@Override
+	public void run(IMarker marker) {
+
+		ResourceSet resourceSet = new ResourceSetImpl();
+		List<Connection> toDelete = new ArrayList<>();
+		TracePersistenceAdapter tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject traceModel = tracePersistenceAdapter.getTraceModel(resourceSet);
+		TraceHelper traceHelper = new TraceHelper(traceModel);
+		TraceMetaModelAdapter traceMetamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		EObject artifactModel = tracePersistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+
+		// get all artifacts
+		List<EObject> artifacts = artifactAdapter.getAllArtifacts(artifactModel);
+
+		String artifactContainerFileName = artifactModel.eResource().getURI().lastSegment();
+		String markerContainerFileName = new File(marker.getResource().toString()).getName();
+		String markerUri = marker.getAttribute(CapraNotificationHelper.OLD_URI, null);
+
+		if (markerContainerFileName.equals(artifactContainerFileName)) {
+			// The element that the marker points to is a Capra artifact.
+			int index = -1;
+			for (EObject aw : artifacts) {
+				if (artifactAdapter.getArtifactUri(aw).equals(markerUri)) {
+					toDelete = traceMetamodelAdapter.getConnectedElements(aw, traceModel);
+				}
+				index++;
+			}
+			// delete trace links associated with deleted artifact
+			traceMetamodelAdapter.deleteTrace(toDelete, traceModel);
+			EObject toRemove = artifacts.get(index);
+			// Delete selected artifacts.
+			EcoreUtil.delete(toRemove);
+			URI artifactModelURI = EcoreUtil.getURI(artifactModel);
+			Resource resourceForArtifacts = resourceSet.createResource(artifactModelURI);
+			resourceForArtifacts.getContents().add(artifactModel);
+
+			try {
+				resourceForArtifacts.save(null);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			// delete Marker
+			try {
+				marker.delete();
+				MessageDialog.openWarning(null, "TraceLinkDeleted", "Links successfully deleted");
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
+		} else {
+			// The element that the marker points to is an EObject and is not
+			// contained in the Capra artifact model.
+			URI deletedEObjectUri = URI.createURI(markerUri);
+			for (Connection c : traceMetamodelAdapter.getAllTraceLinks(traceModel)) {
+				for (EObject item : traceHelper.getTracedElements(c)) {
+					URI itemUri = CapraNotificationHelper.getFileUri(item);
+					if (deletedEObjectUri.equals(itemUri)) {
+						toDelete.add(c);
+						break;
+					}
+				}
+			}
+
+			// Delete selected traces.
+			traceMetamodelAdapter.deleteTrace(toDelete, traceModel);
+			try {
+				marker.delete();
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/MarkerResolutionGenerator.java b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/MarkerResolutionGenerator.java
new file mode 100644
index 0000000..f3743fd
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/MarkerResolutionGenerator.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * 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.notification;
+
+import org.eclipse.capra.ui.notification.CapraNotificationHelper.IssueType;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolutionGenerator;
+
+/**
+ * Registers the possible quick fix resolutions for issues that are detected in
+ * the traced objects.
+ * 
+ * @author Michael Warne
+ */
+public class MarkerResolutionGenerator implements IMarkerResolutionGenerator {
+
+	@Override
+	public IMarkerResolution[] getResolutions(IMarker marker) {
+		try {
+			String issue = (String) marker.getAttribute(CapraNotificationHelper.ISSUE_TYPE);
+
+			if (issue.equals(IssueType.RENAMED.getValue()) || issue.equals(IssueType.MOVED.getValue()))
+				return new IMarkerResolution[] { new RenameOrMoveQuickFix("Update the EMF presentation.") };
+
+			if (issue.equals(IssueType.DELETED.getValue()))
+				return new IMarkerResolution[] { new DeleteQuickFix("Delete the affected trace link.") };
+
+			if (issue.equals(IssueType.CHANGED.getValue()))
+				return new IMarkerResolution[] { new DeleteQuickFix("Delete the affected trace link."),
+						new ChangeQuickFix("Do not update existing trace link.") };
+
+			return null;
+
+		} catch (CoreException e) {
+			return new IMarkerResolution[0];
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/RenameOrMoveQuickFix.java b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/RenameOrMoveQuickFix.java
new file mode 100644
index 0000000..0144906
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/RenameOrMoveQuickFix.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * 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.notification;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+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.helpers.ExtensionPointHelper;
+import org.eclipse.capra.core.helpers.TraceHelper;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.ui.IMarkerResolution;
+
+/**
+ * Renames and updates the properties in the associated artifact wrapper to
+ * reflect changes in the original object represented by the wrapper.
+ *
+ * @author Michael Warne
+ */
+public class RenameOrMoveQuickFix implements IMarkerResolution {
+
+	ArtifactMetaModelAdapter artifactAdapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+
+	private String label;
+
+	RenameOrMoveQuickFix(String label) {
+		this.label = label;
+	}
+
+	@Override
+	public String getLabel() {
+		return label;
+	}
+
+	@Override
+	public void run(IMarker marker) {
+		ResourceSet resourceSet = new ResourceSetImpl();
+		TracePersistenceAdapter tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject traceModel = tracePersistenceAdapter.getTraceModel(resourceSet);
+		EObject artifactModel = tracePersistenceAdapter.getArtifactWrappers(resourceSet);
+		TraceMetaModelAdapter traceMetaModelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		TraceHelper traceHelper = new TraceHelper(traceModel);
+
+		String artifactContainerFileName = artifactModel.eResource().getURI().lastSegment();
+		String markerFileName = new File(marker.getResource().toString()).getName();
+
+		if (markerFileName.equals(artifactContainerFileName)) {
+			// The element that the marker points to is a Capra artifact.
+			List<EObject> artifacts = artifactAdapter.getAllArtifacts(artifactModel);
+			String oldArtifactUri = marker.getAttribute(CapraNotificationHelper.OLD_URI, null);
+			for (EObject aw : artifacts) {
+				if (artifactAdapter.getArtifactUri(aw).equals(oldArtifactUri)) {
+					String newArtifactUri = marker.getAttribute(CapraNotificationHelper.NEW_URI, null);
+					artifactAdapter.createArtifact(artifactModel, artifactAdapter.getArtifactHandler(aw),
+							newArtifactUri, marker.getAttribute(CapraNotificationHelper.NEW_NAME, null),
+							newArtifactUri);
+					break;
+				}
+			}
+
+		} else {
+			// The element that the marker points to is an EObject and is not
+			// contained in the Capra artifact model.
+			List<Connection> traces = traceMetaModelAdapter.getAllTraceLinks(traceModel);
+			String oldArtifactUri = marker.getAttribute(CapraNotificationHelper.OLD_URI, null);
+			URI markerUri = URI.createURI(oldArtifactUri);
+			for (Connection c : traces) {
+				for (EObject item : traceHelper.getTracedElements(c)) {
+					URI itemUri = CapraNotificationHelper.getFileUri(item);
+					if (markerUri.equals(itemUri)) {
+						URI newUri = URI.createURI(marker.getAttribute(CapraNotificationHelper.NEW_URI, null));
+						((InternalEObject) item).eSetProxyURI(newUri);
+					}
+				}
+			}
+		}
+
+		// Update references inside the model (can be artifact or trace model).
+		Resource resource = resourceSet.createResource(EcoreUtil.getURI(artifactModel));
+		resource.getContents().add(artifactModel);
+
+		try {
+			resource.save(null);
+			marker.delete();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.office/.classpath b/bundles/org.eclipse.capra.ui.office/.classpath
new file mode 100644
index 0000000..52651cd
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/.classpath
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="lib" path="lib/poi-ooxml-3.10.1-filtered.jar"/>
+	<classpathentry kind="lib" path="lib/xmlbeans-2.6.0.jar"/>
+	<classpathentry kind="lib" path="lib/poi-3.10.1-20140818.jar"/>
+	<classpathentry kind="lib" path="lib/poi-ooxml-schemas-3.10.1-20140818.jar"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/bundles/org.eclipse.capra.ui.office/.project b/bundles/org.eclipse.capra.ui.office/.project
new file mode 100644
index 0000000..dc190ba
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.office</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.office/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..7a53139
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+encoding/src=UTF-8
diff --git a/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6e80039
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+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.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.m2e.core.prefs b/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c686151
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/META-INF/MANIFEST.MF
@@ -0,0 +1,30 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.office;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-ClassPath: .,
+ lib/poi-3.10.1-20140818.jar,
+ lib/poi-ooxml-schemas-3.10.1-20140818.jar,
+ lib/xmlbeans-2.6.0.jar,
+ lib/poi-ooxml-3.10.1-filtered.jar
+Bundle-Vendor: %Bundle-Vendor
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.emf.edit.ui,
+ org.eclipse.equinox.registry,
+ org.eclipse.swt,
+ org.eclipse.ui,
+ org.eclipse.jface,
+ com.google.guava,
+ org.dom4j,
+ org.eclipse.core.runtime,
+ org.eclipse.core.expressions
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.capra.ui.office,
+ org.eclipse.capra.ui.office.model,
+ org.eclipse.capra.ui.office.preferences,
+ org.eclipse.capra.ui.office.utils,
+ org.eclipse.capra.ui.office.views
+Bundle-Activator: org.eclipse.capra.ui.office.Activator
+Import-Package: org.slf4j
+
diff --git a/bundles/org.eclipse.capra.ui.office/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.office/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..c0ee92a
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,31 @@
+###############################################################################
+# 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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.office
+category.name = Capra Traceability
+view.name = Capra Office Selection
+command.name = Clear Selection
+command.label = Open File
+command.tooltip = Open the file selection dialog
+menu.label = Select Sheet
+menu.tooltip = Select the spreadsheet to work with
+command.name.0 = Show Details
+command.label.0 = Clear Selection
+command.tooltip.0 = Clear the current selection of elements
+menu.label.0 = Capra Traceability
+command.name.1 = Open File
+command.label.1 = Show Details
+command.tooltip.1 = Show the details of the selected row
+page.name = Office Documents
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Microsoft Office Handler UI Contributions
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.office/build.properties b/bundles/org.eclipse.capra.ui.office/build.properties
new file mode 100644
index 0000000..01f75a3
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/build.properties
@@ -0,0 +1,23 @@
+###############################################################################
+# 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/
+bin.includes = META-INF/,\
+               icons/,\
+               .,\
+               plugin.xml,\
+               lib/poi-3.10.1-20140818.jar,\
+               lib/poi-ooxml-3.10.1-filtered.jar,\
+               lib/poi-ooxml-schemas-3.10.1-20140818.jar,\
+               lib/xmlbeans-2.6.0.jar,\
+               OSGI-INF/
diff --git a/org.eclipse.capra.ui/icons/capra.png b/bundles/org.eclipse.capra.ui.office/icons/capra.png
similarity index 100%
copy from org.eclipse.capra.ui/icons/capra.png
copy to bundles/org.eclipse.capra.ui.office/icons/capra.png
Binary files differ
diff --git a/org.eclipse.capra.ui/icons/selectionView.png b/bundles/org.eclipse.capra.ui.office/icons/selectionView.png
similarity index 100%
copy from org.eclipse.capra.ui/icons/selectionView.png
copy to bundles/org.eclipse.capra.ui.office/icons/selectionView.png
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.office/lib/poi-3.10.1-20140818.jar b/bundles/org.eclipse.capra.ui.office/lib/poi-3.10.1-20140818.jar
new file mode 100644
index 0000000..dd1ab4a
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/lib/poi-3.10.1-20140818.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.office/lib/poi-ooxml-3.10.1-filtered.jar b/bundles/org.eclipse.capra.ui.office/lib/poi-ooxml-3.10.1-filtered.jar
new file mode 100644
index 0000000..c653b5f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/lib/poi-ooxml-3.10.1-filtered.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.office/lib/poi-ooxml-schemas-3.10.1-20140818.jar b/bundles/org.eclipse.capra.ui.office/lib/poi-ooxml-schemas-3.10.1-20140818.jar
new file mode 100644
index 0000000..f8602b5
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/lib/poi-ooxml-schemas-3.10.1-20140818.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.office/lib/xmlbeans-2.6.0.jar b/bundles/org.eclipse.capra.ui.office/lib/xmlbeans-2.6.0.jar
new file mode 100644
index 0000000..d1b6627
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/lib/xmlbeans-2.6.0.jar
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui.office/plugin.xml b/bundles/org.eclipse.capra.ui.office/plugin.xml
new file mode 100644
index 0000000..8ef7112
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/plugin.xml
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            id="org.eclipse.capra.ui.views"
+			name="%category.name">
+      </category>
+	  <view
+			category="org.eclipse.capra.ui.views"
+			class="org.eclipse.capra.ui.office.views.OfficeView"
+			icon="icons/selectionView.png"
+			id="org.eclipse.capra.ui.views.OfficeView"
+			name="%view.name">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+			id="org.eclipse.capra.ui.office.clearselection"
+            name="%command.name">
+      </command>
+      <command
+            id="org.eclipse.capra.ui.office.showdetails"
+            name="%command.name.0">
+      </command>
+      <command
+            id="org.eclipse.capra.ui.office.openfile"
+            name="%command.name.1">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.capra.ui.office.handlers.ClearSelectionHandler"
+            commandId="org.eclipse.capra.ui.office.clearselection">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.office.handlers.ShowObjectDetailsHandler"
+            commandId="org.eclipse.capra.ui.office.showdetails">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.office.handlers.OpenFileHandler"
+            commandId="org.eclipse.capra.ui.office.openfile">
+      </handler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="menu:org.eclipse.capra.ui.views.OfficeView?after=additions"> 
+         <command
+               commandId="org.eclipse.capra.ui.office.openfile"
+               label="%command.label"
+               style="push"
+               tooltip="%command.tooltip">
+         </command>
+         <menu
+               label="%menu.label"
+               tooltip="%menu.tooltip">
+            <dynamic
+                  class="org.eclipse.capra.ui.office.views.SelectSheetDynamicMenu"
+                  id="org.eclipse.capra.ui.office.views.SelectSheetDynamicMenu">
+            </dynamic>
+            <visibleWhen>
+               <reference
+                     definitionId="org.eclipse.capra.ui.office.utils.isExcelObjectExpression">
+               </reference>
+            </visibleWhen>
+         </menu>
+         <command
+               commandId="org.eclipse.capra.ui.office.clearselection"
+               label="%command.label.0"
+               style="push"
+               tooltip="%command.tooltip.0">
+            <visibleWhen>
+    		   <reference
+    		   	   definitionId="org.eclipse.capra.ui.office.utils.isViewPopulatedExpression"/>
+			</visibleWhen>
+         </command>
+      </menuContribution>
+      <menuContribution
+            locationURI="popup:net.sourceforge.plantuml.eclipse.views.PlantUmlView?after=additions">
+         <menu
+		       label="%menu.label.0"
+		       id="org.eclipse.capra.ui.contextsubmenu">
+            <command
+                  commandId="org.eclipse.capra.ui.office.showdetails"
+                  label="%command.label.1"
+                  style="push"
+                  tooltip="%command.tooltip.1">
+               <visibleWhen>
+     	          <iterate ifEmpty="false">
+                     <instanceof value="org.eclipse.capra.ui.office.model.CapraOfficeObject"/>
+                  </iterate>
+               </visibleWhen>
+            </command>
+         </menu>     
+      </menuContribution>
+   </extension>
+   <extension
+         point="org.eclipse.capra.ui.transfers">
+      <transfer
+            class="org.eclipse.capra.ui.office.utils.OfficeTransferType">
+      </transfer>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.capra.ui.preferences.CapraPreferences"
+            class="org.eclipse.capra.ui.office.preferences.OfficePreferences"
+            id="org.eclipse.capra.ui.office.preferences.OfficePreferences"
+            name="%page.name">
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer
+            class="org.eclipse.capra.ui.office.preferences.PreferenceInitializer">
+      </initializer>
+   </extension>
+   <extension
+         point="org.eclipse.core.expressions.propertyTesters">
+      <propertyTester
+            class="org.eclipse.capra.ui.office.utils.OfficePropertyTester"
+            id="org.eclipse.capra.ui.office.utils.OfficePropertyTester"
+            namespace="org.eclipse.capra.ui.office.utils"
+            properties="isViewPopulated, isExcelObject"
+            type="org.eclipse.capra.ui.office.model.CapraOfficeObject">
+      </propertyTester>
+   </extension>
+   <extension
+         point="org.eclipse.ui.services">
+      <sourceProvider
+            provider="org.eclipse.capra.ui.office.utils.OfficeSourceProvider">
+         <variable
+               name="org.eclipse.capra.ui.office.utils.capraOfficeObject"
+               priorityLevel="workbench">
+         </variable>
+      </sourceProvider>
+   </extension>
+   <extension
+         point="org.eclipse.core.expressions.definitions">
+      <definition
+            id="org.eclipse.capra.ui.office.utils.isViewPopulatedExpression">
+         <with
+               variable="org.eclipse.capra.ui.office.utils.capraOfficeObject">
+            <test
+                  forcePluginActivation="true"
+                  property="org.eclipse.capra.ui.office.utils.isViewPopulated">
+            </test>
+         </with>
+      </definition>
+   </extension>
+   <extension
+         point="org.eclipse.core.expressions.definitions">
+      <definition
+            id="org.eclipse.capra.ui.office.utils.isExcelObjectExpression">
+         <with
+               variable="org.eclipse.capra.ui.office.utils.capraOfficeObject">
+            <test
+                  forcePluginActivation="true"
+                  property="org.eclipse.capra.ui.office.utils.isExcelObject">
+            </test>
+         </with>
+      </definition>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.office/pom.xml b/bundles/org.eclipse.capra.ui.office/pom.xml
new file mode 100644
index 0000000..3b84108
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.office</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/Activator.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/Activator.java
new file mode 100644
index 0000000..65bf5d9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/Activator.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * 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.office;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * An activator class that controls the plugin life-cycle.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class Activator extends AbstractUIPlugin {
+
+	/**
+	 * The plugin ID
+	 */
+	public static final String PLUGIN_ID = "org.eclipse.capra.ui.office";
+
+	private static Activator plugin;
+
+	/**
+	 * An empty constructor
+	 */
+	public Activator() {
+	}
+
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/exceptions/CapraOfficeFileNotSupportedException.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/exceptions/CapraOfficeFileNotSupportedException.java
new file mode 100644
index 0000000..2805da5
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/exceptions/CapraOfficeFileNotSupportedException.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * 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.office.exceptions;
+
+/**
+ * An exception that is to be thrown when a non-supported file is dragged (or
+ * selected in the file dialog) into the Office view.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraOfficeFileNotSupportedException extends Exception {
+
+	private static final long serialVersionUID = -7730053652692861930L;
+	private static final String EXCEPTION_MESSAGE = "%s file type is not supported.";
+
+	/**
+	 * A default constructor.
+	 * 
+	 * @param fileType
+	 *            the type of the non-supported file that was dragged/put into
+	 *            the Office view
+	 */
+	public CapraOfficeFileNotSupportedException(String fileType) {
+		super(String.format(EXCEPTION_MESSAGE, fileType));
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/exceptions/CapraOfficeObjectNotFound.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/exceptions/CapraOfficeObjectNotFound.java
new file mode 100644
index 0000000..79a2c6e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/exceptions/CapraOfficeObjectNotFound.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * 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.office.exceptions;
+
+/**
+ * An exception that is to be thrown when an office object can't be tracked back
+ * to its native environment.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraOfficeObjectNotFound extends Exception {
+
+	private static final long serialVersionUID = -3973348630832482778L;
+	private static final String EXCEPTION_MESSAGE = "Could not find the object with ID %s in its document. Maybe the file has been edited or moved.";
+
+	/**
+	 * A default constructor. Please use {@link CapraOfficeObjectNotFound(String, Throwable)}
+	 * whenever possible to propagate the original cause.
+	 * 
+	 * @param id
+	 *            the id of the object that couldn't be found
+	 */
+	public CapraOfficeObjectNotFound(String id) {
+		super(formatExceptionMessage(id));
+	}
+	
+	/**
+	 * Creates a new exception indicating that an office object could not be found.
+	 * This is the preferred constructor since it does not hide the original cause.
+	 * 
+	 * @param id
+	 * @param cause
+	 */
+	public CapraOfficeObjectNotFound(String id, Throwable cause) {
+		super(formatExceptionMessage(id), cause);
+	}
+
+	private static String formatExceptionMessage(String id) {
+		return String.format(EXCEPTION_MESSAGE, id);
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/ClearSelectionHandler.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/ClearSelectionHandler.java
new file mode 100644
index 0000000..1f2a932
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/ClearSelectionHandler.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * 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.office.handlers;
+
+import org.eclipse.capra.ui.office.views.OfficeView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * A handler for removing all OfficeObjects from the OfficeView.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class ClearSelectionHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		OfficeView.getOpenedView().clearSelection();
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/OpenFileHandler.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/OpenFileHandler.java
new file mode 100644
index 0000000..05dcb9a
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/OpenFileHandler.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * 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.office.handlers;
+
+import org.eclipse.capra.ui.office.views.OfficeView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * A handler for opening the File-chooser dialog from the context menu.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OpenFileHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		OfficeView.getOpenedView().openFile();
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/ShowObjectDetailsHandler.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/ShowObjectDetailsHandler.java
new file mode 100644
index 0000000..86874bc
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/handlers/ShowObjectDetailsHandler.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.office.handlers;
+
+import org.eclipse.capra.ui.office.views.OfficeView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * A handler that shows the details of the selected row when the option is
+ * selected through a context menu.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class ShowObjectDetailsHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		OfficeView.getOpenedView().showObjectDetails(event, HandlerUtil.getActiveWorkbenchWindow(event).getShell());
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraExcelRow.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraExcelRow.java
new file mode 100644
index 0000000..0d49c51
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraExcelRow.java
@@ -0,0 +1,309 @@
+/*******************************************************************************
+ * 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.office.model;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.NoSuchFileException;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.poi.hssf.OldExcelFormatException;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.util.CellReference;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.eclipse.capra.ui.office.exceptions.CapraOfficeObjectNotFound;
+import org.eclipse.capra.ui.office.preferences.OfficePreferences;
+import org.eclipse.capra.ui.office.utils.CapraOfficeUtils;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSelection;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetView;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetViews;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.Files;
+
+/**
+ * This class extends the CapraOfficeObject and provides an object to describe a
+ * single MS Excel row.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraExcelRow extends CapraOfficeObject {
+
+	private static final Logger LOG = LoggerFactory.getLogger(CapraExcelRow.class);
+
+	/**
+	 * RegEx of characters (tabs, newlines, carriage returns and invisible
+	 * control characters) to be replaced with white-spaces in the Office View.
+	 */
+	private static final String LINE_BREAKS_AND_CONTROL_REQ = "[\r\n\t\\p{C}]+";
+
+	private static final DataFormatter FORMATTER = new DataFormatter();
+
+	/**
+	 * Delimiter between excel cells as displayed in the Office View.
+	 */
+	private static final String CELL_DELIMITER = " | ";
+
+	/**
+	 * A constant that is used if the row index isn't found when opening object
+	 * details.
+	 */
+	private static final int NO_ROW_INDEX = -1;
+
+	/**
+	 * A constant that is used if the last cell in the row isn't found.
+	 */
+	private static final String NO_LAST_CELL_REFERENCE = "-1";
+
+	/**
+	 * The ID of the column that is used to extract the identifier of the row
+	 * (if value is OfficePreferences.EXCEL_COLUMN_VALUE_DEFAULT, line numbers
+	 * are used as identifiers). The property is set according to the value in
+	 * the Capra preference page in Eclipse preferences.
+	 */
+	private String idColumn;
+
+	/**
+	 * A constructor that generates a new instance of CapraExcelRow where the
+	 * parent properties are extracted from the provided Excel row and File
+	 * object that contains the row.
+	 * 
+	 * @param officeFile
+	 *            a File object representing an Excel file.
+	 * @param row
+	 *            an Excel row, extracted from the provided Excel file.
+	 * @param idColumn
+	 *            the excel column that is used to extract the ID of the row
+	 */
+	public CapraExcelRow(File officeFile, Row row, String idColumn) {
+		super();
+		this.idColumn = idColumn;
+
+		String rowId = getRowIdFromExcelRow(row);
+		StringBuilder rowBuilder = new StringBuilder();
+		rowBuilder.append("ID " + rowId + ": ");
+
+		// Gather the text from the whole Excel row into one StringBuilder
+		boolean firstCellSet = false;
+		for (int j = 1; j < row.getLastCellNum(); j++) {
+			Cell cell = row.getCell(j);
+			String cellValue = FORMATTER.formatCellValue(cell);
+			if (!cellValue.isEmpty()) {
+				if (!firstCellSet) {
+					rowBuilder.append(cellValue);
+					firstCellSet = true;
+				} else {
+					rowBuilder.append(CELL_DELIMITER + cellValue);
+				}
+			}
+		}
+
+		// Set data and uri fields if any data was extracted from the row. If no
+		// data was found, data and uri will be empty strings (as defined in the
+		// CapraOfficeObject - parent object).
+		if (firstCellSet) {
+			Pattern p = Pattern.compile(LINE_BREAKS_AND_CONTROL_REQ);
+			Matcher m = p.matcher(rowBuilder);
+			String rowData = (m.replaceAll(" ")).trim();
+
+			String rowUriEnd = row.getSheet().getSheetName() + CapraOfficeObject.URI_DELIMITER + rowId;
+			String rowUri = createUri(officeFile.getAbsolutePath(), rowUriEnd);
+
+			this.setData(rowData);
+			this.setUri(rowUri);
+		}
+	}
+
+	@Override
+	public void showOfficeObjectInNativeEnvironment() throws CapraOfficeObjectNotFound {
+
+		// Get Excel file from the CapraExcelRow object.
+		File officeFile;
+		try {
+			officeFile = getFile();
+		} catch (NoSuchFileException e) {
+			LOG.warn("Could not find file {}", getFileId());
+			return;
+		}
+
+		// Extract relevant info from the object.
+		String fileType = Files.getFileExtension(officeFile.getAbsolutePath());
+		String rowId = getRowIdFromObjectUri();
+		String sheetName = getSheetName();
+
+		// Get the object's sheet
+		Sheet sheet = null;
+		try {
+			Workbook workBook = CapraOfficeUtils.getExcelWorkbook(officeFile);
+			sheet = CapraOfficeUtils.getSheet(workBook, sheetName);
+		} catch (OldExcelFormatException | IOException e) {
+			LOG.warn("Excel file is in old format or cannot be read.", e);
+			return;
+		}
+
+		// Find the Excel row that the CapraExcelRow object points to.
+		// lastCellReference is used to store the column ID (such as B or C2) of
+		// the last cell that contains any data in the row.
+		String lastCellReference = NO_LAST_CELL_REFERENCE;
+		int rowIndex = NO_ROW_INDEX;
+		for (int i = 0; i <= sheet.getLastRowNum(); i++) {
+			Row row = sheet.getRow(i);
+			if (row != null) {
+				String currRowId = getRowIdFromExcelRow(row);
+				if (currRowId.equals(rowId)) {
+					rowIndex = i;
+					lastCellReference = CellReference.convertNumToColString(row.getLastCellNum()) + (rowIndex + 1);
+					break;
+				}
+			}
+		}
+
+		if (rowIndex == NO_ROW_INDEX || lastCellReference.equals(NO_LAST_CELL_REFERENCE)) {
+			throw new CapraOfficeObjectNotFound(getRowIdFromObjectUri());
+		}
+
+		// firstDisplayedRowIndex is used to set the first visible row in the
+		// view that opens to the user - for example if the row in question is
+		// at index 50, the solution will open the Excel file at row 48.
+		int firstDisplayedRowIndex = (rowIndex - 2 > 0) ? rowIndex - 2 : 1;
+
+		// The next block of code highlights the selected row in the file by
+		// setting some XML values in the excel file.
+		if (fileType.equals(CapraOfficeObject.XLSX)) {
+			XSSFSheet xssfSheet = XSSFSheet.class.cast(sheet);
+			int sheetIndex = xssfSheet.getWorkbook().getSheetIndex(xssfSheet);
+			xssfSheet.getWorkbook().setActiveSheet(sheetIndex);
+
+			CTSheetViews ctSheetViews = xssfSheet.getCTWorksheet().getSheetViews();
+			CTSheetView ctSheetView = ctSheetViews.getSheetViewArray(ctSheetViews.sizeOfSheetViewArray() - 1);
+			ctSheetView.setTopLeftCell("A" + firstDisplayedRowIndex);
+
+			CTSelection ctSelection = ctSheetView.addNewSelection();
+			ctSelection.setActiveCell("A" + (rowIndex + 1));
+			ctSelection.setSqref(Arrays.asList("A" + (rowIndex + 1) + ":" + lastCellReference));
+
+		} else {
+			HSSFSheet hssfSheet = HSSFSheet.class.cast(sheet);
+			hssfSheet.setActive(true);
+			hssfSheet.showInPane((short) (rowIndex), (short) 0);
+
+			HSSFRow row = hssfSheet.getRow(rowIndex);
+			HSSFCell cell = row.getCell(0);
+			cell.setAsActiveCell(); // TODO doesn't work - bug in library?
+		}
+
+		// Overwrites the existing Excel file with the new XML values.
+		try (FileOutputStream out = new FileOutputStream(getFile())) {
+			sheet.getWorkbook().write(out);
+		} catch (IOException e) {
+			LOG.debug("Could not write to file.", e);
+		}
+
+		// Opens the Excel file with the Excel application.
+		// TODO If Excel is already open, this doesn't trigger. Is there a way
+		// to refresh the (Excel) application?
+		try {
+			Desktop.getDesktop().open(getFile());
+		} catch (IOException e) {
+			LOG.debug("Could not open file.", e);
+			return;
+		}
+	}
+
+	/**
+	 * Extracts the name of the sheet (from the URI of the object) which the
+	 * object is associated with. The URI of the object should always be in the
+	 * format fileId + DELIMITER + sheetName + DELIMITER + rowId.
+	 * 
+	 * @return name of the sheet
+	 */
+	public String getSheetName() {
+		String itemId = getId();
+		int lastIndexOfDelimiter = itemId.indexOf(CapraOfficeObject.URI_DELIMITER);
+		return itemId.substring(0, lastIndexOfDelimiter);
+	}
+
+	/**
+	 * Extracts the ID of the row from the URI of the object. The URI of the
+	 * object should always be in the format fileId + DELIMITER + sheetName +
+	 * DELIMITER + rowId.
+	 * 
+	 * @return ID of the row
+	 */
+	private String getRowIdFromObjectUri() {
+		String itemId = getId();
+		int lastIndexOfDelimiter = itemId.indexOf(CapraOfficeObject.URI_DELIMITER);
+		return itemId.substring(lastIndexOfDelimiter + CapraOfficeObject.URI_DELIMITER.length());
+	}
+
+	/**
+	 * Extracts the ID of the Excel row (not CapraExcelRow!) based on the
+	 * idColumn value. If the value of idColumn is EXCEL_COLUMN_VALUE_DEFAULT,
+	 * then rowID is the same as row number, otherwise a specific column
+	 * (defined by idColumn property - such as A1) is used to extract the data
+	 * that will serve as the ID of the row.
+	 * 
+	 * @param row
+	 *            the row to identify
+	 * @return the ID of the row
+	 */
+	final protected String getRowIdFromExcelRow(Row row) {
+		String rowId = "";
+		if (idColumn.equals(OfficePreferences.EXCEL_COLUMN_VALUE_DEFAULT)) {
+			rowId = Integer.toString(row.getRowNum() + 1);
+		} else {
+			rowId = FORMATTER.formatCellValue(row.getCell(CellReference.convertColStringToIndex(idColumn)));
+		}
+		return rowId;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = super.hashCode();
+		result = prime * result + ((idColumn == null) ? 0 : idColumn.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (!super.equals(obj))
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		CapraExcelRow other = (CapraExcelRow) obj;
+		if (idColumn == null) {
+			if (other.idColumn != null)
+				return false;
+		} else if (!idColumn.equals(other.idColumn))
+			return false;
+		return true;
+	}
+	
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraGoogleSheetsRow.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraGoogleSheetsRow.java
new file mode 100644
index 0000000..c28e94f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraGoogleSheetsRow.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * 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.office.model;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.poi.ss.usermodel.Row;
+import org.eclipse.capra.ui.office.exceptions.CapraOfficeObjectNotFound;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class extends the CapraExcelRow and provides an object to describe a
+ * single MS Excel row, the file of which is only stored temporarily as it was
+ * obtained directly from Google drive.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraGoogleSheetsRow extends CapraExcelRow {
+
+	private static final Logger LOG = LoggerFactory.getLogger(CapraGoogleSheetsRow.class);
+	
+	/**
+	 * Extracts the data from the Excel row the same way as its parent
+	 * (CapraExcelRow), but sets a different URI. Because the excel file is only
+	 * stored temporarily, it uses a Google drive fileId instead of a file path
+	 * in the first part of the uri (the format of the uri is fileId + DELIMITER
+	 * + sheetId + DELIMITER + rowId).
+	 * 
+	 * @param officeFile
+	 *            the (temporarily stored) excel file that holds the row
+	 * @param row
+	 *            the row from which to extract the data
+	 * @param idColumn
+	 *            the column to be used to extract the ID of the row
+	 * @param googleDriveFileId
+	 *            the Google drive file ID of the file (found in the URL when
+	 *            opening the file in Google Drive)
+	 */
+	public CapraGoogleSheetsRow(File officeFile, Row row, String idColumn, String googleDriveFileId) {
+		super(officeFile, row, idColumn);
+		String rowId = getRowIdFromExcelRow(row);
+		String objectId = row.getSheet().getSheetName() + CapraOfficeObject.URI_DELIMITER + rowId;
+		String uri = createUri(googleDriveFileId, objectId);
+		this.setUri(uri);
+	}
+
+	@Override
+	public void showOfficeObjectInNativeEnvironment() throws CapraOfficeObjectNotFound {
+		try {
+			Desktop.getDesktop().browse(new URI("https://docs.google.com/spreadsheets/d/" + this.getFileId()));
+		} catch (IOException | URISyntaxException e) {
+			LOG.info("Could not open Google spreadsheet.", e);
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraOfficeObject.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraOfficeObject.java
new file mode 100644
index 0000000..ab09851
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraOfficeObject.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * 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.office.model;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.NoSuchFileException;
+
+import org.eclipse.capra.ui.office.exceptions.CapraOfficeObjectNotFound;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class provides a custom object for describing the contents of MS Excel
+ * and MS Word related data.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraOfficeObject {
+	
+	private static final Logger LOG = LoggerFactory.getLogger(CapraOfficeObject.class);
+
+	/**
+	 * The MS Office file-types that are supported by the plugin.
+	 */
+	public static final String DOCX = "docx";
+	public static final String XLS = "xls";
+	public static final String XLSX = "xlsx";
+
+	/**
+	 * The String that separates the file-path from the object-id in the
+	 * OfficeObject uri.
+	 */
+	public static final String URI_DELIMITER = "\\\\::";
+
+	/**
+	 * The description of the object (row in Excel, requirement in Word)
+	 */
+	private String data = "";
+
+	/**
+	 * The uri of the object in the form of filePath/objectId
+	 */
+	private String uri = "";
+
+	/**
+	 * A constructor that generates an empty instance of OfficeObject.
+	 */
+	public CapraOfficeObject() {
+	}
+
+	/**
+	 * A constructor that generates a new instance of OfficeObject with defined
+	 * OfficeData and rowUri properties.
+	 */
+	public CapraOfficeObject(String data, String uri) {
+		this.data = data;
+		this.uri = uri;
+	}
+
+	/**
+	 * Returns the uri of the OfficeObject
+	 */
+	public String getUri() {
+		return uri;
+	}
+
+	/**
+	 * Sets the uri of the OfficeObject
+	 */
+	public void setUri(String uri) {
+		this.uri = uri;
+	}
+
+	/**
+	 * Returns the description of the OfficeObject
+	 */
+	public String getData() {
+		return this.data;
+	}
+
+	/**
+	 * Sets the description of the OfficeObject
+	 */
+	public void setData(String data) {
+		this.data = data;
+	}
+
+	/**
+	 * Returns the ID of the OfficeObject from its URI. The format of the URI
+	 * should always be fileId + DELIMITER + objectId.
+	 */
+	public String getId() {
+		int firstDelimiterIndex = uri.indexOf(URI_DELIMITER);
+		return uri.substring(firstDelimiterIndex + URI_DELIMITER.length());
+	}
+
+	/**
+	 * Returns the File reference of the file that contains the OfficeObject.
+	 * The format of the URI should always be fileId + DELIMITER + objectId.
+	 */
+	public File getFile() throws NoSuchFileException {
+		String fileId = getFileId();
+		File officeFile = new File(fileId);
+		if (officeFile.exists()) {
+			return officeFile;
+		} else {
+			throw new NoSuchFileException(fileId);
+		}
+	}
+
+	/**
+	 * Returns the ID of the file - the first part of the URI. The format of the
+	 * URI should always be fileId + DELIMITER + objectId.
+	 */
+	public String getFileId() {
+		int firstDelimiterIndex = uri.indexOf(URI_DELIMITER);
+		return uri.substring(0, firstDelimiterIndex);
+	}
+
+	/**
+	 * Extracts the objectId from the provided CapraOfficeObject uri. The format
+	 * of the URI should always be fileId + DELIMITER + objectId.
+	 * 
+	 * @param uri
+	 *            uri of the object
+	 * @return ID of the object
+	 */
+	public static String getObjectIdFromUri(String uri) {
+		int firstDelimiterIndex = uri.indexOf(URI_DELIMITER);
+		return uri.substring(firstDelimiterIndex + URI_DELIMITER.length());
+	}
+
+	/**
+	 * Extracts the fileId from the provided CapraOfficeObject uri. The format
+	 * of the URI should always be fileId + DELIMITER + objectId.
+	 * 
+	 * @param uri
+	 *            uri of the object
+	 * @return file-path of the file that contains the object
+	 */
+	public static String getFileIdFromUri(String uri) {
+		int delimiterIndex = uri.indexOf(URI_DELIMITER);
+		return uri.substring(0, delimiterIndex);
+	}
+
+	/**
+	 * Opens the OfficeObject in its native environment.
+	 * 
+	 * @return an OK or ERROR message
+	 * @throws CapraOfficeObjectNotFound
+	 */
+	public void showOfficeObjectInNativeEnvironment() throws CapraOfficeObjectNotFound {
+		try {
+			Desktop.getDesktop().open(getFile());
+		} catch (IOException e) {
+			LOG.error("Could not oben office file.", e);
+			throw new CapraOfficeObjectNotFound(getId(), e);
+		}
+	}
+
+	/**
+	 * Generates a uri given the fileId of the file that contains the object and
+	 * an objectId.
+	 * 
+	 * @param fileId
+	 *            ID of the file that contains the object with objectId
+	 * @param objectID
+	 *            ID of the object
+	 * @return a uri of the object in the form of filePath/objectID
+	 */
+	public static String createUri(String fileId, String objectId) {
+		return fileId + URI_DELIMITER + objectId;
+	}
+
+	/**
+	 * Returns the data of the OfficeObject.
+	 */
+	@Override
+	public String toString() {
+		return this.data;
+	}
+
+	/**
+	 * Provides the hash code of the OfficeObject.
+	 */
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((data == null) ? 0 : data.hashCode());
+		result = prime * result + ((uri == null) ? 0 : uri.hashCode());
+		return result;
+	}
+
+	/**
+	 * Compares two instances of OfficeObject.
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj) {
+			return true;
+		}
+		if (obj == null) {
+			return false;
+		}
+		if (getClass() != obj.getClass()) {
+			return false;
+		}
+		CapraOfficeObject other = (CapraOfficeObject) obj;
+		if (data == null) {
+			if (other.data != null) {
+				return false;
+			}
+		} else if (!data.equals(other.data))
+			return false;
+		if (uri == null) {
+			if (other.uri != null) {
+				return false;
+			}
+		} else if (!uri.equals(other.uri)) {
+			return false;
+		}
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraWordRequirement.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraWordRequirement.java
new file mode 100644
index 0000000..633963c
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/model/CapraWordRequirement.java
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * 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.office.model;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.eclipse.capra.ui.office.utils.CapraOfficeUtils;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * This class extends the CapraOfficeObject and provides an object to describe a
+ * single MS Word requirement, which is defined with a specific field.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class CapraWordRequirement extends CapraOfficeObject {
+	
+	private static final Logger LOG = LoggerFactory.getLogger(CapraWordRequirement.class);
+
+	/**
+	 * RegEx of characters (tabs, newlines, carriage returns and invisible
+	 * control characters) to be replaced with white-spaces in the Office View.
+	 */
+	private static final String LINE_BREAKS_AND_CONTROL_REGEX = "[\r\n\t\\p{C}]+";
+
+	/**
+	 * Regex of characters to be used as delimiters when splitting the field
+	 * contents.
+	 */
+	private static final String WORD_FIELD_SPLIT_DELIMITERS = "(\")|(\\\\\\*)";
+
+	/**
+	 * Start and end XML tags of MS Word field commands
+	 */
+	private static final String FIELD_TAG = "w:instrText";
+
+	/**
+	 * A constructor that generates a new instance of CapraWordRequirement where
+	 * the parent properties are extracted from the provided paragraph, the file
+	 * that contains the paragraph and the id (name) of the field that denotes
+	 * the data that is to be extracted.
+	 * 
+	 * @param officeFile
+	 *            the file that contains the paragraph
+	 * @param paragraph
+	 *            a Word paragraph
+	 * @param fieldName
+	 *            the name of the field that denotes the data that is to be
+	 *            extracted from the paragraph
+	 */
+	public CapraWordRequirement(File officeFile, XWPFParagraph paragraph, String fieldName) {
+		// TODO This solution assumes that there is only one requirement per
+		// paragraph. Should it be different?
+		super();
+
+		String rText = "";
+		String rId = "";
+
+		CTP pCtp = paragraph.getCTP();
+		Document doc;
+		try {
+			doc = CapraOfficeUtils.createDOMDocument(pCtp.toString());
+		} catch (IOException e) {
+			LOG.info("Could not create DOM document: error reading file.", e);
+			return;
+		} catch (ParserConfigurationException e) {
+			LOG.info("Could not create DOM document: parser not configured properly.", e);
+			return;
+		} catch (SAXException e) {
+			LOG.info("Could not create DOM document: malformed XML.", e);
+			return;
+		} 
+
+		// Get all nodes from the paragraph (there should be just one node if
+		// the TODO bellow isn't implemented)
+		NodeList nodeList = doc.getElementsByTagName(FIELD_TAG);
+		if (nodeList.getLength() > 0) {
+			// TODO Use a for loop if the solution needs to parse multiple
+			// requirements in a single paragraph. In that case,
+			// paragraph.getText() should be replaced with something from the
+			// org.w3c.dom.Document class.
+			String[] parts = nodeList.item(0).getTextContent().split(WORD_FIELD_SPLIT_DELIMITERS);
+			// Extract text from the paragraph and the ID of the requirement.
+			if (Arrays.asList(parts).contains(fieldName) && parts.length > 2) {
+				rText = paragraph.getText();
+				rId = parts[2].trim();
+			}
+		}
+
+		rText = rText.replaceAll(LINE_BREAKS_AND_CONTROL_REGEX, " ").trim();
+		// Set the data and uri properties of the CapraOfficeObject
+		if (!rText.isEmpty()) {
+			rText = "ID " + rId + ": " + rText;
+			String pUri = createUri(officeFile.getAbsolutePath(), rId);
+
+			this.setData(rText);
+			this.setUri(pUri);
+		}
+	}
+}
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
new file mode 100644
index 0000000..6109fc9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/OfficePreferences.java
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * 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.office.preferences;
+
+import org.eclipse.capra.ui.office.Activator;
+import org.eclipse.capra.ui.office.views.OfficeView;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+
+/**
+ * Provides a preference page for Capra-Office, where a user can specify custom
+ * settings for the Office feature.
+ * 
+ * Code adapted from:
+ * http://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fpreferences_prefs_implement.htm
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class OfficePreferences extends PreferencePage implements IWorkbenchPreferencePage {
+
+	/**
+	 * IDs of preferences
+	 */
+	public static final String CHAR_COUNT = "org.eclipse.capra.ui.office.preferences.charCount";
+	public static final String EXCEL_COLUMN_RADIO_CHOICE = "org.eclipse.capra.ui.office.preferences.excelColumnRadioChoice";
+	public static final String EXCEL_CUSTOM_COLUMN = "org.eclipse.capra.ui.office.preferences.excelCustomColumn";
+	public static final String EXCEL_COLUMN_VALUE = "org.eclipse.capra.ui.office.preferences.excelColumnValue";
+	public static final String WORD_FIELD_NAME = "org.eclipse.capra.ui.office.preferences.wordFieldId";
+
+	/**
+	 * Default preference values
+	 */
+	public static final String CHAR_COUNT_DEFAULT = "30";
+	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";
+	public static final String WORD_FIELD_NAME_DEFAULT = "REQ";
+
+	/**
+	 * 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_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 int FIXED_TEXT_FIELD_WIDTH = 35;
+
+	/**
+	 * Controls
+	 */
+	private Text charCount;
+	private Button excelRowIdIsRowNumber;
+	private Button excelRowIdIsCustomColumn;
+	private Text excelCustomIdColumnName;
+	private Text wordFieldName;
+
+	/**
+	 * 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.
+	 * @return the created widget
+	 */
+	private Composite createComposite(Composite parent, int numColumns) {
+		Composite composite = new Composite(parent, SWT.NULL);
+
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		composite.setLayout(layout);
+
+		GridData data = new GridData();
+		data.verticalAlignment = GridData.FILL;
+		data.horizontalAlignment = GridData.FILL;
+		composite.setLayoutData(data);
+
+		return composite;
+	}
+
+	@Override
+	public void init(IWorkbench workbench) {
+		setPreferenceStore(Activator.getDefault().getPreferenceStore());
+	}
+
+	/**
+	 * Saves the input values on click-apply or click-ok
+	 */
+	private void storeValues() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+
+		boolean idIsRowNumber;
+		String idColumn;
+		if (excelRowIdIsRowNumber.getSelection()) {
+			idColumn = EXCEL_COLUMN_VALUE_DEFAULT;
+			excelCustomIdColumnName.setText("");
+			idIsRowNumber = true;
+		} else {
+			if (excelCustomIdColumnName.getText().isEmpty()) {
+				excelCustomIdColumnName.setText(EXCEL_CUSTOM_COLUMN_DEFAULT);
+			}
+			idColumn = excelCustomIdColumnName.getText();
+			idIsRowNumber = false;
+		}
+
+		store.setValue(CHAR_COUNT, charCount.getText());
+		store.setValue(EXCEL_COLUMN_RADIO_CHOICE, idIsRowNumber);
+		store.setValue(EXCEL_CUSTOM_COLUMN, excelCustomIdColumnName.getText());
+		store.setValue(EXCEL_COLUMN_VALUE, idColumn);
+		store.setValue(WORD_FIELD_NAME, wordFieldName.getText());
+	}
+
+	/**
+	 * Fills the text fields and radio buttons with stored values when the
+	 * preference page is opened.
+	 */
+	private void initializeValues() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+
+		boolean idIsRowNumber = store.getBoolean(EXCEL_COLUMN_RADIO_CHOICE);
+		if (idIsRowNumber) {
+			excelRowIdIsRowNumber.setSelection(true);
+			excelCustomIdColumnName.setText("");
+			excelCustomIdColumnName.setEnabled(false);
+		} else {
+			excelRowIdIsCustomColumn.setSelection(true);
+			excelCustomIdColumnName.setText(store.getString(EXCEL_CUSTOM_COLUMN));
+		}
+
+		charCount.setText(store.getString(CHAR_COUNT));
+		wordFieldName.setText(store.getString(WORD_FIELD_NAME));
+	}
+
+	/**
+	 * Sets the default values if the user clicks on restore defaults option.
+	 */
+	private void initializeDefaults() {
+		excelRowIdIsRowNumber.setSelection(EXCEL_COLUMN_RADIO_ID_IS_LINE_NUMBER);
+		excelRowIdIsCustomColumn.setSelection(!EXCEL_COLUMN_RADIO_ID_IS_LINE_NUMBER);
+
+		if (excelRowIdIsRowNumber.getSelection()) {
+			excelCustomIdColumnName.setText("");
+			excelCustomIdColumnName.setEnabled(false);
+		}
+		charCount.setText(CHAR_COUNT_DEFAULT);
+
+		wordFieldName.setText(WORD_FIELD_NAME_DEFAULT);
+	}
+
+	@Override
+	protected Control createContents(Composite parent) {
+
+		Composite compositeCharCount = createComposite(parent, 2);
+		createLabel(compositeCharCount, CHAR_COUNT_DESC, 1);
+		charCount = createTextField(compositeCharCount, 1, FIXED_TEXT_FIELD_WIDTH);
+
+		Composite compositeExcelIdColumn = createComposite(parent, 2);
+		createLabel(compositeExcelIdColumn, EXCEL_COLUMN_RADIO_CHOICE_DESC, 2);
+
+		Composite compositeRadioButtons = createComposite(compositeExcelIdColumn, 3);
+		excelRowIdIsRowNumber = createRadioButton(compositeRadioButtons, EXCEL_COLUMN_IS_LINE_NUMBER_OPTION_DESC, 3);
+		excelRowIdIsCustomColumn = createRadioButton(compositeRadioButtons, EXCEL_COLUMN_IS_CUSTOM_OPTION_DESC, 1);
+		excelCustomIdColumnName = createTextField(compositeRadioButtons, 1, FIXED_TEXT_FIELD_WIDTH);
+		createLabel(compositeRadioButtons, EXCEL_COLUMN_IS_CUSTOM_OPTION_HINT, 1);
+
+		excelRowIdIsRowNumber.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				excelCustomIdColumnName.setText("");
+				excelCustomIdColumnName.setEnabled(false);
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+		});
+
+		excelRowIdIsCustomColumn.addSelectionListener(new SelectionListener() {
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				excelCustomIdColumnName.setEnabled(true);
+				excelCustomIdColumnName.setText(EXCEL_CUSTOM_COLUMN_DEFAULT);
+			}
+
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+			}
+		});
+
+		Composite compositeWordRequirementFieldName = createComposite(parent, 2);
+		createLabel(compositeWordRequirementFieldName, WORD_FIELD_NAME_DESC, 1);
+		wordFieldName = createTextField(compositeWordRequirementFieldName, 1, FIXED_TEXT_FIELD_WIDTH);
+
+		initializeValues();
+
+		return new Composite(parent, SWT.NULL);
+	}
+
+	/**
+	 * 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.
+	 * @return newly created Label object
+	 */
+	private Label createLabel(Composite parent, String text, int numOfColumns) {
+		Label label = new Label(parent, SWT.LEFT);
+		label.setText(text);
+		GridData data = new GridData();
+		data.horizontalSpan = numOfColumns;
+		data.horizontalAlignment = GridData.FILL;
+		label.setLayoutData(data);
+		return label;
+	}
+
+	/**
+	 * 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.
+	 * @return the newly created Text widget.
+	 */
+	private Text createTextField(Composite parent, int numOfColumns, int minimumWidth) {
+		Text text = new Text(parent, SWT.SINGLE | SWT.BORDER);
+		GridData data = new GridData();
+		data.horizontalAlignment = GridData.FILL;
+		data.grabExcessHorizontalSpace = true;
+		data.verticalAlignment = GridData.CENTER;
+		data.grabExcessVerticalSpace = false;
+		data.horizontalSpan = numOfColumns;
+		data.minimumWidth = minimumWidth;
+		text.setLayoutData(data);
+		return text;
+	}
+
+	/**
+	 * 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.
+	 * @return the newly created Button widget.
+	 */
+	private Button createRadioButton(Composite parent, String label, int numOfColumns) {
+		Button button = new Button(parent, SWT.RADIO | SWT.LEFT);
+		button.setText(label);
+		GridData data = new GridData();
+		data.horizontalSpan = numOfColumns;
+		button.setLayoutData(data);
+		return button;
+	}
+
+	@Override
+	public void performDefaults() {
+		super.performDefaults();
+		initializeDefaults();
+	}
+
+	@Override
+	public void performApply() {
+		super.performApply();
+		storeValues();
+	}
+
+	@Override
+	public boolean performOk() {
+		super.performOk();
+		storeValues();
+		OfficeView.getOpenedView().refreshView();
+		return true;
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/PreferenceInitializer.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..b726176
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/preferences/PreferenceInitializer.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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.office.preferences;
+
+import org.eclipse.capra.ui.office.Activator;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * This class is tasked with initializing preference values when the plugin is
+ * started for the first time.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	public PreferenceInitializer() {
+	}
+
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		store.setDefault(OfficePreferences.CHAR_COUNT, OfficePreferences.CHAR_COUNT_DEFAULT);
+		store.setDefault(OfficePreferences.EXCEL_COLUMN_RADIO_CHOICE,
+				OfficePreferences.EXCEL_COLUMN_RADIO_ID_IS_LINE_NUMBER);
+		store.setDefault(OfficePreferences.EXCEL_CUSTOM_COLUMN, OfficePreferences.EXCEL_CUSTOM_COLUMN_DEFAULT);
+		store.setDefault(OfficePreferences.EXCEL_COLUMN_VALUE, OfficePreferences.EXCEL_COLUMN_VALUE_DEFAULT);
+		store.setDefault(OfficePreferences.WORD_FIELD_NAME, OfficePreferences.WORD_FIELD_NAME_DEFAULT);
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/CapraOfficeUtils.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/CapraOfficeUtils.java
new file mode 100644
index 0000000..b9c1d0f
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/CapraOfficeUtils.java
@@ -0,0 +1,178 @@
+/*******************************************************************************
+ * 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.office.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.poi.hssf.OldExcelFormatException;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.xmlbeans.SchemaTypeLoaderException;
+import org.eclipse.capra.ui.office.model.CapraOfficeObject;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import com.google.common.base.Strings;
+import com.google.common.io.Files;
+
+/**
+ * This class contains convenient static methods that support the Capra Office
+ * plugin.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public final class CapraOfficeUtils {
+
+	/**
+	 * Hide default constructor.
+	 */
+	private CapraOfficeUtils () {
+		super();
+	}
+
+	/**
+	 * Generates a HashMap that contains sheet names and info about their
+	 * emptiness:
+	 * <ul>
+	 * <li>keySet (String) - names of all the sheets, contained in the selected
+	 * workbook</li>
+	 * <li>valueSet (Boolean) - information about whether sheets are empty or
+	 * not</li>
+	 * </ul>
+	 * 
+	 * @param workBook
+	 *            an Excel Workbook object
+	 * @return a <code>Map</code> that contains the names (<code>String</code>) of all the sheets,
+	 *         contained in the selected workbook and information about whether
+	 *         they are empty or not (<code>Boolean</code>).
+	 */
+	public static Map<String, Boolean> getSheetsEmptinessInfo(Workbook workBook) {
+		HashMap<String, Boolean> isSheetEmptyMap = new HashMap<String, Boolean>();
+		for (int i = 0; i < workBook.getNumberOfSheets(); i++) {
+			Sheet s = workBook.getSheetAt(i);
+			isSheetEmptyMap.put(s.getSheetName(), s.getLastRowNum() < 1);
+		}
+		return isSheetEmptyMap;
+	}
+
+	/**
+	 * Gets the sheet with the provided sheetName from inside the provided Excel
+	 * Workbook.
+	 * 
+	 * @param workBook
+	 *            an Excel Workbook object
+	 * @param sheetName
+	 *            the name of the sheet
+	 * @return the sheet with the provided sheetName from the provided workBook
+	 * @throws NullPointerException
+	 */
+	public static Sheet getSheet(Workbook workBook, String sheetName) throws NullPointerException {
+		String actualSheetName = sheetName;
+		if (Strings.isNullOrEmpty(sheetName)) {
+			// This try block is necessary as there is a bug in the
+			// Workbook.getActiveSheetIndex() and Workbook.getFirstVisibleTab()
+			// methods; they throw a NullPointerException whenever the
+			// woorkbook doesn't hold information about which sheet is active
+			// and/or visible (maybe it occurs when the file is auto-generated).
+			int activeSheetIndex;
+			try {
+				activeSheetIndex = workBook.getActiveSheetIndex();
+			} catch (NullPointerException e1) {
+				try {
+					activeSheetIndex = workBook.getFirstVisibleTab();
+				} catch (NullPointerException e2) {
+					activeSheetIndex = 0;
+				}
+			}
+
+			actualSheetName = workBook.getSheetName(activeSheetIndex);
+		}
+
+		return workBook.getSheet(actualSheetName);
+	}
+
+	/**
+	 * Gets the Excel Workbook from the provided Excel file.
+	 * 
+	 * @param excelFile
+	 *            a MS Excel file.
+	 * @return an Excel Workbook object
+	 * @throws OldExcelFormatException
+	 * @throws IOException
+	 */
+	public static Workbook getExcelWorkbook(File excelFile) throws OldExcelFormatException, IOException {
+		String fileType = Files.getFileExtension(excelFile.getAbsolutePath());
+		Workbook workBook;
+
+		if (fileType.equals(CapraOfficeObject.XLSX)) {
+			workBook = new XSSFWorkbook(new FileInputStream(excelFile));
+		} else {
+			workBook = new HSSFWorkbook(new FileInputStream(excelFile));
+		}
+	
+		return workBook;
+	}
+
+	/**
+	 * Gets a list of paragraph objects that are contained in the provided MS
+	 * Word file.
+	 * 
+	 * @param wordFile
+	 *            a MS Word file
+	 * @return a list of XWPFParagraph objects that describe the paragraphs
+	 *         contained by the provided MS Word file.
+	 * @throws SchemaTypeLoaderException
+	 * @throws IOException
+	 */
+	public static List<XWPFParagraph> getWordParagraphs(File wordFile) throws SchemaTypeLoaderException, IOException {
+		FileInputStream fs = new FileInputStream(wordFile);
+		XWPFDocument xwpfDoc = new XWPFDocument(fs);
+		return xwpfDoc.getParagraphs();
+	}
+
+	/**
+	 * Creates a DOM document from the provided xml String.
+	 * 
+	 * @param xml
+	 *            a valid XML String
+	 * @return DOM document that describes the XML String
+	 * @throws ParserConfigurationException if a DocumentBuilder cannot be created which satisfies the configuration requested.
+	 * @throws IOException if any IO errors occur.
+	 * @throws SAXException if any parse error occurs
+	 */
+	public static Document createDOMDocument(String xml) throws ParserConfigurationException, SAXException, IOException {
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		InputSource is = new InputSource(new StringReader(xml));
+		return builder.parse(is);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java
new file mode 100644
index 0000000..f0a6dc7
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficePropertyTester.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.office.utils;
+
+import org.eclipse.capra.ui.office.model.CapraExcelRow;
+import org.eclipse.core.expressions.PropertyTester;
+
+/**
+ * A PropertyTester class that corresponds to the propertyTester definition in
+ * the plugin.xml and checks if the menu options in the context/toolbar menu
+ * should be displayed.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OfficePropertyTester extends PropertyTester {
+
+	private static final String IS_VIEW_POPULATED = "isViewPopulated";
+	private static final String IS_EXCEL_OBJECT = "isExcelObject";
+
+	@Override
+	public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) {
+
+		if (property.equals(IS_VIEW_POPULATED)) {
+			return receiver != null;
+		}
+		if (property.equals(IS_EXCEL_OBJECT)) {
+			return receiver instanceof CapraExcelRow;
+		}
+		return false;
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeSourceProvider.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeSourceProvider.java
new file mode 100644
index 0000000..d38cff2
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeSourceProvider.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * 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.office.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.capra.ui.office.model.CapraOfficeObject;
+import org.eclipse.ui.AbstractSourceProvider;
+import org.eclipse.ui.ISources;
+
+/**
+ * This class provides the plugin with information about the contents of the
+ * Office view. It does that by providing a sample object from the view, from
+ * which the following useful information can be deducted: if view is populated
+ * (object is null if it is empty); the type of the objects in the view; the
+ * file-path of the file that was used to extract the objects.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OfficeSourceProvider extends AbstractSourceProvider {
+
+	/**
+	 * The ID of the variable that corresponds to the one in the plugin.xml and
+	 * is used to identify the resource that is being held by the class.
+	 */
+	public static final String CAPRA_OFFICE_OBJECT = "org.eclipse.capra.ui.office.utils.capraOfficeObject";
+
+	private CapraOfficeObject capraOfficeObject = null;
+
+	@Override
+	public void dispose() {
+	}
+
+	/**
+	 * Sets the resource (an instance of CapraOfficeObject).
+	 * 
+	 * @param capraOfficeObject
+	 */
+	public void setResource(CapraOfficeObject capraOfficeObject) {
+		this.capraOfficeObject = capraOfficeObject;
+		fireSourceChanged(ISources.WORKBENCH, CAPRA_OFFICE_OBJECT, this.capraOfficeObject);
+	}
+
+	@Override
+	public Map<String, CapraOfficeObject> getCurrentState() {
+		HashMap<String, CapraOfficeObject> map = new HashMap<String, CapraOfficeObject>();
+		map.put(CAPRA_OFFICE_OBJECT, capraOfficeObject);
+		return map;
+	}
+
+	@Override
+	public String[] getProvidedSourceNames() {
+		return new String[] { CAPRA_OFFICE_OBJECT };
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeTransferType.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeTransferType.java
new file mode 100644
index 0000000..e9f1745
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/utils/OfficeTransferType.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * 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.office.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.eclipse.capra.ui.office.model.CapraOfficeObject;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TransferData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The OfficeTransferType object provides the logic necessary to drag and drop a
+ * non-native-java OfficeObject from one swt view (OfficeView) to another
+ * (SelectionView). It does that by extending the ByteArrayTransfer class and
+ * overriding the javaToNative and nativeToJava methods.
+ *
+ * Code adapted from IBM example at:
+ * http://www.java2s.com/Tutorial/Java/0280__SWT/DragandDropdefinemyowndatatransfertype.htm
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OfficeTransferType extends ByteArrayTransfer {
+
+	private static final Logger LOG = LoggerFactory.getLogger(OfficeTransferType.class);
+
+	private static final String MIME_TYPE = "capra_office";
+	private static final int MIME_TYPE_ID = registerType(MIME_TYPE);
+
+	private static OfficeTransferType theInstance = new OfficeTransferType();
+
+	/** Provides an instance of the class. */
+	public static OfficeTransferType getInstance() {
+		return theInstance;
+	}
+
+	@Override
+	protected int[] getTypeIds() {
+		return new int[] { MIME_TYPE_ID };
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		return new String[] { MIME_TYPE };
+	}
+
+	@Override
+	protected boolean validate(Object object) {
+		return checkMyType(object);
+	}
+
+	@SuppressWarnings("unchecked")
+	private boolean checkMyType(Object object) {
+		if (!(object instanceof ArrayList)) {
+			return false;
+		}
+
+		ArrayList<Object> objectList = (ArrayList<Object>) object;
+		if (!(objectList.get(0) instanceof CapraOfficeObject)) {
+			return false;
+		}
+		
+
+		ArrayList<CapraOfficeObject> officeObjects = (ArrayList<CapraOfficeObject>) object;
+		if (officeObjects.isEmpty()) {
+			return false;
+		}
+
+		return true;
+	}
+
+	/** Converts a java byte[] to a platform specific representation. */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void javaToNative(Object object, TransferData transferData) {
+		if (!checkMyType(object) || !isSupportedType(transferData)) {
+			DND.error(DND.ERROR_INVALID_DATA);
+		}
+
+		ArrayList<CapraOfficeObject> officeObjects = (ArrayList<CapraOfficeObject>) object;
+
+		try (ByteArrayOutputStream out = new ByteArrayOutputStream();
+				DataOutputStream writeOut = new DataOutputStream(out)) {
+
+			for (int i = 0; i < officeObjects.size(); i++) {
+				CapraOfficeObject currOfficeObject = officeObjects.get(i);
+
+				byte[] buffer = currOfficeObject.getData().getBytes();
+				writeOut.writeInt(buffer.length);
+				writeOut.write(buffer);
+
+				buffer = currOfficeObject.getUri().getBytes();
+				writeOut.writeInt(buffer.length);
+				writeOut.write(buffer);
+			}
+
+			byte[] bufferOut = out.toByteArray();
+
+			super.javaToNative(bufferOut, transferData);
+		} catch (IOException e) {
+			LOG.warn("IOException occured when trying to convert office object to platform-specific representation: {}", e.getLocalizedMessage());
+		}
+	}
+
+	/**
+	 * Converts a platform specific representation of a byte array to a java
+	 * byte[].
+	 */
+	@Override
+	public Object nativeToJava(TransferData transferData) {
+		if (isSupportedType(transferData)) {
+			byte[] buffer = (byte[]) super.nativeToJava(transferData);
+
+			if (buffer == null) {
+				return null;
+			}
+
+			ArrayList<CapraOfficeObject> officeObjects = new ArrayList<CapraOfficeObject>();
+
+			try (ByteArrayInputStream in = new ByteArrayInputStream(buffer);
+					DataInputStream readIn = new DataInputStream(in)) {
+
+				while (readIn.available() > 0) {
+
+					CapraOfficeObject currOfficeObject = new CapraOfficeObject();
+
+					int size = readIn.readInt();
+					byte[] objectData = new byte[size];
+					readIn.read(objectData);
+
+					size = readIn.readInt();
+					byte[] objectUri = new byte[size];
+					readIn.read(objectUri);
+
+					currOfficeObject.setData(new String(objectData));
+					currOfficeObject.setUri(new String(objectUri));
+
+					officeObjects.add(currOfficeObject);
+				}
+
+			} catch (IOException e) {
+				LOG.warn("IOException occured when trying to convert from platform-specific representation to office object: {}", e.getLocalizedMessage());
+				return null;
+			}
+
+			return officeObjects;
+		}
+
+		return null;
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java
new file mode 100644
index 0000000..c8ae602
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/OfficeView.java
@@ -0,0 +1,703 @@
+/*******************************************************************************
+ * 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.office.views;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.poi.hssf.OldExcelFormatException;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.xmlbeans.SchemaTypeLoaderException;
+import org.eclipse.capra.ui.office.Activator;
+import org.eclipse.capra.ui.office.exceptions.CapraOfficeFileNotSupportedException;
+import org.eclipse.capra.ui.office.exceptions.CapraOfficeObjectNotFound;
+import org.eclipse.capra.ui.office.model.CapraExcelRow;
+import org.eclipse.capra.ui.office.model.CapraGoogleSheetsRow;
+import org.eclipse.capra.ui.office.model.CapraOfficeObject;
+import org.eclipse.capra.ui.office.model.CapraWordRequirement;
+import org.eclipse.capra.ui.office.preferences.OfficePreferences;
+import org.eclipse.capra.ui.office.utils.CapraOfficeUtils;
+import org.eclipse.capra.ui.office.utils.OfficeSourceProvider;
+import org.eclipse.capra.ui.office.utils.OfficeTransferType;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.ui.services.ISourceProviderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.io.Files;
+
+/**
+ * Provides a Capra perspective view for displaying the contents of Excel and
+ * Word documents. The view displays the contents if the user drags an Excel or
+ * a Word document into the surface.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class OfficeView extends ViewPart {
+
+	private static final Logger LOG = LoggerFactory.getLogger(OfficeView.class);
+
+	/**
+	 * The ID of the view as specified by the extension.
+	 */
+	public static final String ID = "org.eclipse.capra.ui.views.OfficeView";
+
+	/**
+	 * The caption that is shown when a message dialog appears describing an
+	 * error.
+	 */
+	private static final String ERROR_TITLE = "Error";
+
+	/**
+	 * The URL for the Bugzilla Office handler page
+	 */
+	private static final String BUGZILLA_OFFICE_URL = "https://bugs.eclipse.org/bugs/show_bug.cgi?id=503313#add_comment";
+
+	/**
+	 * The actual view that contains the contents of the documents.
+	 */
+	private TableViewer viewer;
+
+	/**
+	 * The collection that contains the Excel/Word contents.
+	 */
+	private List<CapraOfficeObject> selection = new ArrayList<CapraOfficeObject>();
+
+	/**
+	 * The names (String) of all the sheets, contained in the selected workbook
+	 * and information about whether they are empty or not (Boolean).
+	 */
+	private Map<String, Boolean> isSheetEmptyMap;
+
+	/**
+	 * The name of the sheet that is currently displayed in the Office view.
+	 */
+	private String selectedSheetName;
+
+	/**
+	 * The file that is currently displayed in the view.
+	 */
+	private File selectedFile;
+
+	/**
+	 * The ID of the file that is currently displayed in the view (non-null only
+	 * if acquired from Google Drive).
+	 */
+	private String selectedFileId;
+
+	/**
+	 * Instance of OfficeSourceProvider (used for hiding context menu options)
+	 */
+	private OfficeSourceProvider provider = (OfficeSourceProvider) ((ISourceProviderService) PlatformUI.getWorkbench()
+			.getService(ISourceProviderService.class)).getSourceProvider(OfficeSourceProvider.CAPRA_OFFICE_OBJECT);
+
+	/**
+	 * The content provider class used by the view.
+	 */
+	class ViewContentProvider implements IStructuredContentProvider {
+		@Override
+		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public Object[] getElements(Object parent) {
+			return selection.toArray();
+		}
+	}
+
+	/**
+	 * The label provider class used by the view.
+	 */
+	static class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+		@Override
+		public String getText(Object obj) {
+			int minAllowed = Activator.getDefault().getPreferenceStore().getInt(OfficePreferences.CHAR_COUNT);
+			String text = obj.toString();
+			int textLength = Math.min(text.length(), minAllowed);
+			if (textLength == minAllowed) {
+				text = text.substring(0, textLength) + "...";
+			}
+			return text;
+		};
+
+		@Override
+		public String getColumnText(Object obj, int index) {
+			return getText(obj);
+		}
+
+		@Override
+		public Image getColumnImage(Object obj, int index) {
+			return getImage(obj);
+		}
+
+		@Override
+		public Image getImage(Object obj) {
+			return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+		}
+	}
+
+	/**
+	 * Adapter used by the view to handle drop events.
+	 */
+	class SelectionDropAdapter extends ViewerDropAdapter {
+
+		public SelectionDropAdapter(TableViewer viewer) {
+			super(viewer);
+		}
+
+		@Override
+		public boolean performDrop(Object data) {
+			try {
+				if (data instanceof String[]) {
+					File file = new File(((String[]) data)[0]);
+					if (file != null && file.exists()) {
+						parseGenericFile(file);
+					}
+				}
+			} catch (CapraOfficeFileNotSupportedException e) {
+				LOG.debug("Capra does not support this file.", e);
+				showErrorMessage(ERROR_TITLE, e.getMessage(), null);
+				return false;
+			}
+			return true;
+		}
+
+		@Override
+		public boolean validateDrop(Object target, int operation, TransferData transferType) {
+			return true;
+		}
+	}
+
+	/**
+	 * Adapter used by the view to handle drag events.
+	 */
+	private static class SelectionDragAdapter extends ViewerDragAdapter {
+
+		private TableViewer viewer;
+
+		public SelectionDragAdapter(TableViewer viewer) {
+			super(viewer);
+			this.viewer = viewer;
+		}
+
+		@Override
+		public void dragSetData(DragSourceEvent event) {
+
+			if (OfficeTransferType.getInstance().isSupportedType(event.dataType)) {
+				TableItem[] items = viewer.getTable().getSelection();
+				ArrayList<CapraOfficeObject> officeObjects = new ArrayList<CapraOfficeObject>();
+
+				for (int i = 0; i < items.length; i++) {
+					officeObjects.add((CapraOfficeObject) items[i].getData());
+				}
+				event.data = officeObjects;
+			}
+		}
+	}
+
+	@Override
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+
+		viewer = new TableViewer(parent);
+		viewer.setContentProvider(new ViewContentProvider());
+		viewer.setLabelProvider(new ViewLabelProvider());
+		viewer.setInput(getViewSite());
+
+		getSite().setSelectionProvider(viewer);
+		hookContextMenu();
+
+		int ops = DND.DROP_COPY | DND.DROP_MOVE;
+		Transfer[] transfersIn = new Transfer[] { org.eclipse.swt.dnd.FileTransfer.getInstance() };
+		Transfer[] transfersOut = new Transfer[] { org.eclipse.capra.ui.office.utils.OfficeTransferType.getInstance() };
+
+		viewer.addDropSupport(ops, transfersIn, new SelectionDropAdapter(viewer));
+		viewer.addDragSupport(ops, transfersOut, new SelectionDragAdapter(viewer));
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+
+			@Override
+			public void doubleClick(DoubleClickEvent event) {
+				showObjectDetails(event, parent.getShell());
+			}
+		});
+	}
+
+	/**
+	 * A method that is called when the user drags file (word or excel) into the
+	 * OfficeView. Its main task is to parse the dragged file and display its
+	 * contents in the OfficeView. It only parses the file if it is of type
+	 * xlsx, xls, or docx.
+	 *
+	 * @param data
+	 *            the object that was dragged into the view
+	 * @throws CapraOfficeFileNotSupportedException
+	 */
+	private void parseGenericFile(File file) throws CapraOfficeFileNotSupportedException {
+		String fileExtension = Files.getFileExtension(file.getName());
+
+		if (fileExtension.equals(CapraOfficeObject.XLSX) || fileExtension.equals(CapraOfficeObject.XLS)) {
+			parseExcelDocument(file, null, null);
+		} else if (fileExtension.equals(CapraOfficeObject.DOCX)) {
+			parseWordDocument(file);
+		} else {
+			throw new CapraOfficeFileNotSupportedException(fileExtension);
+		}
+	}
+
+	/**
+	 * Extracts the data from the Excel document and adds it to the view.
+	 *
+	 * @param officeFile
+	 *            the File object pointing to the Excel document that was
+	 *            dragged into the view
+	 * @param googleDriveFileId
+	 *            the id of the file from Google drive (shown in the URL when a
+	 *            user opens a file inside Google Drive). If provided it will be
+	 *            used when creating the URI of the objects, otherwise (if null)
+	 *            the path of the containing file will be used instead. That
+	 *            also means that, if googleDriveFileId is provided, the Objects
+	 *            in the OfficeView will be of type CapraGoogleSheetsRow,
+	 *            otherwise of type CapraExcelRow.
+	 * @param sheetName
+	 *            the name of the sheet that should be displayed in the Office
+	 *            view. If null, the currently active sheet will be displayed.
+	 */
+	public void parseExcelDocument(File officeFile, String googleDriveFileId, String sheetName) {
+
+		// Get Excel Workbook
+		Workbook workBook;
+		try {
+			workBook = CapraOfficeUtils.getExcelWorkbook(officeFile);
+		} catch (OldExcelFormatException e) {
+			showErrorMessage(ERROR_TITLE, e.getMessage(), null);
+			return;
+		} catch (IOException e) {
+			showErrorMessage(ERROR_TITLE, "Could not open the Excel workbook.", null);
+			LOG.warn("Could not open the Excel workbook", e);
+			return;
+		}
+
+		// Get Excel sheet with provided sheetName from provided workBook
+		Sheet sheet = CapraOfficeUtils.getSheet(workBook, sheetName);
+		if (sheet == null) {
+			// In theory, this could only happen if someone uses the selectSheet
+			// (public) method and provides a non-valid sheetName. The method is
+			// currently only used for changing the displayed sheet through the
+			// tool-bar menu, where all the names are valid. TODO The best way
+			// to tackle this would probably be to introduce a new exception
+			// (CapraOfficeSheetNotFoundException?), but to do that, a bit of
+			// reordering and partitioning of the methods would be required -
+			// ideally, the selectSheet (public) method would throw the
+			// exception, not this one.
+			String hyperlinkMessage = "It appears that the file doesn't contain any sheets. If that is not true, please report the issue to our <a href=\""
+					+ BUGZILLA_OFFICE_URL + "\"> Bugzilla project page </a> and we will do our best to resolve it.";
+			showErrorMessage(ERROR_TITLE, hyperlinkMessage, BUGZILLA_OFFICE_URL);
+			return;
+		}
+
+		// Check if the whole workbook (all of the sheets) is empty.
+		Map<String, Boolean> isNewSheetEmptyMap = CapraOfficeUtils.getSheetsEmptinessInfo(workBook);
+		if (!isNewSheetEmptyMap.values().contains(false)) {
+			showErrorMessage(ERROR_TITLE, "There are no rows to display in any of the sheets.", null);
+			clearSelection();
+			return;
+		}
+
+		// Clear the Office view and all static variables
+		clearSelection();
+
+		// Save new values to properties
+		this.selectedSheetName = sheet.getSheetName();
+		this.selectedFile = officeFile;
+		this.selectedFileId = googleDriveFileId;
+		this.isSheetEmptyMap = isNewSheetEmptyMap;
+
+		// Populate the view with Excel rows
+		String idColumn = Activator.getDefault().getPreferenceStore().getString(OfficePreferences.EXCEL_COLUMN_VALUE);
+		boolean isGoogleSheet = googleDriveFileId != null;
+		for (int i = 0; i <= sheet.getLastRowNum(); i++) {
+			Row row = sheet.getRow(i);
+			if (row != null) {
+				CapraOfficeObject cRow;
+				// If the file is in the java's "temporary-file" folder, it was
+				// obtained from Google drive
+				if (isGoogleSheet) {
+					cRow = new CapraGoogleSheetsRow(officeFile, row, idColumn, googleDriveFileId);
+				} else {
+					cRow = new CapraExcelRow(officeFile, row, idColumn);
+				}
+				if (!cRow.getData().isEmpty()) {
+					selection.add(cRow);
+				}
+			}
+		}
+
+		// Save info about the type of the data displayed in the Office view.
+		if (!selection.isEmpty()) {
+			provider.setResource(selection.get(0));
+		}
+		viewer.refresh();
+	}
+
+	/**
+	 * Extracts the data from the Word document and adds it to the view.
+	 *
+	 * @param officeFile
+	 *            the File object pointing of the Word document that was dragged
+	 *            into the view.
+	 */
+	private void parseWordDocument(File officeFile) {
+
+		List<XWPFParagraph> paragraphs;
+		try {
+			paragraphs = CapraOfficeUtils.getWordParagraphs(officeFile);
+		} catch (IOException e) {
+			LOG.debug("Could not read Word file.", e);
+			showErrorMessage(ERROR_TITLE, e.getMessage(), null);
+			return;
+		} catch (SchemaTypeLoaderException e) {
+			LOG.debug("Could not read Word file.", e);
+			showErrorMessage(ERROR_TITLE, e.getMessage(), null);
+			return;
+		}
+
+		if (paragraphs.isEmpty()) {
+			return;
+		}
+		// Clear the Office view and all static variables
+		clearSelection();
+
+		// Save new values to properties
+		this.selectedFile = officeFile;
+
+		// Populate the view with Word requirements
+		String fieldName = Activator.getDefault().getPreferenceStore().getString(OfficePreferences.WORD_FIELD_NAME);
+		for (int i = 0; i < paragraphs.size(); i++) {
+			XWPFParagraph paragraph = paragraphs.get(i);
+			if (paragraph != null) {
+				CapraWordRequirement cRequirement = new CapraWordRequirement(officeFile, paragraph, fieldName);
+				if (!cRequirement.getData().isEmpty()) {
+					selection.add(cRequirement);
+				}
+			}
+		}
+
+		if (!selection.isEmpty()) {
+			provider.setResource(selection.get(0));
+		} else {
+			showErrorMessage(ERROR_TITLE, "There are no fields with the specified field name in this document.", null);
+			clearSelection();
+			return;
+		}
+
+		viewer.refresh();
+	}
+
+	/**
+	 * Shows the details of the object in its native environment (MS Word, MS
+	 * Excel or Google Drive (sheets)).
+	 * 
+	 * @param event
+	 *            Should be of type DoubleClickEvent or ExecutionEvent, hold the
+	 *            event that triggered the request for details.
+	 * @param parentShell
+	 *            Shell which will be the parent of the dialog window.
+	 */
+	public void showObjectDetails(Object event, Shell parentShell) {
+		CapraOfficeObject officeObject;
+		IStructuredSelection eventSelection;
+		
+		if (event instanceof DoubleClickEvent) { // If called with double click
+			eventSelection = (IStructuredSelection) ((DoubleClickEvent) event).getSelection();
+			officeObject = (CapraOfficeObject) eventSelection.getFirstElement();
+
+		} else if (event instanceof ExecutionEvent) { // If called from menu
+			try {
+				eventSelection = (IStructuredSelection) HandlerUtil.getCurrentSelectionChecked((ExecutionEvent) event);
+				officeObject = (CapraOfficeObject) eventSelection.getFirstElement();
+			} catch (ExecutionException e) {
+				LOG.warn("Could not get office object.", e);
+				return;
+			}
+		} else {
+			return;
+		}
+
+		try {
+			officeObject.showOfficeObjectInNativeEnvironment();
+		} catch (CapraOfficeObjectNotFound e) {
+			LOG.debug("Could not find office object.", e);
+			showErrorMessage(ERROR_TITLE, e.getMessage(), null);
+		}
+
+	}
+
+	/**
+	 * Clears the OfficeView as well as all the static variables.
+	 */
+	public void clearSelection() {
+		selection.clear();
+		viewer.refresh();
+		provider.setResource(null);
+		selectedSheetName = null;
+		selectedFile = null;
+		selectedFileId = null;
+		isSheetEmptyMap = null;
+	}
+
+	/**
+	 * Opens a file-chooser dialog and calls the parseOfficeFile method, which
+	 * displays the contents of the selected file in the TableViewer (if the
+	 * file is of type xlsx, xls or docx).
+	 */
+	public void openFile() {
+
+		FileDialog fd = new FileDialog(viewer.getControl().getShell(), SWT.OK);
+		String filePath = fd.open();
+
+		if (filePath != null && !filePath.isEmpty()) {
+			File file = new File(filePath);
+			if (file != null && file.exists()) {
+				try {
+					parseGenericFile(file);
+				} catch (CapraOfficeFileNotSupportedException e) {
+					LOG.debug("Capra does not support the file.", e);
+					showErrorMessage(ERROR_TITLE, e.getMessage(), null);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Displays the provided sheet from the current workbook.
+	 * 
+	 * @param sheetName
+	 *            the name of the sheet to be displayed in the Office view.
+	 */
+	public void displaySheet(String sheetName) {
+		if (selection.isEmpty()) {
+			return;
+		} else if (selection.get(0) instanceof CapraExcelRow) {
+			parseExcelDocument(selectedFile, selectedFileId, sheetName);
+		}
+	}
+
+	/**
+	 * Getter method for the HashMap that contains the sheet names and
+	 * information about whether they are empty or not
+	 * 
+	 * @return names and information about "emptiness" of all the sheets
+	 *         contained in the current workbook or null if a workbook isn't
+	 *         opened.
+	 */
+	public Map<String, Boolean> getIsSheetEmptyMap() {
+
+		// isSheetEmptyMap is used by the SelectSheetDynamicMenu class.
+		if (isSheetEmptyMap == null) {
+			try {
+				isSheetEmptyMap = CapraOfficeUtils.getSheetsEmptinessInfo(
+						CapraOfficeUtils.getExcelWorkbook(((CapraExcelRow) (selection.get(0))).getFile()));
+			} catch (OldExcelFormatException | IOException e) {
+				LOG.debug("Could not open Excel file.", e);
+			}
+		}
+
+		return isSheetEmptyMap;
+	}
+
+	/**
+	 * Getter method for the name of currently displayed sheet.
+	 * 
+	 * @return name of currently displayed sheet or null if none is displayed.
+	 */
+	public String getSelectedSheetName() {
+		return selectedSheetName;
+	}
+
+	/**
+	 * Provides the instance of the view.
+	 * 
+	 * @return instance of the view.
+	 */
+	public static OfficeView getOpenedView() {
+		try {
+			return (OfficeView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ID);
+		} catch (PartInitException e) {
+			LOG.debug("Could not open office view.", e);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Refreshes the Office view.
+	 */
+	public void refreshView() {
+
+		if (selection.isEmpty()) {
+			return;
+		}
+		if (selection.get(0) instanceof CapraExcelRow) {
+			parseExcelDocument(selectedFile, selectedFileId, selectedSheetName);
+		} else if (selection.get(0) instanceof CapraWordRequirement) {
+			parseWordDocument(selectedFile);
+		}
+	}
+
+	/**
+	 * Enable context menu for this view.
+	 */
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager manager) {
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	private void showErrorMessage(String caption, String message, String url) {
+		new HyperlinkDialog(new HyperlinkDialog.HyperlinkDialogParameter(viewer.getControl().getShell(), caption, null, MessageDialog.ERROR, new String[] { "OK" }, 0), message, url).open();
+	}
+
+	/**
+	 * A pop-up dialog that can contain a hyperlink that, on click, opens a
+	 * browser window at the provided url.
+	 */
+	static class HyperlinkDialog extends MessageDialog {
+
+		private static final int PREFERRED_DIALOG_WIDTH = 300;
+		private String hyperlinkMessage;
+		private String url;
+
+		public static class HyperlinkDialogParameter {
+			public Shell parentShell;
+			public String dialogTitle;
+			public Image dialogTitleImage;
+			public int dialogImageType;
+			public String[] dialogButtonLabels;
+			public int defaultIndex;
+
+			public HyperlinkDialogParameter(Shell parentShell, String dialogTitle, Image dialogTitleImage,
+					int dialogImageType, String[] dialogButtonLabels, int defaultIndex) {
+				this.parentShell = parentShell;
+				this.dialogTitle = dialogTitle;
+				this.dialogTitleImage = dialogTitleImage;
+				this.dialogImageType = dialogImageType;
+				this.dialogButtonLabels = dialogButtonLabels;
+				this.defaultIndex = defaultIndex;
+			}
+		}
+
+		/**
+		 * A constructor that creates the dialog with the provided parameters.
+		 * Call open() in order to display the dialog.
+		 * @param parameterObject TODO
+		 * @param hyperlinkMessage
+		 *            a String that will be shown to the user and can contain a
+		 *            hyperlink, that will, on click, open a browser window at
+		 *            the provided url
+		 * @param url
+		 *            the hyperlink to the web page, or null, if not required
+		 */
+		public HyperlinkDialog(HyperlinkDialogParameter parameterObject, String hyperlinkMessage, String url) {
+			super(parameterObject.parentShell, parameterObject.dialogTitle, parameterObject.dialogTitleImage, null, parameterObject.dialogImageType, parameterObject.dialogButtonLabels, parameterObject.defaultIndex);
+			this.hyperlinkMessage = hyperlinkMessage;
+			this.url = url;
+		}
+
+		protected Control createCustomArea(Composite parent) {
+			Link link = new Link(parent, SWT.None);
+			link.setText(hyperlinkMessage);
+			GridData gd = new GridData();
+			gd.widthHint = PREFERRED_DIALOG_WIDTH;
+			link.setLayoutData(gd);
+			if (url != null && !url.contentEquals("")) {
+				link.setToolTipText(url);
+				link.addSelectionListener(new SelectionAdapter() {
+					public void widgetSelected(SelectionEvent e) {
+						try {
+							Desktop.getDesktop().browse(new URI(url));
+							HyperlinkDialog.this.okPressed();
+						} catch (IOException e1) {
+							LOG.info("No default browser found.", e);
+						} catch (URISyntaxException e1) {
+							LOG.info("Provided malformed URI.", e);
+						}
+					}
+				});
+			}
+			return link;
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/SelectSheetDynamicMenu.java b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/SelectSheetDynamicMenu.java
new file mode 100644
index 0000000..e742e32
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.office/src/org/eclipse/capra/ui/office/views/SelectSheetDynamicMenu.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * 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.office.views;
+
+import java.util.Map;
+
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+
+/**
+ * A class tasked with dynamically filling the sheet-select context menu with
+ * names of all the sheets contained in the currently opened Excel workbook.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class SelectSheetDynamicMenu extends ContributionItem {
+
+	@Override
+	public void fill(Menu menu, int index) {
+
+		// A HashMap that holds information about the emptiness of sheets. Key -
+		// sheetName, value - true if map is empty, false otherwise
+		Map<String, Boolean> isSheetEmptyMap = OfficeView.getOpenedView().getIsSheetEmptyMap();
+
+		if (isSheetEmptyMap == null)
+			return;
+
+		// Add sheetNames to the dynamic context menu and make them
+		// un-selectable if they are empty
+		for (String sheetName : isSheetEmptyMap.keySet()) {
+			MenuItem menuItem = new MenuItem(menu, SWT.CHECK, index);
+
+			menuItem.addSelectionListener(new SelectionListener() {
+
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					OfficeView.getOpenedView().displaySheet(menuItem.getText());
+				}
+
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) {
+					OfficeView.getOpenedView().displaySheet(menuItem.getText());
+				}
+			});
+
+			if (OfficeView.getOpenedView().getSelectedSheetName().contentEquals(sheetName)) {
+				menuItem.setSelection(true);
+			}
+			if (!isSheetEmptyMap.get(sheetName)) {
+				menuItem.setText(sheetName);
+			} else {
+				menuItem.setText(sheetName + " (Empty)");
+				menuItem.setEnabled(false);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.capra.ui.plantuml/.classpath b/bundles/org.eclipse.capra.ui.plantuml/.classpath
similarity index 100%
rename from org.eclipse.capra.ui.plantuml/.classpath
rename to bundles/org.eclipse.capra.ui.plantuml/.classpath
diff --git a/org.eclipse.capra.ui.plantuml/.gitignore b/bundles/org.eclipse.capra.ui.plantuml/.gitignore
similarity index 100%
rename from org.eclipse.capra.ui.plantuml/.gitignore
rename to bundles/org.eclipse.capra.ui.plantuml/.gitignore
diff --git a/org.eclipse.capra.ui.plantuml/.project b/bundles/org.eclipse.capra.ui.plantuml/.project
similarity index 100%
rename from org.eclipse.capra.ui.plantuml/.project
rename to bundles/org.eclipse.capra.ui.plantuml/.project
diff --git a/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.core.resources.prefs
similarity index 100%
rename from org.eclipse.capra.ui.plantuml/.settings/org.eclipse.core.resources.prefs
rename to bundles/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.core.resources.prefs
diff --git a/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.ui.plantuml/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.ui.plantuml/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..311fc76
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui.plantuml;singleton:=true
+Bundle-Version: 0.7.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.xtext.xbase.lib,
+ org.eclipse.xtend.lib,
+ 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"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.capra.ui.plantuml
+Bundle-Vendor: %Bundle-Vendor
+
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
new file mode 100644
index 0000000..da5bc53
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# 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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.plantuml
+command.name.transitivity = Toggle Transitivity
+command.label.transitivity = Show transitive links
+command.name.graph = Display graph
+command.label.graph = Display graph
+command.name.internalLinks= Show internal links
+command.label.internalLinks = Show internal links
+command.name.relationshipTypes = Select relationship types
+command.label.relationshipTypes= Select relationship types
+command.name.depth = Set transitivity depth
+command.label.depth = Set transitivity depth
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Trace Visualisation Support (PlantUML)
diff --git a/bundles/org.eclipse.capra.ui.plantuml/build.properties b/bundles/org.eclipse.capra.ui.plantuml/build.properties
new file mode 100644
index 0000000..82ec81b
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/build.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# 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.. = xtend-gen/,\
+           src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               OSGI-INF/,\
+               OSGI-INF/l10n/bundle.properties
diff --git a/bundles/org.eclipse.capra.ui.plantuml/plugin.xml b/bundles/org.eclipse.capra.ui.plantuml/plugin.xml
new file mode 100644
index 0000000..1a783a9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/plugin.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="net.sourceforge.plantuml.eclipse.diagramTextProvider">
+      <diagramTextProvider
+            providerClass="org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler">
+      </diagramTextProvider>
+   </extension>
+   <extension
+         point="org.eclipse.ui.views">
+      <view
+            category="org.eclipse.capra.generic.views"
+            class="org.eclipse.capra.ui.plantuml.views.CapraPlantUmlView"
+            icon="platform:/plugin/org.eclipse.capra.ui/icons/capra.png"
+            id="org.eclipse.capra.ui.plantuml.views.CapraPlantUmlView"
+            name="Capra PlantUML Viewer">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.commands">
+     
+      <command
+            id="org.eclipse.capra.ui.plantuml.toggleTransitivity"
+            name="%command.name.transitivity">
+         <state
+               class="org.eclipse.jface.commands.ToggleState"
+               id="org.eclipse.ui.commands.toggleState">
+         </state>
+      </command>
+      <command
+            id="org.eclipse.capra.ui.plantuml.displayGraph"
+            name="%command.name.graph">
+         <state
+               class="org.eclipse.jface.commands.ToggleState"
+               id="org.eclipse.ui.commands.toggleState">
+         </state>
+      </command>
+      <command
+            id="org.eclipse.capra.ui.plantuml.toggleInternalLinks"
+            name="%command.name.internalLinks">
+            <state
+               class="org.eclipse.jface.commands.ToggleState"
+               id="org.eclipse.ui.commands.toggleState">
+         </state>
+      </command>
+      <command
+            id="org.eclipse.capra.ui.plantuml.selectRelationships"
+            name="%command.name.relationshipTypes">
+      </command>
+      <command
+            id="org.eclipse.capra.ui.plantuml.transitivtyDepth"
+            name="%command.name.depth">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler"
+            commandId="org.eclipse.capra.ui.plantuml.toggleTransitivity">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.plantuml.ToggleDisplayGraphHandler"
+            commandId="org.eclipse.capra.ui.plantuml.displayGraph">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.plantuml.DisplayInternalLinksHandler"
+            commandId="org.eclipse.capra.ui.plantuml.toggleInternalLinks">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.plantuml.SelectRelationshipsHandler"
+            commandId="org.eclipse.capra.ui.plantuml.selectRelationships">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.plantuml.TransitivityDepthHandler"
+            commandId="org.eclipse.capra.ui.plantuml.transitivtyDepth">
+      </handler>
+   </extension>
+	<extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="menu:org.eclipse.capra.ui.plantuml.views.CapraPlantUmlView?after=additions">
+         <command
+               commandId="org.eclipse.capra.ui.plantuml.toggleTransitivity"
+               label="%command.label.transitivity"
+               style="toggle">
+         </command>
+         <command
+               commandId="org.eclipse.capra.ui.plantuml.displayGraph"
+               label="%command.label.graph"
+               style="toggle">
+         </command>
+     	<command
+               commandId="org.eclipse.capra.ui.plantuml.toggleInternalLinks"
+               label="%command.label.internalLinks"
+               style="toggle">
+         </command>
+         <command
+               commandId="org.eclipse.capra.ui.plantuml.selectRelationships"
+               label="%command.label.relationshipTypes"
+               style="push">
+         </command>
+         <command
+               commandId="org.eclipse.capra.ui.plantuml.transitivtyDepth"
+               label="%command.label.depth"
+               style="push">
+         </command>
+      </menuContribution>
+   </extension>
+   
+   <extension
+         point="org.eclipse.ui.perspectiveExtensions">
+      <perspectiveExtension
+            targetID="org.eclipse.capra.generic.perspective.CapraPerspective">
+         <view
+               id="org.eclipse.capra.ui.plantuml.views.CapraPlantUmlView"
+               minimized="false"
+               ratio="0.25"
+               relationship="right"
+               relative="org.eclipse.capra.generic.views.SelectionView">
+         </view>
+      </perspectiveExtension>
+   </extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.plantuml/pom.xml b/bundles/org.eclipse.capra.ui.plantuml/pom.xml
new file mode 100644
index 0000000..e1c8535
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.plantuml</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/Connections.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/Connections.java
new file mode 100644
index 0000000..eaa620e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/Connections.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.Connection;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+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.generic.artifactmodel.ArtifactWrapper;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import com.google.common.base.Strings;
+
+/**
+ * Helper class for generating PlantUML diagrams from a collection of
+ * {@link Connection}
+ *
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class Connections {
+
+	private static final String CHARACTERS_TO_BE_REMOVED = "[\", \']";
+	private List<Connection> connections;
+	private EObject origin;
+
+	private Set<EObject> allObjects;
+	private Map<EObject, String> object2Id;
+	private Map<String, String> id2Label;
+	private Map<String, String> id2Location;
+
+	Connections(List<Connection> connections, List<EObject> selectedObjects) {
+		this.connections = connections;
+		origin = selectedObjects.get(0);
+
+		allObjects = new LinkedHashSet<>();
+		allObjects.addAll(selectedObjects);
+		connections.forEach(c -> allObjects.addAll(c.getTargets()));
+
+		object2Id = new LinkedHashMap<>();
+		int i = 0;
+		for (EObject o : allObjects) {
+			object2Id.put(o, "o" + i++);
+		}
+
+		id2Label = new LinkedHashMap<>();
+		allObjects.forEach(o -> {
+			String id = object2Id.get(o);
+			id2Label.put(id, getArtifactLabel(o));
+		});
+
+		id2Location = new LinkedHashMap<>();
+		allObjects.forEach(o -> {
+			String id = object2Id.get(o);
+			id2Location.put(id, getArtifactLocation(o));
+		});
+	}
+
+	public String originLabel() {
+		return id2Label.get(object2Id.get(origin));
+	}
+
+	public String originLocation() {
+		return id2Location.get(object2Id.get(origin));
+	}
+
+	public boolean originHasLocation() {
+		return !Strings.isNullOrEmpty(id2Location.get(object2Id.get(origin)));
+	}
+
+	public String originId() {
+		return object2Id.get(origin);
+	}
+
+	public Collection<String> objectIdsWithoutOrigin() {
+		Collection<String> all = new ArrayList<>();
+		all.addAll(object2Id.values());
+		all.remove(originId());
+		return all;
+	}
+
+	public String label(String id) {
+		return id2Label.get(id);
+	}
+
+	public String location(String id) {
+		return id2Location.get(id);
+	}
+
+	public boolean hasLocation(String id) {
+		return !Strings.isNullOrEmpty(id2Location.get(id));
+	}
+
+	public List<String> arrows() {
+		Set<String> arrows = new HashSet<>();
+
+		connections.forEach(c -> {
+			c.getTargets().forEach(trg -> {
+				if (!trg.equals(c.getOrigin())) {
+					arrows.add(object2Id.get(c.getOrigin()) + "--" + object2Id.get(trg) + ":"
+							+ EMFHelper.getIdentifier(c.getTlink()));
+				}
+			});
+		});
+
+		return arrows.stream().collect(Collectors.toList());
+	}
+
+	/**
+	 * The method gets the label of the element to be used for display in the
+	 * plant UML graph view and matrix view
+	 *
+	 * @param object
+	 *            The object for which the label is needed. This can be an EMF
+	 *            original representation or an artifact wrapper if the original
+	 *            object was not an EMF element
+	 * @return The label to be displayed
+	 */
+	public static String getArtifactLabel(EObject object) {
+		String artifactLabel = null;
+		ResourceSet resourceSet = new ResourceSetImpl();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		Object originalObject = artifactHelper.unwrapWrapper(object);
+
+		if (originalObject != null) {
+			IArtifactHandler<?> handler = artifactHelper.getHandler(originalObject).get();
+			artifactLabel = handler.withCastedHandler(originalObject, (h, o) -> h.getDisplayName(o))
+					.orElseThrow(IllegalArgumentException::new);
+		} else { // original object cannot be resolved
+			// therefore use the wrapper name
+			String label = EMFHelper.getIdentifier(object);
+			artifactLabel = label.substring(0, label.indexOf(':'));
+		}
+		// remove unwanted characters like ", '
+		if (artifactLabel != null) {
+			return artifactLabel.replaceAll(CHARACTERS_TO_BE_REMOVED, " ");
+		} else {
+			// This can happen if the trace model contains elements for which
+			// the artifact handler is not available.
+			// While this should not happen in a user installation, it is not
+			// uncommon during testing.
+			return "Unknown (no fitting artifact handler found)";
+		}
+	}
+
+	/**
+	 * Retrieves the location of the given object in the workspace, resolving
+	 * artifact wrappers as necessary.
+	 * <p>
+	 * This method relies on the correct setting of the {@code URI} attribute of
+	 * the corresponding {@link ArtifactWrapper}. The URI should be recognisable
+	 * by the platform to ensure that the correct editor is opened.
+	 * 
+	 * @param object
+	 *            the {@code EObject} (or {@code ArtifactWrapper}) to get the
+	 *            link for
+	 * @return a platform URI that can be used to resolve the object or
+	 *         {@code null} if none can be found
+	 */
+	public static String getArtifactLocation(EObject object) {
+		String artifactLink = null;
+		if (object instanceof ArtifactWrapper) {
+			ArtifactWrapper wrapper = (ArtifactWrapper) object;
+			artifactLink = wrapper.getUri();
+		} else {
+			try {
+				artifactLink = EcoreUtil.getURI(object).toPlatformString(false);
+			} catch (IllegalArgumentException ex) {
+				// Deliberately do nothing
+			}
+		}
+		if (!Strings.isNullOrEmpty(artifactLink) && artifactLink.startsWith("/")) {
+			artifactLink = "platform:/resource" + artifactLink;
+		}
+		return artifactLink;
+	}
+}
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
new file mode 100644
index 0000000..68162b4
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java
@@ -0,0 +1,264 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+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.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.ui.helpers.TraceCreationHelper;
+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.viewers.ISelection;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPart;
+
+import net.sourceforge.plantuml.eclipse.utils.DiagramTextProvider;
+import net.sourceforge.plantuml.eclipse.views.PlantUmlView;
+
+/**
+ * Provides PlantUML with a string representation of elements connected by trace
+ * links.
+ *
+ * @author Anthony Anjorin, Salome Maro, Jan-Philipp Steghöfer
+ */
+public class DiagramTextProviderHandler implements DiagramTextProvider {
+	private EObject artifactModel = null;
+
+	@Override
+	public String getDiagramText(IEditorPart editor, ISelection input) {
+		return (getDiagramText((IWorkbenchPart) editor, input));
+	}
+
+	@Override
+	public String getDiagramText(IViewPart view, ISelection input) {
+		return (getDiagramText((IWorkbenchPart) view, input));
+	}
+
+	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()));
+		}
+		return getDiagramText(selectedModels);
+	}
+
+	@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;
+		List<Connection> traces = new ArrayList<>();
+
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		TraceMetaModelAdapter metamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+
+		artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+
+		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)));
+					} 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);
+							}
+						}
+
+					}
+				}
+			}
+		}
+		if (DisplayInternalLinksHandler.areInternalLinksShown()) {
+			return VisualizationHelper.createMatrix(traceModel, firstModelElements, secondModelElements, true);
+		} else {
+			return VisualizationHelper.createMatrix(traceModel, firstModelElements, secondModelElements, false);
+		}
+
+	}
+
+	@Override
+	public boolean supportsEditor(IEditorPart editor) {
+		return true;
+	}
+
+	@Override
+	public boolean supportsView(IViewPart part) {
+		if (part instanceof PlantUmlView) {
+			return false;
+		}
+		return true;
+	}
+
+	@Override
+	public boolean supportsSelection(ISelection selection) {
+		return true;
+	}
+
+	private static List<EObject> extractLinksFromTraces(List<Connection> traces) {
+		List<EObject> links = new ArrayList<>();
+		for (Connection trace : traces) {
+			if (!links.contains(trace.getTlink())) {
+				links.add(trace.getTlink());
+			}
+		}
+		return links;
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DisplayInternalLinksHandler.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DisplayInternalLinksHandler.java
new file mode 100644
index 0000000..8b7eead
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DisplayInternalLinksHandler.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Toggles between showing (DSL) internal links or not
+ * 
+ * @author Dominik Einkemmer
+ */
+public class DisplayInternalLinksHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		if (areInternalLinksShown())
+			showInternalLinks(false);
+		else
+			showInternalLinks(true);
+
+		return null;
+	}
+
+	/**
+	 * Checks whether the trace view is set to show transitive traces.
+	 * 
+	 * @return {@code true} if transitive traces are enabled, {@code false}
+	 *         otherwise
+	 */
+	public static boolean areInternalLinksShown() {
+		Preferences internalLinks = getPreference();
+
+		return internalLinks.get("option", "turnedOff").equals("shown");
+	}
+
+	private static Preferences getPreference() {
+		Preferences preferences = InstanceScope.INSTANCE.getNode("org.eclipse.capra.ui.plantuml.toggleInternalLinks");
+		Preferences transitivity = preferences.node("internalLinks");
+		return transitivity;
+	}
+
+	/**
+	 * Sets whether the trace view is set to show transitive traces.
+	 * 
+	 * @param value
+	 *            indicates whether transitive traces should be shown
+	 */
+	public static void showInternalLinks(boolean value) {
+		Preferences internalLinks = getPreference();
+
+		internalLinks.put("option", value ? "shown" : "turnedOff");
+
+		try {
+			// forces the application to save the preferences
+			internalLinks.flush();
+		} catch (BackingStoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/SelectRelationshipsHandler.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/SelectRelationshipsHandler.java
new file mode 100644
index 0000000..68052e7
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/SelectRelationshipsHandler.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.dialogs.ListSelectionDialog;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Toggles between showing (DSL) internal links or not
+ * 
+ * @author Dominik Einkemmer
+ */
+public class SelectRelationshipsHandler extends AbstractHandler {
+	protected static List<String> selectedRelationshipTypes = new ArrayList<>();
+	protected static List<String> possibleRelationshipTypes = new ArrayList<>();
+	protected static EObject previousElement = null;
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
+
+		ListSelectionDialog dialog = new ListSelectionDialog(window.getShell(), possibleRelationshipTypes,
+				new ArrayContentProvider(), new LabelProvider() {
+					@Override
+					public String getText(Object element) {
+						return (String) element;
+					}
+				}, "Selection:");
+		dialog.setTitle("Select Relationships you want to include");
+		dialog.setInitialElementSelections(selectedRelationshipTypes);
+
+		if (dialog.open() == Window.OK) {
+			Object[] results = dialog.getResult();
+			List<String> selectedRelations = new ArrayList<>();
+			for (Object res : results) {
+				selectedRelations.add((String) res);
+			}
+			selectedRelationshipTypes = selectedRelations;
+		}
+
+		return null;
+	}
+
+	public static void addToPossibleRelationsForSelection(String className) {
+		if (!possibleRelationshipTypes.contains(className)) {
+			possibleRelationshipTypes.add(className);
+		}
+	}
+
+	public static void addToPossibleRelationsForSelection(List<EObject> objects) {
+		for (EObject obj : objects) {
+			String className = obj.eClass().getName();
+			if (!possibleRelationshipTypes.contains(className)) {
+				possibleRelationshipTypes.add(className);
+			}
+		}
+	}
+
+	public static void clearPossibleRelationsForSelection() {
+		possibleRelationshipTypes.clear();
+	}
+
+	public static List<String> getSelectedRelationshipTypes() {
+		return selectedRelationshipTypes;
+	}
+
+	public static void emptySelectedRelationshipTypes() {
+		selectedRelationshipTypes.clear();
+	}
+
+	public static EObject getPreviousElement() {
+		return previousElement;
+	}
+
+	public static void setPreviousElement(EObject prevElement) {
+		previousElement = prevElement;
+	}
+}
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
new file mode 100644
index 0000000..00e9531
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleDisplayGraphHandler.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Toggles between showing displaying a graph and a matrix if several model
+ * elements are selected.
+ * 
+ * @author Jan-Philipp Steghöfer
+ */
+public class ToggleDisplayGraphHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		Command command = event.getCommand();
+		boolean oldValue = HandlerUtil.toggleCommandState(command);
+		setDisplayGraph(!oldValue);
+		return null;
+	}
+
+	/**
+	 * Checks whether the trace view is set to show a graph.
+	 * 
+	 * @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");
+	}
+
+	private static Preferences getPreference() {
+		Preferences preferences = InstanceScope.INSTANCE.getNode("org.eclipse.capra.ui.plantuml.displayGraph");
+		Preferences transitivity = preferences.node("displayGraph");
+		return transitivity;
+	}
+
+	/**
+	 * 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
+	 * 
+	 */
+	public static void setDisplayGraph(boolean value) {
+		Preferences transitivity = getPreference();
+
+		transitivity.put("option", value ? "graph" : "matrix");
+
+		try {
+			// forces the application to save the preferences
+			transitivity.flush();
+		} catch (BackingStoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..54829df
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/ToggleTransitivityHandler.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Toggles between showing transitive and direct links
+ *
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class ToggleTransitivityHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		Command command = event.getCommand();
+		boolean oldValue = HandlerUtil.toggleCommandState(command);
+		setTraceViewTransitive(!oldValue);
+		return null;
+	}
+
+	/**
+	 * Checks whether the trace view is set to show transitive traces.
+	 *
+	 * @return {@code true} if transitive traces are enabled, {@code false}
+	 *         otherwise
+	 */
+	public static boolean isTraceViewTransitive() {
+		Preferences transitivity = getPreference();
+
+		return transitivity.get("option", "direct").equals("direct");
+	}
+
+	private static Preferences getPreference() {
+		Preferences preferences = InstanceScope.INSTANCE.getNode("org.eclipse.capra.ui.plantuml.toggleTransitivity");
+		Preferences transitivity = preferences.node("transitivity");
+		return transitivity;
+	}
+
+	/**
+	 * Sets whether the trace view is set to show transitive traces.
+	 *
+	 * @param value
+	 *            indicates whether transitive traces should be shown
+	 */
+	public static void setTraceViewTransitive(boolean value) {
+		Preferences transitivity = getPreference();
+		transitivity.put("option", value ? "direct" : "transitive");
+
+		try {
+			// forces the application to save the preferences
+			transitivity.flush();
+		} catch (BackingStoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/TransitivityDepthHandler.java b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/TransitivityDepthHandler.java
new file mode 100644
index 0000000..24c713d
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/TransitivityDepthHandler.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * 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.plantuml;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Toggles between showing transitive and direct links
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class TransitivityDepthHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
+		String initialValue = getTransitivityDepth();
+		InputDialog depthInput = new InputDialog(window.getShell(), "Transitivity depth",
+				"Input the desired depth limit for transitivity. Enter 0 if no limit is desired.", initialValue, null);
+		if (depthInput.open() == Window.OK) {
+			String depth = depthInput.getValue();
+			setTransitivityDepth(depth);
+		}
+
+		return null;
+	}
+
+	/**
+	 * Gets the depth that was set by the user for transitivity returns 0 in
+	 * case no depth was set or no depth limit is wanted
+	 * 
+	 * @return
+	 */
+	public static String getTransitivityDepth() {
+		Preferences transitivity = getPreference();
+		return transitivity.get("option", "0");
+	}
+
+	private static Preferences getPreference() {
+		Preferences preferences = InstanceScope.INSTANCE.getNode("org.eclipse.capra.ui.plantuml.transitivityDepth");
+		Preferences transitivity = preferences.node("transitivityDepth");
+		return transitivity;
+	}
+
+	/**
+	 * Sets whether the trace view is set to show transitive traces.
+	 * 
+	 * @param value
+	 *            indicates whether transitive traces should be shown
+	 */
+	public static void setTransitivityDepth(String depth) {
+		Preferences transitivity = getPreference();
+
+		transitivity.put("option", depth);
+
+		try {
+			// forces the application to save the preferences
+			transitivity.flush();
+		} catch (BackingStoreException e) {
+			e.printStackTrace();
+		}
+	}
+}
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
new file mode 100644
index 0000000..f802cb8
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend
@@ -0,0 +1,47 @@
+package org.eclipse.capra.ui.plantuml
+
+import java.util.Collection
+import java.util.List
+import org.eclipse.capra.core.adapters.Connection
+import org.eclipse.capra.core.helpers.ExtensionPointHelper
+
+import org.eclipse.emf.ecore.EObject
+
+class VisualizationHelper {
+	def static String createMatrix(EObject traceModel, Collection<EObject> firstElements, Collection<EObject> secondElements, Boolean internalLinks){
+	val traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get()
+	'''
+	@startuml
+	salt
+	{#
+	«IF firstElements != null»
+	.«FOR e : secondElements»|«Connections.getArtifactLabel(e)»«ENDFOR»
+	«FOR first : firstElements»«Connections.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»
+	«ENDFOR»
+	«ELSE»
+	Choose two containers to show a traceability matrix of their contents.
+	«ENDIF»
+	}
+	
+	@enduml
+	'''
+	} 
+	
+	def static String createNeighboursView(List<Connection> connections, List<EObject> selectedObjects){
+	var helper = new Connections(connections, selectedObjects);
+	'''
+	@startuml
+	object "«helper.originLabel()»«IF helper.originHasLocation()» [[«helper.originLocation()» (Go to)]]«ENDIF»" as «helper.originId()» #pink
+	«FOR id:helper.objectIdsWithoutOrigin()»
+	object "«helper.label(id)»«IF helper.hasLocation(id)» [[«helper.location(id)» (Go to)]]«ENDIF»" as «id»
+	«ENDFOR»
+	«FOR a:helper.arrows()» 
+	«a»
+	«ENDFOR» 
+	@enduml
+	''' 
+	}
+} 
+  
+
+ 
\ No newline at end of file
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
new file mode 100644
index 0000000..478d039
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/views/CapraPlantUmlView.java
@@ -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
+ *******************************************************************************/
+package org.eclipse.capra.ui.plantuml.views;
+
+import net.sourceforge.plantuml.eclipse.views.PlantUmlView;
+
+/**
+ * A simple extension of {@link PlantUmlView} to serve as the entry point for
+ * menu contributions and later extensions.
+ */
+public class CapraPlantUmlView extends PlantUmlView {
+
+}
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
new file mode 100644
index 0000000..1223d2a
--- /dev/null
+++ 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/.gitignore b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.gitignore
new file mode 100644
index 0000000..2801d59
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.gitignore
@@ -0,0 +1,3 @@
+/.VisualizationHelper.java._trace
+/.VisualizationHelper.xtendbin
+/VisualizationHelper.java
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
new file mode 100644
index 0000000..d4a5ba1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java
@@ -0,0 +1,144 @@
+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.ExtensionPointHelper;
+import org.eclipse.capra.ui.plantuml.Connections;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtend2.lib.StringConcatenation;
+
+@SuppressWarnings("all")
+public class VisualizationHelper {
+  public static String createMatrix(final EObject traceModel, final Collection<EObject> firstElements, final Collection<EObject> secondElements, final Boolean internalLinks) {
+    String _xblockexpression = null;
+    {
+      Optional<TraceMetaModelAdapter> _traceMetamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter();
+      final TraceMetaModelAdapter traceAdapter = _traceMetamodelAdapter.get();
+      StringConcatenation _builder = new StringConcatenation();
+      _builder.append("@startuml");
+      _builder.newLine();
+      _builder.append("salt");
+      _builder.newLine();
+      _builder.append("{#");
+      _builder.newLine();
+      {
+        boolean _notEquals = (!Objects.equal(firstElements, null));
+        if (_notEquals) {
+          _builder.append(".");
+          {
+            for(final EObject e : secondElements) {
+              _builder.append("|");
+              String _artifactLabel = Connections.getArtifactLabel(e);
+              _builder.append(_artifactLabel, "");
+            }
+          }
+          _builder.newLineIfNotEmpty();
+          {
+            for(final EObject first : firstElements) {
+              String _artifactLabel_1 = Connections.getArtifactLabel(first);
+              _builder.append(_artifactLabel_1, "");
+              {
+                for(final EObject second : secondElements) {
+                  _builder.append(" |");
+                  {
+                    if ((internalLinks).booleanValue()) {
+                      {
+                        if ((traceAdapter.isThereATraceBetween(first, second, traceModel) || traceAdapter.isThereAnInternalTraceBetween(first, second))) {
+                          _builder.append("X");
+                        } else {
+                          _builder.append(".");
+                        }
+                      }
+                    } else {
+                      {
+                        boolean _isThereATraceBetween = traceAdapter.isThereATraceBetween(first, second, traceModel);
+                        if (_isThereATraceBetween) {
+                          _builder.append("X");
+                        } else {
+                          _builder.append(".");
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+              _builder.newLineIfNotEmpty();
+            }
+          }
+        } else {
+          _builder.append("Choose two containers to show a traceability matrix of their contents.");
+          _builder.newLine();
+        }
+      }
+      _builder.append("}");
+      _builder.newLine();
+      _builder.newLine();
+      _builder.append("@enduml");
+      _builder.newLine();
+      _xblockexpression = _builder.toString();
+    }
+    return _xblockexpression;
+  }
+  
+  public static String createNeighboursView(final List<Connection> connections, final List<EObject> selectedObjects) {
+    String _xblockexpression = null;
+    {
+      Connections helper = new Connections(connections, selectedObjects);
+      StringConcatenation _builder = new StringConcatenation();
+      _builder.append("@startuml");
+      _builder.newLine();
+      _builder.append("object \"");
+      String _originLabel = helper.originLabel();
+      _builder.append(_originLabel, "");
+      {
+        boolean _originHasLocation = helper.originHasLocation();
+        if (_originHasLocation) {
+          _builder.append(" [[");
+          String _originLocation = helper.originLocation();
+          _builder.append(_originLocation, "");
+          _builder.append(" (Go to)]]");
+        }
+      }
+      _builder.append("\" as ");
+      String _originId = helper.originId();
+      _builder.append(_originId, "");
+      _builder.append(" #pink");
+      _builder.newLineIfNotEmpty();
+      {
+        Collection<String> _objectIdsWithoutOrigin = helper.objectIdsWithoutOrigin();
+        for(final String id : _objectIdsWithoutOrigin) {
+          _builder.append("object \"");
+          String _label = helper.label(id);
+          _builder.append(_label, "");
+          {
+            boolean _hasLocation = helper.hasLocation(id);
+            if (_hasLocation) {
+              _builder.append(" [[");
+              String _location = helper.location(id);
+              _builder.append(_location, "");
+              _builder.append(" (Go to)]]");
+            }
+          }
+          _builder.append("\" as ");
+          _builder.append(id, "");
+          _builder.newLineIfNotEmpty();
+        }
+      }
+      {
+        List<String> _arrows = helper.arrows();
+        for(final String a : _arrows) {
+          _builder.append(a, "");
+          _builder.newLineIfNotEmpty();
+        }
+      }
+      _builder.append("@enduml");
+      _builder.newLine();
+      _xblockexpression = _builder.toString();
+    }
+    return _xblockexpression;
+  }
+}
diff --git a/org.eclipse.capra.handler.emf/.classpath b/bundles/org.eclipse.capra.ui.reqif/.classpath
similarity index 100%
copy from org.eclipse.capra.handler.emf/.classpath
copy to bundles/org.eclipse.capra.ui.reqif/.classpath
diff --git a/bundles/org.eclipse.capra.ui.reqif/.project b/bundles/org.eclipse.capra.ui.reqif/.project
new file mode 100644
index 0000000..391ab62
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.reqif</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/org.eclipse.capra.generic.priority/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.reqif/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.generic.priority/.settings/org.eclipse.jdt.core.prefs
copy to bundles/org.eclipse.capra.ui.reqif/.settings/org.eclipse.jdt.core.prefs
diff --git a/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b4aa761
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: ReqIf UI Plugin
+Bundle-SymbolicName: org.eclipse.capra.ui.reqif;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.jface,
+ org.eclipse.ui.workbench,
+ org.eclipse.equinox.preferences,
+ org.eclipse.capra.handler.reqIf
+Export-Package: org.eclipse.capra.ui.reqif.preferences
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Capra Development Team
diff --git a/bundles/org.eclipse.capra.ui.reqif/build.properties b/bundles/org.eclipse.capra.ui.reqif/build.properties
new file mode 100644
index 0000000..af525cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/bundles/org.eclipse.capra.ui.reqif/plugin.xml b/bundles/org.eclipse.capra.ui.reqif/plugin.xml
new file mode 100644
index 0000000..c749c9b
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/plugin.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+<plugin>
+<extension
+         point="org.eclipse.core.runtime.preferences">
+      <initializer
+            class="org.eclipse.capra.ui.reqif.preferences.ReqifPreferenceInitializer">
+      </initializer>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            category="org.eclipse.capra.ui.preferences.CapraPreferences"
+            class="org.eclipse.capra.ui.reqif.preferences.ReqifPreferencePage"
+            id="org.eclipse.capra.handler.reqif.preferences.ReqifPreferencePage"
+            name="Reqif Preferences">
+      </page>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.reqif/pom.xml b/bundles/org.eclipse.capra.ui.reqif/pom.xml
new file mode 100644
index 0000000..950ef48
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.reqif</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.reqif/src/org/eclipse/capra/ui/reqif/preferences/ReqifPreferenceInitializer.java b/bundles/org.eclipse.capra.ui.reqif/src/org/eclipse/capra/ui/reqif/preferences/ReqifPreferenceInitializer.java
new file mode 100644
index 0000000..280bfb1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/src/org/eclipse/capra/ui/reqif/preferences/ReqifPreferenceInitializer.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.reqif.preferences;
+
+import org.eclipse.capra.handler.reqif.preferences.ReqifPreferences;
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+public class ReqifPreferenceInitializer extends AbstractPreferenceInitializer {
+
+
+	public ReqifPreferenceInitializer() {
+
+	}
+
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE,
+				ReqifPreferencePage.REQIF_PREFERENCE_PAGE_ID);
+		store.setDefault(ReqifPreferences.REQIF_ID_ATTRIBUTE, ReqifPreferences.REQIF_ID_ATTRIBUTE_DEFAULT);
+
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.reqif/src/org/eclipse/capra/ui/reqif/preferences/ReqifPreferencePage.java b/bundles/org.eclipse.capra.ui.reqif/src/org/eclipse/capra/ui/reqif/preferences/ReqifPreferencePage.java
new file mode 100644
index 0000000..3f0d448
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.reqif/src/org/eclipse/capra/ui/reqif/preferences/ReqifPreferencePage.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.reqif.preferences;
+
+import org.eclipse.capra.handler.reqif.preferences.ReqifPreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+public class ReqifPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+	public static final String REQIF_PREFERENCE_PAGE_ID = "org.eclipse.capra.ui.reqif";
+	public static final String ID_ATTRIBUTE = "Attribute containing requirement ID";
+	private StringFieldEditor stringEditor;
+
+	public ReqifPreferencePage() {
+		super(GRID);
+	}
+
+	@Override
+	protected void createFieldEditors() {
+		stringEditor = new StringFieldEditor(ReqifPreferences.REQIF_ID_ATTRIBUTE, ID_ATTRIBUTE,
+				getFieldEditorParent());
+		addField(stringEditor);
+	}
+
+	@Override
+	public void init(IWorkbench workbench) {
+		setPreferenceStore(
+				new ScopedPreferenceStore(InstanceScope.INSTANCE, REQIF_PREFERENCE_PAGE_ID));
+		setDescription(null);
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui.zest/.classpath b/bundles/org.eclipse.capra.ui.zest/.classpath
new file mode 100644
index 0000000..4f83b23
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.capra.testsuite/.gitignore b/bundles/org.eclipse.capra.ui.zest/.gitignore
similarity index 100%
copy from org.eclipse.capra.testsuite/.gitignore
copy to bundles/org.eclipse.capra.ui.zest/.gitignore
diff --git a/bundles/org.eclipse.capra.ui.zest/.project b/bundles/org.eclipse.capra.ui.zest/.project
new file mode 100644
index 0000000..9a086fa
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.zest</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.zest/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui.zest/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..a698e59
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+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.ui.zest/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui.zest/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..be413a4
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/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.zest;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.capra.core,
+ com.google.inject,
+ org.eclipse.gef4.zest.fx.jface,
+ org.eclipse.capra.ui,
+ org.eclipse.gef4.layout,
+ org.eclipse.gef4.mvc.fx,
+ org.eclipse.gef4.fx,
+ org.eclipse.gef4.mvc,
+ org.eclipse.gef4.zest.fx,
+ org.eclipse.gef4.common
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: %Bundle-Vendor
diff --git a/bundles/org.eclipse.capra.ui.zest/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui.zest/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..e51f680
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# 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
+###############################################################################
+#Properties file for org.eclipse.capra.ui.zest
+view.name = Capra Trace Link Visualisation
+category.name = Capra Traceability
+command.name = Toggle Transitivity
+command.label = Show transitive links
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra Trace Visualisation Support (Zest)
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.zest/build.properties b/bundles/org.eclipse.capra.ui.zest/build.properties
new file mode 100644
index 0000000..abb8fa9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/build.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# 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 = plugin.xml,\
+               META-INF/,\
+               .,\
+               OSGI-INF/,\
+               OSGI-INF/l10n/bundle.properties
diff --git a/bundles/org.eclipse.capra.ui.zest/plugin.xml b/bundles/org.eclipse.capra.ui.zest/plugin.xml
new file mode 100644
index 0000000..0b9ee04
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/plugin.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+<plugin>
+
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            id="org.eclipse.capra.ui.views"
+			name="%category.name">
+      </category>
+      <view
+            category="org.eclipse.capra.generic.views"
+            class="org.eclipse.capra.ui.zest.ZestView"
+            icon="platform:/plugin/org.eclipse.capra.ui/icons/capra.png"
+            id="org.eclipse.capra.ui.zest.zestView"
+            name="%view.name"
+            restorable="true">
+      </view>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            defaultHandler="org.eclipse.capra.ui.zest.ToggleTransitivityHandler"
+            id="org.eclipse.capra.ui.zest.toggleTransitivity"
+            name="%command.name">
+         <state
+               class="org.eclipse.jface.commands.ToggleState"
+               id="org.eclipse.ui.commands.toggleState">
+         </state>
+      </command>
+   </extension>
+
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.capra.ui.zest.ToggleTransitivityHandler"
+            commandId="org.eclipse.capra.ui.zest.toggleTransitivity">
+      </handler>
+   </extension>
+
+	<extension
+         point="org.eclipse.ui.menus">
+    <menuContribution
+          locationURI="menu:org.eclipse.capra.ui.zest.zestView?after=additions">
+       <command
+             commandId="org.eclipse.capra.ui.zest.toggleTransitivity"
+             label="%command.label"
+             style="toggle">
+       </command>
+    </menuContribution>
+   </extension>
+
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui.zest/pom.xml b/bundles/org.eclipse.capra.ui.zest/pom.xml
new file mode 100644
index 0000000..392b197
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui.zest</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ToggleTransitivityHandler.java b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ToggleTransitivityHandler.java
new file mode 100644
index 0000000..ce5fddc
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ToggleTransitivityHandler.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * 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.zest;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * 
+ * This class checks if the user has clicked on Toggle transitivity and changes
+ * the input of the Zest view accordingly. Given a selected element, the view
+ * can switch between showing only directly connected elements or all connected
+ * elements (transitive view).
+ *
+ */
+public class ToggleTransitivityHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		Command command = event.getCommand();
+		boolean oldValue = HandlerUtil.toggleCommandState(command);
+		setTraceViewTransitive(!oldValue);
+		return null;
+	}
+
+	/**
+	 * Checks whether the trace view is set to show transitive traces.
+	 * 
+	 * @return {@code true} if transitive traces are enabled, {@code false}
+	 *         otherwise
+	 */
+	public static boolean isTraceViewTransitive() {
+		Preferences transitivity = getPreference();
+
+		return transitivity.get("option", "direct").equals("direct");
+	}
+
+	/**
+	 * Sets whether the trace view is set to show transitive traces.
+	 * 
+	 * @param value
+	 *            indicates whether transitive traces should be shown
+	 */
+	public static void setTraceViewTransitive(boolean value) {
+		Preferences transitivity = getPreference();
+
+		transitivity.put("option", value ? "transitive" : "direct");
+
+		try {
+			// forces the application to save the preferences
+			transitivity.flush();
+		} catch (BackingStoreException e) {
+			e.printStackTrace();
+		}
+	}
+
+	private static Preferences getPreference() {
+		Preferences preferences = InstanceScope.INSTANCE.getNode("org.eclipse.capra.ui.zest.toggleTransitivity");
+		Preferences transitivity = preferences.node("transitivity");
+		return transitivity;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeContentProvider.java b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeContentProvider.java
new file mode 100644
index 0000000..db76286
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeContentProvider.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * 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.zest;
+
+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.emf.ecore.EObject;
+import org.eclipse.gef4.zest.fx.jface.IGraphContentProvider;
+
+/**
+ * 
+ * This class provides the content to be displayed on the Zest view in form of a
+ * graph. It gets the traceability links and forms a graph with the connected
+ * elements as nodes and the traceability links as edges.
+ *
+ */
+public class TraceNodeContentProvider implements IGraphContentProvider {
+
+	private TraceMetaModelAdapter metaModelAdapter;
+	private EObject traceModel = null;
+	private List<Connection> connections = new ArrayList<>();
+	private List<Object> currentSelection = null;
+
+	/**
+	 * This constructor gets the trace model, traceMetamodel adapter and the
+	 * list of selected objects by the user and sets them to the private
+	 * variables of the class
+	 * 
+	 * @param traceModel
+	 *            the current trace model
+	 * @param metaModelAdapter
+	 *            the metamodel adapter
+	 * @param element
+	 *            the current selection
+	 */
+	public TraceNodeContentProvider(EObject traceModel, TraceMetaModelAdapter metaModelAdapter, List<Object> element) {
+		this.traceModel = traceModel;
+		this.currentSelection = element;
+		this.metaModelAdapter = metaModelAdapter;
+
+	}
+
+	@Override
+	public Object[] getAdjacentNodes(Object node) {
+		List<EObject> nodes = new ArrayList<>();
+
+		if (node instanceof EObject) {
+			EObject object = (EObject) node;
+			connections = metaModelAdapter.getConnectedElements(object, traceModel);
+			for (Connection c : connections) {
+				nodes.addAll(c.getTargets());
+			}
+		}
+		return nodes.toArray();
+	}
+
+	@Override
+	public Object[] getNestedGraphNodes(Object node) {
+		return null;
+	}
+
+	@Override
+	public Object[] getNodes() {
+		List<EObject> nodes = new ArrayList<>();
+		if (currentSelection.get(0) instanceof EObject) {
+			EObject object = (EObject) currentSelection.get(0);
+			int transitivityDepth = 0;
+			connections = metaModelAdapter.getTransitivelyConnectedElements(object, traceModel, transitivityDepth);
+			for (Connection c : connections) {
+				nodes.add(c.getOrigin());
+				nodes.addAll(c.getTargets());
+			}
+		}
+		// return only distinct values as nodes of the graph
+		return nodes.stream().distinct().collect(Collectors.toList()).toArray();
+
+	}
+
+	@Override
+	public boolean hasNestedGraph(Object node) {
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java
new file mode 100644
index 0000000..a6a6790
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/TraceNodeLabelProvider.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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.zest;
+
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+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.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.viewers.LabelProvider;
+
+/**
+ * 
+ * This class provides labels for the nodes and edges for the graph to be
+ * displayed in the zest view.
+ *
+ */
+public class TraceNodeLabelProvider extends LabelProvider {
+
+	@Override
+	public String getText(Object element) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		IArtifactHandler<?> handler = artifactHelper.getHandler(element).get();
+		return handler.withCastedHandler(element, (h, o) -> h.getDisplayName(o)).orElseGet(element::toString);
+	}
+
+	// TODO Add labels for the edges
+
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..d74a8ac
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui.zest/src/org/eclipse/capra/ui/zest/ZestView.java
@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * 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.zest;
+
+import java.util.List;
+
+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.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.gef4.common.adapt.inject.AdapterInjectionSupport;
+import org.eclipse.gef4.common.adapt.inject.AdapterInjectionSupport.LoggingMode;
+import org.eclipse.gef4.layout.ILayoutAlgorithm;
+import org.eclipse.gef4.layout.algorithms.TreeLayoutAlgorithm;
+import org.eclipse.gef4.zest.fx.jface.ZestContentViewer;
+import org.eclipse.gef4.zest.fx.jface.ZestFxJFaceModule;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class creates the view to hold the content of the model displayed as a
+ * graph in the Zest view. The view is connected to the model using a content
+ * provider.
+ * <p>
+ * The view uses a label provider to define how model objects should be
+ * presented in the view. Each view can present the same model objects using
+ * different labels and icons, if needed. Alternatively, a single label provider
+ * can be shared between views in order to ensure that objects of the same type
+ * are presented in the same way everywhere.
+ * <p>
+ */
+public class ZestView extends ViewPart {
+
+	static ZestContentViewer viewer = null;
+	private ISelectionListener selectionListener;
+
+	public class ZestViewModule extends ZestFxJFaceModule {
+		@Override
+		protected void enableAdapterMapInjection() {
+			install(new AdapterInjectionSupport(LoggingMode.PRODUCTION));
+		}
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+
+		TracePersistenceAdapter tracePersistenceAdapter;
+
+		tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+
+		viewer = new ZestContentViewer(new ZestViewModule());
+		viewer.createControl(parent, SWT.NONE);
+		viewer.setLabelProvider(new TraceNodeLabelProvider());
+		ILayoutAlgorithm layout = new TreeLayoutAlgorithm();
+		viewer.setLayoutAlgorithm(layout);
+
+		selectionListener = new ISelectionListener() {
+
+			@Override
+			public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+				EObject traceModel;
+				TraceMetaModelAdapter metaModelAdapter;
+				ResourceSet resourceSet;
+
+				List<Object> selectedModels = TraceCreationHelper.extractSelectedElements(selection);
+
+				if (selectedModels.size() >= 1 && selectedModels.get(0) instanceof EObject) {
+					EObject selectedEObject = (EObject) selectedModels.get(0);
+					resourceSet = selectedEObject.eResource().getResourceSet();
+					traceModel = tracePersistenceAdapter.getTraceModel(resourceSet);
+					metaModelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+					viewer.setContentProvider(
+							new TraceNodeContentProvider(traceModel, metaModelAdapter, selectedModels));
+					viewer.setInput(null);
+					viewer.refresh();
+
+				}
+				// TODO Implement what should be displayed when more than one
+				// element has been selected
+			}
+
+		};
+		getViewSite().getPage().addSelectionListener(selectionListener);
+
+	}
+
+	@Override
+	public void dispose() {
+		getSite().getPage().removeSelectionListener(selectionListener);
+		super.dispose();
+	}
+
+	@Override
+	public void setFocus() {
+		// TODO Auto-generated method stub
+
+	}
+}
diff --git a/org.eclipse.capra.ui/.classpath b/bundles/org.eclipse.capra.ui/.classpath
similarity index 100%
rename from org.eclipse.capra.ui/.classpath
rename to bundles/org.eclipse.capra.ui/.classpath
diff --git a/org.eclipse.capra.ui/.gitignore b/bundles/org.eclipse.capra.ui/.gitignore
similarity index 100%
rename from org.eclipse.capra.ui/.gitignore
rename to bundles/org.eclipse.capra.ui/.gitignore
diff --git a/org.eclipse.capra.ui/.project b/bundles/org.eclipse.capra.ui/.project
similarity index 100%
rename from org.eclipse.capra.ui/.project
rename to bundles/org.eclipse.capra.ui/.project
diff --git a/org.eclipse.capra.ui/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.capra.ui/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.ui/.settings/org.eclipse.jdt.core.prefs
rename to bundles/org.eclipse.capra.ui/.settings/org.eclipse.jdt.core.prefs
diff --git a/org.eclipse.capra.ui/CREDITS_FOR_LICENSE.txt b/bundles/org.eclipse.capra.ui/CREDITS_FOR_LICENSE.txt
similarity index 100%
rename from org.eclipse.capra.ui/CREDITS_FOR_LICENSE.txt
rename to bundles/org.eclipse.capra.ui/CREDITS_FOR_LICENSE.txt
diff --git a/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4537245
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.capra.ui;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %Bundle-Vendor
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.equinox.registry,
+ com.google.guava,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.emf.ecore.xcore.lib,
+ org.eclipse.xtend.lib,
+ org.eclipse.xtend.lib.macro,
+ org.eclipse.swt,
+ org.eclipse.jface,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf,
+ org.eclipse.emf.edit.ui,
+ org.eclipse.ui.ide,
+ org.eclipse.ui,
+ org.eclipse.core.resources,
+ org.eclipse.capra.core
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.capra.ui.handlers,
+ org.eclipse.capra.ui.helpers,
+ org.eclipse.capra.ui.views
+
diff --git a/bundles/org.eclipse.capra.ui/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.capra.ui/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000..0041d37
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,35 @@
+###############################################################################
+# 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
+###############################################################################
+#Properties file for org.eclipse.capra.ui
+command.name = Create Trace
+command.label = Create Trace
+command.tooltip = Gives you a list of available trace types
+command.mnemonic = S
+command.name.0 = Remove from Selection
+command.label.0 = Remove from Selection
+command.tooltip.0 = Remove the selected item from the current selection
+command.name.1 = Clear Selection
+command.label.1 = Clear Selection
+command.tooltip.1 = Clears the current selection of elements
+command.name.2 = Add to Selection
+command.label.2 = Add to Selection
+command.tooltip.2 = Add selected item(s) to selection view
+view.name = Trace Creation
+extension-point.name = Transfers
+Bundle-Vendor = Capra Development Team
+Bundle-Name = Capra User Interface Generic Functionality
+menu.label = Capra Traceability
+perspective.name = Capra Traceability
+page.name = Capra Traceability
+category.name = Capra Traceability
\ No newline at end of file
diff --git a/bundles/org.eclipse.capra.ui/build.properties b/bundles/org.eclipse.capra.ui/build.properties
new file mode 100644
index 0000000..20984d2
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# 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/,\
+               icons/,\
+               .,\
+               plugin.xml,\
+               schema/,\
+               OSGI-INF/
+
diff --git a/bundles/org.eclipse.capra.ui/contexts.xml b/bundles/org.eclipse.capra.ui/contexts.xml
new file mode 100644
index 0000000..dedb1d1
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/contexts.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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
+ -->
+
+<contexts>
+	<context id="viewer" title="Sample View">
+		<description>This is the context help for the sample view with a table viewer. It was generated by a PDE template.</description>
+		<topic href="/PLUGINS_ROOT/org.eclipse.platform.doc.isv/guide/ua_help_context.htm" label="Context-sensitive help">
+			<enablement>
+				<with variable="platform">
+	            	<test property="org.eclipse.core.runtime.isBundleInstalled" args="org.eclipse.platform.doc.isv"/>
+	     		</with>
+			</enablement>
+		</topic>
+	</context>
+</contexts>
diff --git a/org.eclipse.capra.ui/icons/capra.png b/bundles/org.eclipse.capra.ui/icons/capra.png
similarity index 100%
rename from org.eclipse.capra.ui/icons/capra.png
rename to bundles/org.eclipse.capra.ui/icons/capra.png
Binary files differ
diff --git a/org.eclipse.capra.ui/icons/selectionView.png b/bundles/org.eclipse.capra.ui/icons/selectionView.png
similarity index 100%
rename from org.eclipse.capra.ui/icons/selectionView.png
rename to bundles/org.eclipse.capra.ui/icons/selectionView.png
Binary files differ
diff --git a/bundles/org.eclipse.capra.ui/plugin.xml b/bundles/org.eclipse.capra.ui/plugin.xml
new file mode 100644
index 0000000..5e3a1a4
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/plugin.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension-point id="org.eclipse.capra.ui.transfers" name="%extension-point.name" schema="schema/org.eclipse.capra.ui.transfers.exsd"/>
+   <extension
+         point="org.eclipse.ui.commands">
+      <command
+            id="org.eclipse.capra.generic.tracecreation.commands.createTrace"
+            name="%command.name">
+      </command>
+      <command
+            helpContextId="Remove currently selected item from the  list of selection"
+            id="org.eclipse.capra.generic.tracecreation.commands.removefromselection"
+            name="%command.name.0">
+      </command>
+      <command
+            id="org.eclipse.capra.generic.tracecreation.clearselection"
+            name="%command.name.1">
+      </command>
+      <command
+            id="org.eclipse.capra.generic.addtoselection"
+            name="%command.name.2">
+      </command>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            class="org.eclipse.capra.ui.handlers.TraceCreationHandler"
+            commandId="org.eclipse.capra.generic.tracecreation.commands.createTrace">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.handlers.selection.RemoveSelectionHandler"
+            commandId="org.eclipse.capra.generic.tracecreation.commands.removefromselection">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.handlers.selection.ClearSelectionHandler"
+            commandId="org.eclipse.capra.generic.tracecreation.clearselection">
+      </handler>
+      <handler
+            class="org.eclipse.capra.ui.handlers.selection.AddtoSelection"
+            commandId="org.eclipse.capra.generic.addtoselection">
+      </handler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.menus">
+      <menuContribution
+            locationURI="popup:org.eclipse.capra.generic.views.SelectionView?after=additions">
+         <separator
+               name="org.eclipse.capra.tracecreation.separator2"
+               visible="true">
+         </separator>
+         <command
+               commandId="org.eclipse.capra.generic.tracecreation.commands.createTrace"
+               id="org.eclipse.capra.tracecreation.menus.createTrace"
+               label="%command.label"
+               mnemonic="%command.mnemonic"
+               tooltip="%command.tooltip">
+         </command>
+         <command
+               commandId="org.eclipse.capra.generic.tracecreation.commands.removefromselection"
+               label="%command.label.0"
+               style="push"
+               tooltip="%command.tooltip.0">
+         </command>
+         <command
+               commandId="org.eclipse.capra.generic.tracecreation.clearselection"
+               label="%command.label.1"
+               style="push"
+               tooltip="%command.tooltip.1">
+         </command>
+         <separator
+               name="org.eclipse.capra.generic.tracecreation.separator1"
+               visible="true">
+         </separator>
+      </menuContribution>
+      <menuContribution
+            allPopups="false"
+            locationURI="popup:org.eclipse.ui.popup.any?after=additions">
+         <separator
+               name="org.eclipse.capra.generic.separator2">
+         </separator>
+         <menu
+               label="%menu.label"
+               id="org.eclipse.capra.ui.contextsubmenu">
+            <command
+                  commandId="org.eclipse.capra.generic.addtoselection"
+                  label="%command.label.2"
+                  style="push"
+                  tooltip="%command.tooltip.2">
+            </command>
+         </menu>
+         <separator
+               name="org.eclipse.capra.generic.separator1">
+         </separator>
+      </menuContribution>
+   </extension>
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            id="org.eclipse.capra.generic.views"
+            name="%category.name">
+      </category>
+      <view
+            category="org.eclipse.capra.generic.views"
+            class="org.eclipse.capra.ui.views.SelectionView"
+            icon="icons/selectionView.png"
+            id="org.eclipse.capra.generic.views.SelectionView"
+            name="%view.name">
+      </view>
+   </extension>
+   <extension
+         point="org.eclipse.ui.perspectives">
+      <perspective
+            class="org.eclipse.capra.ui.perspective.CapraPerspective"
+            icon="icons/capra.png"
+            id="org.eclipse.capra.generic.perspective.CapraPerspective"
+            name="%perspective.name">
+      </perspective>
+   </extension>
+   <extension
+         point="org.eclipse.ui.preferencePages">
+      <page
+            class="org.eclipse.capra.ui.preferences.CapraPreferences"
+            id="org.eclipse.capra.ui.preferences.CapraPreferences"
+            name="%page.name">
+      </page>
+   </extension>
+   <extension
+         point="org.eclipse.ui.bindings">
+      <key
+            commandId="org.eclipse.capra.generic.tracecreation.commands.createTrace"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M2+1">
+      </key>
+   </extension>
+   <extension
+         point="org.eclipse.ui.bindings">
+  	  <sequenceModifier
+  			find="DEL"
+  			replace="BS"
+  			platforms="cocoa"/>
+      <key
+            commandId="org.eclipse.capra.generic.tracecreation.commands.removefromselection"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="DEL">
+      </key>
+   </extension>
+   <extension
+         point="org.eclipse.ui.bindings">
+  	  <sequenceModifier
+  			find="M2+DEL"
+  			replace="M2+BS"
+  			platforms="cocoa"/>
+         <key
+            commandId="org.eclipse.capra.generic.tracecreation.clearselection"
+            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+            sequence="M2+DEL">
+      </key> 
+	</extension>
+</plugin>
diff --git a/bundles/org.eclipse.capra.ui/pom.xml b/bundles/org.eclipse.capra.ui/pom.xml
new file mode 100644
index 0000000..4edb5a9
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/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.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.capra.ui</artifactId>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
diff --git a/bundles/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd b/bundles/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd
new file mode 100644
index 0000000..546d8ac
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.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.transfers" name="Transfers"/>
+      </appinfo>
+      <documentation>
+         Defines the transfers needed to support drag&amp;drop operations from and to the selection view.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <choice minOccurs="1" maxOccurs="unbounded">
+            <element ref="transfer"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <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="transfer">
+      <complexType>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.swt.dnd.Transfer:"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </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/handlers/TraceCreationHandler.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
new file mode 100644
index 0000000..0baa5f2
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * 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.handlers;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiFunction;
+import java.util.stream.Collectors;
+
+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.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.preferences.CapraPreferences;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EClass;
+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.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+public class TraceCreationHandler extends AbstractHandler {
+
+	private static final String CAPRA_INFORMATION = "Capra Information";
+	private static final String TRACE_LINK_EXISTS = "The trace link you want to create already exists and will therefore not be created";
+	private static final String TRACE_LINK_SUCCESSFULLY_CREATED = "Trace link has been successfully created";
+	private static final String DO_NOT_SHOW_DIALOG_AGAIN = "Do not show this dialog again";
+	private static final String SELECT_TRACE_LINK_TYPE = "Select the trace type you want to create";
+	private static final String SELECTION = "Selection";
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
+		createTrace(window, (traceTypes, selection) -> getTraceTypeToCreate(window, traceTypes, selection));
+		return null;
+	}
+
+	public void createTrace(IWorkbenchWindow window,
+			BiFunction<Collection<EClass>, List<EObject>, Optional<EClass>> chooseTraceType) {
+		List<?> artifacts = SelectionView.getOpenedView().getSelection();
+
+		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+
+		ResourceSet resourceSet = new ResourceSetImpl();
+		// add trace model to resource set
+		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
+		// add artifact model to resource set
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		TraceHelper traceHelper = new TraceHelper(traceModel);
+
+		// Create the artifact wrappers
+		List<EObject> wrappers = artifactHelper.createWrappers(artifacts);
+
+		// Get the type of trace to be created
+		Collection<EClass> traceTypes = traceAdapter.getAvailableTraceTypes(wrappers);
+		Optional<EClass> chosenType = chooseTraceType.apply(traceTypes, wrappers);
+
+		// Create trace
+		if (chosenType.isPresent()) {
+			// check if the connection already exists
+			if (traceHelper.traceExists(wrappers, chosenType.get(), traceModel)) {
+				MessageDialog.openInformation(window.getShell(), CAPRA_INFORMATION, TRACE_LINK_EXISTS);
+			} else {
+				traceHelper.createTrace(wrappers, chosenType.get());
+				persistenceAdapter.saveTracesAndArtifacts(traceModel, artifactModel);
+				traceHelper.annotateTrace(wrappers);
+
+				// check from preferences if user wants to see the "trace
+				// successfully created dialog"
+				IPreferenceStore store = CapraPreferences.getPreferences();
+				if (store.getBoolean(CapraPreferences.SHOW_TRACE_CREATED_CONFIRMATION_DIALOG)) {
+					MessageDialogWithToggle.open(MessageDialog.INFORMATION, window.getShell(), CAPRA_INFORMATION,
+							TRACE_LINK_SUCCESSFULLY_CREATED, DO_NOT_SHOW_DIALOG_AGAIN, false, store,
+							CapraPreferences.SHOW_TRACE_CREATED_CONFIRMATION_DIALOG, SWT.NONE);
+				}
+			}
+		}
+	}
+
+	private Optional<EClass> getTraceTypeToCreate(IWorkbenchWindow window, Collection<EClass> traceTypes,
+			List<EObject> wrappers) {
+		ElementListSelectionDialog dialog = new ElementListSelectionDialog(window.getShell(), new LabelProvider() {
+			@Override
+			public String getText(Object element) {
+				EClass eclass = (EClass) element;
+				return eclass.getName();
+			}
+		});
+		dialog.setTitle(SELECT_TRACE_LINK_TYPE);
+		dialog.setElements(traceTypes.toArray());
+
+		dialog.setMessage(
+				SELECTION + " : " + wrappers.stream().map(this::getSelectionDisplayName).collect(Collectors.toList()));
+
+		if (dialog.open() == Window.OK) {
+			return Optional.of((EClass) dialog.getFirstResult());
+		}
+
+		return Optional.empty();
+	}
+
+	private String getSelectionDisplayName(EObject element) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		IArtifactHandler<?> handler = artifactHelper.getHandler(artifactHelper.unwrapWrapper(element)).get();
+
+		return handler.withCastedHandler(artifactHelper.unwrapWrapper(element), (h, o) -> h.getDisplayName(o))
+				.orElse(EMFHelper.getIdentifier(element));
+
+	}
+
+}
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
new file mode 100644
index 0000000..1a04062
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * 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.handlers.selection;
+
+import java.util.List;
+
+import org.eclipse.capra.ui.helpers.TraceCreationHelper;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Action to add an object to the selection view.
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class AddtoSelection extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
+		SelectionView.getOpenedView().dropToSelection(selection);
+		return null;
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/ClearSelectionHandler.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/ClearSelectionHandler.java
new file mode 100644
index 0000000..6c61993
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/ClearSelectionHandler.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.handlers.selection;
+
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Action to remove all objects from the selection view.
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class ClearSelectionHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		SelectionView.getOpenedView().clearSelection();
+		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
new file mode 100644
index 0000000..d2641cf
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.handlers.selection;
+
+import java.util.List;
+
+import org.eclipse.capra.ui.helpers.TraceCreationHelper;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+
+/**
+ * Action to remove a single object from the selection view.
+ * 
+ * @author Anthony Anjorin, Salome Maro
+ */
+public class RemoveSelectionHandler extends AbstractHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
+		SelectionView.getOpenedView().removeFromSelection(selection);
+		return null;
+	}
+}
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
new file mode 100644
index 0000000..b601060
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * 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/perspective/CapraPerspective.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/perspective/CapraPerspective.java
new file mode 100644
index 0000000..2ca8377
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/perspective/CapraPerspective.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * 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.perspective;
+
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+/**
+ * Defines the Eclipse perspective for Capra, in particular the initial views
+ * that will be shown when the perspective is chosen.
+ */
+public class CapraPerspective implements IPerspectiveFactory {
+
+	private IPageLayout factory;
+
+	public void createInitialLayout(IPageLayout factory) {
+		this.factory = factory;
+		addViews();
+	}
+
+	private void addViews() {
+		IFolderLayout bottom = factory.createFolder("bottomRight", IPageLayout.BOTTOM, 0.6f, factory.getEditorArea());
+		bottom.addView(SelectionView.ID);
+
+		IFolderLayout topLeft = factory.createFolder("topLeft", IPageLayout.LEFT, 0.25f, factory.getEditorArea());
+		topLeft.addView(IPageLayout.ID_PROJECT_EXPLORER);
+
+		IFolderLayout topRight = factory.createFolder("topRight", IPageLayout.RIGHT, 0.75f, factory.getEditorArea());
+		topRight.addView(IPageLayout.ID_OUTLINE);
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/preferences/CapraPreferences.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/preferences/CapraPreferences.java
new file mode 100644
index 0000000..cf5576e
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/preferences/CapraPreferences.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * 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.preferences;
+
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+public class CapraPreferences extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+	public static final String CAPRA_PREFERENCE_PAGE_ID = "org.eclipse.capra.ui";
+	public static final String SHOW_TRACE_CREATED_CONFIRMATION_DIALOG = "Show confirmation after a trace link has been created";
+	public static final String SHOW_TRACE_CREATED_CONFIRMATION_DIALOG_LABEL = "Show confirmation after a trace link has been created";
+	private static final String PREFERENCE_PAGE_DESCRIPTION = "Eclipse Capra UI Preferences";
+
+	private BooleanFieldEditor booleanEditor;
+
+	@Override
+	public void init(IWorkbench workbench) {
+		setDescription(PREFERENCE_PAGE_DESCRIPTION);
+		setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE, CAPRA_PREFERENCE_PAGE_ID));
+	}
+
+	@Override
+	protected void createFieldEditors() {
+		booleanEditor = new BooleanFieldEditor(SHOW_TRACE_CREATED_CONFIRMATION_DIALOG,
+				SHOW_TRACE_CREATED_CONFIRMATION_DIALOG_LABEL, getFieldEditorParent());
+		addField(booleanEditor);
+	}
+
+	public static IPreferenceStore getPreferences() {
+		return new ScopedPreferenceStore(InstanceScope.INSTANCE, CAPRA_PREFERENCE_PAGE_ID);
+	}
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/preferences/PreferenceInitializer.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/preferences/PreferenceInitializer.java
new file mode 100644
index 0000000..808889b
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/preferences/PreferenceInitializer.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class PreferenceInitializer extends AbstractPreferenceInitializer {
+
+	@Override
+	public void initializeDefaultPreferences() {
+		IPreferenceStore store = CapraPreferences.getPreferences();
+		store.setDefault(CapraPreferences.SHOW_TRACE_CREATED_CONFIRMATION_DIALOG, true);
+	}
+
+}
diff --git a/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
new file mode 100644
index 0000000..5228867
--- /dev/null
+++ b/bundles/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
@@ -0,0 +1,268 @@
+/*******************************************************************************
+ * 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.views;
+
+import static java.util.stream.Collectors.toList;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.handlers.PriorityHandler;
+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.resource.impl.ResourceSetImpl;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+
+public class SelectionView extends ViewPart {
+
+	/** The ID of the view as specified by the extension. */
+	public static final String ID = "org.eclipse.capra.generic.views.SelectionView";
+
+	/**
+	 * Identifier of the extension point that contains the transfer definitions.
+	 */
+	private static final String TRANSFER_EXTENSION_POINT_ID = "org.eclipse.capra.ui.transfers";
+
+	/**
+	 * Standard transfers that are always used in the SelectionView.
+	 */
+	private static final Transfer[] DEFAULT_TRANSFERS = new Transfer[] {
+			org.eclipse.ui.part.ResourceTransfer.getInstance(), org.eclipse.ui.part.EditorInputTransfer.getInstance(),
+			org.eclipse.swt.dnd.FileTransfer.getInstance(), org.eclipse.swt.dnd.RTFTransfer.getInstance(),
+			org.eclipse.swt.dnd.TextTransfer.getInstance(), org.eclipse.swt.dnd.URLTransfer.getInstance(),
+			org.eclipse.jface.util.LocalSelectionTransfer.getTransfer(),
+			org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance() };
+
+	/** The actual table containing selected elements */
+	public TableViewer viewer;
+
+	/** The maintained selection of EObjects */
+	private Set<Object> selection = new LinkedHashSet<>();
+
+	class ViewContentProvider implements IStructuredContentProvider {
+		@Override
+		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+		}
+
+		@Override
+		public void dispose() {
+		}
+
+		@Override
+		public Object[] getElements(Object parent) {
+			return selection.toArray();
+		}
+	}
+
+	class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+		@Override
+		public String getText(Object element) {
+			TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+			EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
+			ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+			IArtifactHandler<?> handler = artifactHelper.getHandler(element).get();
+			return handler.withCastedHandler(element, (h, o) -> h.getDisplayName(o)).orElseGet(element::toString);
+		}
+
+		@Override
+		public String getColumnText(Object obj, int index) {
+			return getText(obj);
+		}
+
+		@Override
+		public Image getColumnImage(Object obj, int index) {
+			return getImage(obj);
+		}
+
+		@Override
+		public Image getImage(Object obj) {
+			return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+		}
+	}
+
+	/**
+	 * Leaves the order of objects unchanged by returning 0 for all combinations
+	 * of objects.
+	 *
+	 * @see ViewerComparator#compare(Viewer, Object, Object)
+	 */
+	class NoChangeComparator extends ViewerComparator {
+
+		@Override
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			// Retain order in which the user dragged in the elements
+			return 0;
+		}
+
+	}
+
+	class SelectionDropAdapter extends ViewerDropAdapter {
+		TableViewer view;
+
+		public SelectionDropAdapter(TableViewer view) {
+			super(viewer);
+			this.view = view;
+		}
+
+		@Override
+		public boolean performDrop(Object data) {
+			dropToSelection(data);
+			return true;
+		}
+
+		@Override
+		public boolean validateDrop(Object target, int operation, TransferData transferType) {
+			return true;
+		}
+
+	}
+
+	@Override
+	public void createPartControl(Composite parent) {
+		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		viewer.setContentProvider(new ViewContentProvider());
+		viewer.setLabelProvider(new ViewLabelProvider());
+		viewer.setComparator(new NoChangeComparator());
+		viewer.setInput(getViewSite());
+
+		getSite().setSelectionProvider(viewer);
+		hookContextMenu();
+
+		int ops = DND.DROP_COPY | DND.DROP_MOVE;
+
+		List<Transfer> transfers = new ArrayList<Transfer>(Arrays.asList(DEFAULT_TRANSFERS));
+
+		// Get all additionally configured transfers from the extension point.
+		transfers.addAll(ExtensionPointHelper.getExtensions(TRANSFER_EXTENSION_POINT_ID, "class").stream()
+				.map(Transfer.class::cast).collect(Collectors.toList()));
+
+		viewer.addDropSupport(ops, transfers.toArray(DEFAULT_TRANSFERS), new SelectionDropAdapter(viewer));
+	}
+
+	private void hookContextMenu() {
+		MenuManager menuMgr = new MenuManager("#PopupMenu");
+		menuMgr.setRemoveAllWhenShown(true);
+		menuMgr.addMenuListener(new IMenuListener() {
+			@Override
+			public void menuAboutToShow(IMenuManager manager) {
+
+			}
+		});
+		Menu menu = menuMgr.createContextMenu(viewer.getControl());
+		viewer.getControl().setMenu(menu);
+		getSite().registerContextMenu(menuMgr, viewer);
+	}
+
+	@Override
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+
+	@SuppressWarnings("unchecked")
+	public void dropToSelection(Object data) {
+		if (data instanceof TreeSelection) {
+			TreeSelection tree = (TreeSelection) data;
+			if (tree.toList().stream().allMatch(this::validateSelection))
+				selection.addAll(tree.toList());
+		} else if (data instanceof Collection<?>) {
+			Collection<Object> arrayselection = (Collection<Object>) data;
+			if (arrayselection.stream().allMatch(this::validateSelection))
+				selection.addAll(arrayselection);
+		} else if (data instanceof IStructuredSelection) {
+			IStructuredSelection iselection = (IStructuredSelection) data;
+			if (iselection.toList().stream().allMatch(this::validateSelection))
+				selection.addAll(iselection.toList());
+		} else if (validateSelection(data))
+			selection.add(data);
+
+		viewer.refresh();
+	}
+
+	private boolean validateSelection(Object target) {
+		Collection<IArtifactHandler<?>> artifactHandlers = ExtensionPointHelper.getArtifactHandlers();
+		List<IArtifactHandler<?>> availableHandlers = artifactHandlers.stream()
+				.filter(handler -> handler.canHandleArtifact(target)).collect(toList());
+
+		Optional<PriorityHandler> priorityHandler = ExtensionPointHelper.getPriorityHandler();
+		if (availableHandlers.size() == 0) {
+			MessageDialog.openWarning(getSite().getShell(), "No handler for selected item",
+					"There is no handler for " + target + " so it will be ignored.");
+		} else if (availableHandlers.size() > 1 && !priorityHandler.isPresent()) {
+			MessageDialog.openWarning(getSite().getShell(), "Multiple handlers for selected item",
+					"There are multiple handlers for " + target + " so it will be ignored.");
+		} else if (availableHandlers.size() > 1 && priorityHandler.isPresent()) {
+			return true;
+		} else {
+			return true;
+		}
+		return false;
+	}
+
+	public List<Object> getSelection() {
+		return new ArrayList<Object>(selection);
+	}
+
+	public void clearSelection() {
+		selection.clear();
+		viewer.refresh();
+	}
+
+	public static SelectionView getOpenedView() {
+		try {
+			return (SelectionView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ID);
+		} catch (PartInitException e) {
+			e.printStackTrace();
+		}
+
+		return null;
+	}
+
+	public void removeFromSelection(List<Object> currentselection) {
+		selection.removeAll(currentselection);
+		viewer.refresh();
+	}
+}
diff --git a/description b/description
new file mode 100644
index 0000000..ce04240
--- /dev/null
+++ b/description
@@ -0,0 +1 @@
+Capra -- Extensible traceability tooling for Eclipse
diff --git a/features/org.eclipse.capra.core.feature/.project b/features/org.eclipse.capra.core.feature/.project
new file mode 100644
index 0000000..a798512
--- /dev/null
+++ b/features/org.eclipse.capra.core.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.core.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.core.feature/about.html b/features/org.eclipse.capra.core.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.core.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.core.feature/build.properties b/features/org.eclipse.capra.core.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.core.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.core.feature/epl-v20.html b/features/org.eclipse.capra.core.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.core.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.core.feature/feature.properties b/features/org.eclipse.capra.core.feature/feature.properties
new file mode 100644
index 0000000..bfe89b8
--- /dev/null
+++ b/features/org.eclipse.capra.core.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 Core Functionality
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Core functionality for Eclipse Capra
+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.core.feature/feature.xml b/features/org.eclipse.capra.core.feature/feature.xml
new file mode 100644
index 0000000..7799d66
--- /dev/null
+++ b/features/org.eclipse.capra.core.feature/feature.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.core.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.core"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.handler.emf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.handler.file"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.handler.gef"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.handler.hudson"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.handler.marker"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.handler.mylyn"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.core.feature/license.html b/features/org.eclipse.capra.core.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.core.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.core.feature/pom.xml b/features/org.eclipse.capra.core.feature/pom.xml
new file mode 100644
index 0000000..75b822a
--- /dev/null
+++ b/features/org.eclipse.capra.core.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.core.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/org.eclipse.capra.feature/.project b/features/org.eclipse.capra.feature/.project
similarity index 100%
rename from org.eclipse.capra.feature/.project
rename to features/org.eclipse.capra.feature/.project
diff --git a/features/org.eclipse.capra.feature/about.html b/features/org.eclipse.capra.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.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.feature/build.properties b/features/org.eclipse.capra.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.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.feature/epl-v20.html b/features/org.eclipse.capra.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.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.feature/feature.properties b/features/org.eclipse.capra.feature/feature.properties
new file mode 100644
index 0000000..37d6e15
--- /dev/null
+++ b/features/org.eclipse.capra.feature/feature.properties
@@ -0,0 +1,94 @@
+###############################################################################
+# 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 (required)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+ 
+# "description" property - description of the feature
+description=Eclipse Capra Main Feature
+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.feature/feature.xml b/features/org.eclipse.capra.feature/feature.xml
new file mode 100644
index 0000000..0e267ad
--- /dev/null
+++ b/features/org.eclipse.capra.feature/feature.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <includes
+         id="org.eclipse.capra.core.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.capra.ui.feature"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.capra.generic.feature"
+         version="0.0.0"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.feature/license.html b/features/org.eclipse.capra.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.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.feature/pom.xml b/features/org.eclipse.capra.feature/pom.xml
new file mode 100644
index 0000000..2f111a4
--- /dev/null
+++ b/features/org.eclipse.capra.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.generic.feature/.project b/features/org.eclipse.capra.generic.feature/.project
new file mode 100644
index 0000000..95efbb7
--- /dev/null
+++ b/features/org.eclipse.capra.generic.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.generic.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.generic.feature/about.html b/features/org.eclipse.capra.generic.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.generic.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.generic.feature/build.properties b/features/org.eclipse.capra.generic.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.generic.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.generic.feature/epl-v20.html b/features/org.eclipse.capra.generic.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.generic.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.generic.feature/feature.properties b/features/org.eclipse.capra.generic.feature/feature.properties
new file mode 100644
index 0000000..df5c728
--- /dev/null
+++ b/features/org.eclipse.capra.generic.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 Generic Models and Handlers
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Generic models and handlers for Eclipse Capra
+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.generic.feature/feature.xml b/features/org.eclipse.capra.generic.feature/feature.xml
new file mode 100644
index 0000000..16b02a8
--- /dev/null
+++ b/features/org.eclipse.capra.generic.feature/feature.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.generic.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.generic.persistence"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.generic.priority"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.generic.tracemodels"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.generic.artifactmodel"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.generic.feature/license.html b/features/org.eclipse.capra.generic.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.generic.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.generic.feature/pom.xml b/features/org.eclipse.capra.generic.feature/pom.xml
new file mode 100644
index 0000000..3250d3f
--- /dev/null
+++ b/features/org.eclipse.capra.generic.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.generic.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.cdt.feature/.project b/features/org.eclipse.capra.handler.cdt.feature/.project
new file mode 100644
index 0000000..4f6e4bd
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.cdt.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.cdt.feature/about.html b/features/org.eclipse.capra.handler.cdt.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.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.cdt.feature/build.properties b/features/org.eclipse.capra.handler.cdt.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.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.cdt.feature/epl-v20.html b/features/org.eclipse.capra.handler.cdt.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.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.cdt.feature/feature.properties b/features/org.eclipse.capra.handler.cdt.feature/feature.properties
new file mode 100644
index 0000000..ee46cc8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.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 C/C++
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to C and C++ source code
+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.cdt.feature/feature.xml b/features/org.eclipse.capra.handler.cdt.feature/feature.xml
new file mode 100644
index 0000000..d61ae3f
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.feature/feature.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.cdt.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.cdt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.ui.cdt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.cdt.feature/license.html b/features/org.eclipse.capra.handler.cdt.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.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.cdt.feature/pom.xml b/features/org.eclipse.capra.handler.cdt.feature/pom.xml
new file mode 100644
index 0000000..0770141
--- /dev/null
+++ b/features/org.eclipse.capra.handler.cdt.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.cdt.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.featureide.feature/.project b/features/org.eclipse.capra.handler.featureide.feature/.project
new file mode 100644
index 0000000..03548e3
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.featureide.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.featureide.feature/about.html b/features/org.eclipse.capra.handler.featureide.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.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.featureide.feature/build.properties b/features/org.eclipse.capra.handler.featureide.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.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.featureide.feature/epl-v20.html b/features/org.eclipse.capra.handler.featureide.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.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.featureide.feature/feature.properties b/features/org.eclipse.capra.handler.featureide.feature/feature.properties
new file mode 100644
index 0000000..e467c22
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.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 FeatureIDE
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to features managed by FeatureIDE
+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.featureide.feature/feature.xml b/features/org.eclipse.capra.handler.featureide.feature/feature.xml
new file mode 100644
index 0000000..bdcffdf
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.featureide.feature"
+      label="%featureName"
+      version="0.7.0.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.featureide"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.featureide.feature/license.html b/features/org.eclipse.capra.handler.featureide.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.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.featureide.feature/pom.xml b/features/org.eclipse.capra.handler.featureide.feature/pom.xml
new file mode 100644
index 0000000..49baa34
--- /dev/null
+++ b/features/org.eclipse.capra.handler.featureide.feature/pom.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.7.0-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.featureide.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.hudson.feature/.project b/features/org.eclipse.capra.handler.hudson.feature/.project
new file mode 100644
index 0000000..0f6dfac
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.hudson.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.hudson.feature/about.html b/features/org.eclipse.capra.handler.hudson.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.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.hudson.feature/build.properties b/features/org.eclipse.capra.handler.hudson.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.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.hudson.feature/epl-v20.html b/features/org.eclipse.capra.handler.hudson.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.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.hudson.feature/feature.properties b/features/org.eclipse.capra.handler.hudson.feature/feature.properties
new file mode 100644
index 0000000..f495505
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.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 Traceability for Hudson/Jenkins
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to builds and test executions managed by Hudson and Jenkins
+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.hudson.feature/feature.xml b/features/org.eclipse.capra.handler.hudson.feature/feature.xml
new file mode 100644
index 0000000..fa45094
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.hudson.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.hudson"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.hudson.feature/license.html b/features/org.eclipse.capra.handler.hudson.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.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.hudson.feature/pom.xml b/features/org.eclipse.capra.handler.hudson.feature/pom.xml
new file mode 100644
index 0000000..434f6fd
--- /dev/null
+++ b/features/org.eclipse.capra.handler.hudson.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.hudson.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.jdt.feature/.project b/features/org.eclipse.capra.handler.jdt.feature/.project
new file mode 100644
index 0000000..a47209c
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.jdt.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.jdt.feature/about.html b/features/org.eclipse.capra.handler.jdt.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.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.jdt.feature/build.properties b/features/org.eclipse.capra.handler.jdt.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.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.jdt.feature/epl-v20.html b/features/org.eclipse.capra.handler.jdt.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.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.jdt.feature/feature.properties b/features/org.eclipse.capra.handler.jdt.feature/feature.properties
new file mode 100644
index 0000000..c6c5e4b
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.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 Traceability for Java
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to Java source code
+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.jdt.feature/feature.xml b/features/org.eclipse.capra.handler.jdt.feature/feature.xml
new file mode 100644
index 0000000..5e8de75
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.feature/feature.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.jdt.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.jdt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.ui.jdt"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.jdt.feature/license.html b/features/org.eclipse.capra.handler.jdt.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.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.jdt.feature/pom.xml b/features/org.eclipse.capra.handler.jdt.feature/pom.xml
new file mode 100644
index 0000000..42c43ee
--- /dev/null
+++ b/features/org.eclipse.capra.handler.jdt.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.jdt.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.office.feature/.project b/features/org.eclipse.capra.handler.office.feature/.project
new file mode 100644
index 0000000..25ab28c
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.office.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.office.feature/about.html b/features/org.eclipse.capra.handler.office.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.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.office.feature/build.properties b/features/org.eclipse.capra.handler.office.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.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.office.feature/epl-v20.html b/features/org.eclipse.capra.handler.office.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.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.office.feature/feature.properties b/features/org.eclipse.capra.handler.office.feature/feature.properties
new file mode 100644
index 0000000..73a1401
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.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 Traceability for Microsoft Office Documents and Google Sheets
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to Microsoft Word and Excel documents as well as spreadsheets stored on Google Sheets
+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.office.feature/feature.xml b/features/org.eclipse.capra.handler.office.feature/feature.xml
new file mode 100644
index 0000000..010ea2a
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.feature/feature.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.office.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <requires>
+      <import feature="org.eclipse.capra.feature"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.capra.handler.office"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.ui.office"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.office.feature/license.html b/features/org.eclipse.capra.handler.office.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.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.office.feature/pom.xml b/features/org.eclipse.capra.handler.office.feature/pom.xml
new file mode 100644
index 0000000..61cd4d3
--- /dev/null
+++ b/features/org.eclipse.capra.handler.office.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.office.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.papyrus.feature/.project b/features/org.eclipse.capra.handler.papyrus.feature/.project
new file mode 100644
index 0000000..7d5751f
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.papyrus.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.papyrus.feature/about.html b/features/org.eclipse.capra.handler.papyrus.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.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.papyrus.feature/build.properties b/features/org.eclipse.capra.handler.papyrus.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.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.papyrus.feature/epl-v20.html b/features/org.eclipse.capra.handler.papyrus.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.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.papyrus.feature/feature.properties b/features/org.eclipse.capra.handler.papyrus.feature/feature.properties
new file mode 100644
index 0000000..688ec8a
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.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 Traceability for Papyrus
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to models created with Papyrus
+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.papyrus.feature/feature.xml b/features/org.eclipse.capra.handler.papyrus.feature/feature.xml
new file mode 100644
index 0000000..08ad83d
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.papyrus.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.papyrus"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.papyrus.feature/license.html b/features/org.eclipse.capra.handler.papyrus.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.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.papyrus.feature/pom.xml b/features/org.eclipse.capra.handler.papyrus.feature/pom.xml
new file mode 100644
index 0000000..3dcde6d
--- /dev/null
+++ b/features/org.eclipse.capra.handler.papyrus.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.papyrus.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.php.feature/.project b/features/org.eclipse.capra.handler.php.feature/.project
new file mode 100644
index 0000000..c1c1d01
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.php.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.php.feature/about.html b/features/org.eclipse.capra.handler.php.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.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.php.feature/build.properties b/features/org.eclipse.capra.handler.php.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.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.php.feature/epl-v20.html b/features/org.eclipse.capra.handler.php.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.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.php.feature/feature.properties b/features/org.eclipse.capra.handler.php.feature/feature.properties
new file mode 100644
index 0000000..bcd5151
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.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 Traceability for PHP
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to PHP source code
+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.php.feature/feature.xml b/features/org.eclipse.capra.handler.php.feature/feature.xml
new file mode 100644
index 0000000..cee216e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.php.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.php"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.php.feature/license.html b/features/org.eclipse.capra.handler.php.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.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.php.feature/pom.xml b/features/org.eclipse.capra.handler.php.feature/pom.xml
new file mode 100644
index 0000000..b7544ef
--- /dev/null
+++ b/features/org.eclipse.capra.handler.php.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.php.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.handler.reqIf.feature/.project b/features/org.eclipse.capra.handler.reqIf.feature/.project
new file mode 100644
index 0000000..1a7bd54
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.reqIf.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.reqIf.feature/about.html b/features/org.eclipse.capra.handler.reqIf.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.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.reqIf.feature/build.properties b/features/org.eclipse.capra.handler.reqIf.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.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.reqIf.feature/epl-v20.html b/features/org.eclipse.capra.handler.reqIf.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.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.reqIf.feature/feature.properties b/features/org.eclipse.capra.handler.reqIf.feature/feature.properties
new file mode 100644
index 0000000..4dfcaea
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.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 Traceability for ReqIF
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Support for creating trace links to requirements in ReqIF format
+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.reqIf.feature/feature.xml b/features/org.eclipse.capra.handler.reqIf.feature/feature.xml
new file mode 100644
index 0000000..e233521
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.feature/feature.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.handler.reqif.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.handler.reqIf"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.ui.reqif"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.handler.reqIf.feature/license.html b/features/org.eclipse.capra.handler.reqIf.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.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.reqIf.feature/pom.xml b/features/org.eclipse.capra.handler.reqIf.feature/pom.xml
new file mode 100644
index 0000000..c871389
--- /dev/null
+++ b/features/org.eclipse.capra.handler.reqIf.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.handler.reqif.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.ui.feature/.project b/features/org.eclipse.capra.ui.feature/.project
new file mode 100644
index 0000000..a5ea5d0
--- /dev/null
+++ b/features/org.eclipse.capra.ui.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.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.feature/about.html b/features/org.eclipse.capra.ui.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.ui.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.feature/build.properties b/features/org.eclipse.capra.ui.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.ui.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.feature/epl-v20.html b/features/org.eclipse.capra.ui.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.ui.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.feature/feature.properties b/features/org.eclipse.capra.ui.feature/feature.properties
new file mode 100644
index 0000000..b2c1e88
--- /dev/null
+++ b/features/org.eclipse.capra.ui.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 User Interface Support
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=Views and functionality to include Eclipse Capra features in the user interface, including the view to create trace links and notifications for changes to traced artifacts.
+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.feature/feature.xml b/features/org.eclipse.capra.ui.feature/feature.xml
new file mode 100644
index 0000000..053d909
--- /dev/null
+++ b/features/org.eclipse.capra.ui.feature/feature.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.ui.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.ui.notification"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.capra.documentation"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+   <plugin
+         id="org.eclipse.capra.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.ui.feature/license.html b/features/org.eclipse.capra.ui.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.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.feature/pom.xml b/features/org.eclipse.capra.ui.feature/pom.xml
new file mode 100644
index 0000000..adf22a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.ui.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.ui.plantuml.feature/.project b/features/org.eclipse.capra.ui.plantuml.feature/.project
new file mode 100644
index 0000000..5ebee89
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.plantuml.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.plantuml.feature/about.html b/features/org.eclipse.capra.ui.plantuml.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.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.plantuml.feature/build.properties b/features/org.eclipse.capra.ui.plantuml.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.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.plantuml.feature/epl-v20.html b/features/org.eclipse.capra.ui.plantuml.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.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.plantuml.feature/feature.properties b/features/org.eclipse.capra.ui.plantuml.feature/feature.properties
new file mode 100644
index 0000000..a1286ad
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.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 Traceability Visualisation with PlantUML
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=View to visualise traceability links as graphs and matrices using PlantUML
+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.plantuml.feature/feature.xml b/features/org.eclipse.capra.ui.plantuml.feature/feature.xml
new file mode 100644
index 0000000..798342e
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.ui.plantuml.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.ui.plantuml"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.ui.plantuml.feature/license.html b/features/org.eclipse.capra.ui.plantuml.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.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.plantuml.feature/pom.xml b/features/org.eclipse.capra.ui.plantuml.feature/pom.xml
new file mode 100644
index 0000000..c7c20c7
--- /dev/null
+++ b/features/org.eclipse.capra.ui.plantuml.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.ui.plantuml.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/features/org.eclipse.capra.ui.zest.feature/.project b/features/org.eclipse.capra.ui.zest.feature/.project
new file mode 100644
index 0000000..7e26f48
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.ui.zest.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.zest.feature/about.html b/features/org.eclipse.capra.ui.zest.feature/about.html
new file mode 100644
index 0000000..2b0b7b8
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.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.zest.feature/build.properties b/features/org.eclipse.capra.ui.zest.feature/build.properties
new file mode 100644
index 0000000..faa416e
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.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.zest.feature/epl-v20.html b/features/org.eclipse.capra.ui.zest.feature/epl-v20.html
new file mode 100644
index 0000000..f483638
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.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.zest.feature/feature.properties b/features/org.eclipse.capra.ui.zest.feature/feature.properties
new file mode 100644
index 0000000..bf7eac0
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.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 Traceability Visualisation with Eclipse Zest
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse Capra Development Team
+ 
+# "description" property - description of the feature
+description=View to visualise traceability links as graphs using Eclipse Zest
+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.zest.feature/feature.xml b/features/org.eclipse.capra.ui.zest.feature/feature.xml
new file mode 100644
index 0000000..6ef29b1
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.feature/feature.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.capra.ui.zest.feature"
+      label="%featureName"
+      version="0.7.1.qualifier"
+      provider-name="%providerName">
+
+   <description url="%descriptionURL">
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.capra.ui.zest"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/features/org.eclipse.capra.ui.zest.feature/license.html b/features/org.eclipse.capra.ui.zest.feature/license.html
new file mode 100644
index 0000000..68907a4
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.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.zest.feature/pom.xml b/features/org.eclipse.capra.ui.zest.feature/pom.xml
new file mode 100644
index 0000000..0bbc12f
--- /dev/null
+++ b/features/org.eclipse.capra.ui.zest.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.7.1-SNAPSHOT</version>
+        </parent>
+
+        <artifactId>org.eclipse.capra.ui.zest.feature</artifactId>
+        <packaging>eclipse-feature</packaging>
+
+</project>
diff --git a/index.html b/index.html
deleted file mode 100644
index 557db03..0000000
--- a/index.html
+++ /dev/null
@@ -1 +0,0 @@
-Hello World
diff --git a/org.eclipse.capra.core/META-INF/MANIFEST.MF b/org.eclipse.capra.core/META-INF/MANIFEST.MF
deleted file mode 100644
index 70e3080..0000000
--- a/org.eclipse.capra.core/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Capra core functionality
-Bundle-SymbolicName: org.eclipse.capra.core;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.emf.ecore;bundle-version="2.11.2";visibility:=reexport
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.capra.core.adapters,
- org.eclipse.capra.core.handlers,
- org.eclipse.capra.core.helpers
-Bundle-Vendor: Chalmers Institute of Technology
diff --git a/org.eclipse.capra.core/build.properties b/org.eclipse.capra.core/build.properties
deleted file mode 100644
index 3960f18..0000000
--- a/org.eclipse.capra.core/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.core/plugin.xml b/org.eclipse.capra.core/plugin.xml
deleted file mode 100644
index fdd420f..0000000
--- a/org.eclipse.capra.core/plugin.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension-point id="org.eclipse.capra.configuration.TraceabilityMetaModel" name="TraceabilityMetamodel" schema="schema/org.eclipse.capra.configuration.TraceabilityMetaModel.exsd"/>
-   <extension-point id="org.eclipse.capra.configuration.persistenceHandler" name="persistenceHandler" schema="schema/org.eclipse.capra.configuration.persistenceHandler.exsd"/>
-   <extension-point id="org.eclipse.capra.configuration.artifactHandler" name="artifactHandler" schema="schema/org.eclipse.capra.configuration.artifactHandler.exsd"/>
-   <extension-point id="org.eclipse.capra.configuration.priorityHandler" name="Priority Handler for Artifact Handlers" schema="schema/org.eclipse.capra.configuration.priorityHandler.exsd"/>
-   <extension-point id="org.eclipse.capra.configuration.ArtifactMetaModel" name="ArtifactMetaModel" schema="schema/org.eclipse.capra.configuration.ArtifactMetaModel.exsd"/>
-
-</plugin>
diff --git a/org.eclipse.capra.core/pom.xml b/org.eclipse.capra.core/pom.xml
deleted file mode 100644
index 484f228..0000000
--- a/org.eclipse.capra.core/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.core</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.ArtifactMetaModel.exsd b/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.ArtifactMetaModel.exsd
deleted file mode 100644
index 6085568..0000000
--- a/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.ArtifactMetaModel.exsd
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.ArtifactMetaModel" name="ArtifactMetaModel"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <choice>
-            <element ref="ArtifactMetaModelAdapter"/>
-         </choice>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <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="ArtifactMetaModelAdapter">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </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/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.TraceabilityMetaModel.exsd b/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.TraceabilityMetaModel.exsd
deleted file mode 100644
index f6026b8..0000000
--- a/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.TraceabilityMetaModel.exsd
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.TraceabilityMetaModel" name="TraceabilityMetamodel"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <choice>
-            <element ref="TraceabilityMetaModelAdapter"/>
-         </choice>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <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="TraceabilityMetaModelAdapter">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.adapters.TraceMetaModelAdapter"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </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/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactHandler.exsd b/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactHandler.exsd
deleted file mode 100644
index 3c7ba27..0000000
--- a/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.artifactHandler.exsd
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.artifactHandler" name="artifactHandler"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <choice minOccurs="1" maxOccurs="unbounded">
-            <element ref="artifactHandler"/>
-         </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="artifactHandler">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.handlers.ArtifactHandler"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </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/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.persistenceHandler.exsd b/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.persistenceHandler.exsd
deleted file mode 100644
index 0b3b975..0000000
--- a/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.persistenceHandler.exsd
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.persistenceHandler" name="persistenceHandler"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <choice>
-            <element ref="persistenceHandler"/>
-         </choice>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <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="persistenceHandler">
-      <complexType>
-         <attribute name="class" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.adapters.TracePersistenceAdapter"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </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/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.priorityHandler.exsd b/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.priorityHandler.exsd
deleted file mode 100644
index 9c2b063..0000000
--- a/org.eclipse.capra.core/schema/org.eclipse.capra.configuration.priorityHandler.exsd
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.capra.core" xmlns="http://www.w3.org/2001/XMLSchema">
-<annotation>
-      <appinfo>
-         <meta.schema plugin="org.eclipse.capra.core" id="org.eclipse.capra.configuration.priorityHandler" name="Priority Handler for Artifact Handlers"/>
-      </appinfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <annotation>
-         <appinfo>
-            <meta.element />
-         </appinfo>
-      </annotation>
-      <complexType>
-         <choice minOccurs="1" maxOccurs="unbounded">
-            <element ref="PriorityHandler"/>
-         </choice>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <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="PriorityHandler">
-      <complexType>
-         <attribute name="class" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.eclipse.capra.core.handlers.PriorityHandler"/>
-               </appinfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appinfo>
-         <meta.section type="since"/>
-      </appinfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </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/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractArtifactMetaModelAdapter.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractArtifactMetaModelAdapter.java
deleted file mode 100644
index f4cb09f..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/AbstractArtifactMetaModelAdapter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.eclipse.capra.core.adapters;
-
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Base class for the definition of a custom {@link ArtifactMetaModelAdapter}.
- * Implements a simple strategy to retrieve artifact handlers through the
- * registered extensions.
- */
-public abstract class AbstractArtifactMetaModelAdapter implements ArtifactMetaModelAdapter {
-
-	@Override
-	public ArtifactHandler getArtifactHandlerInstance(EObject artifact) {
-		String handler = getArtifactHandler(artifact);
-		return ExtensionPointHelper.getArtifactHandler(handler).orElse(null);
-	}
-
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/ArtifactMetaModelAdapter.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/ArtifactMetaModelAdapter.java
deleted file mode 100644
index 1469011..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/ArtifactMetaModelAdapter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.adapters;
-
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * This interface defines the functionality necessary to deal with meta models
- * that describe the artifacts to and from which trace links are created.
- */
-public interface ArtifactMetaModelAdapter {
-
-	/**
-	 * Create a new model for artifacts.
-	 * 
-	 * @return the new model
-	 */
-	EObject createModel();
-
-	/**
-	 * Create a new artifact. The list of artifacts is searched for an existing
-	 * artifact with the same handler and uri. If found, the existing artifact
-	 * is returned, otherwise a new artifact is created.
-	 * 
-	 * @param artifactHandler
-	 *            Handler of artifact
-	 * @param artifactUri
-	 *            Uri of artifact
-	 * @param artifactName
-	 *            Name of artifact
-	 * @return new or existing artifact
-	 */
-	EObject createArtifact(EObject artifactModel, String artifactHandler, String artifactUri, String artifactName);
-
-	/**
-	 * Get artifact with given handler and uri.
-	 * 
-	 * @param artifactHandler
-	 *            Handler of artifact
-	 * @param artifactUri
-	 *            Uri of artifact
-	 * @return artifact if found, null otherwise
-	 */
-	EObject getArtifact(EObject artifactModel, String artifactHandler, String artifactUri);
-
-	/**
-	 * Get a handler for the given artifact
-	 * 
-	 * @param artifact
-	 * @return artifact handler
-	 */
-	String getArtifactHandler(EObject artifact);
-
-	/**
-	 * Get the name of the given artifact.
-	 * 
-	 * @param artifact
-	 * @return artifact name
-	 */
-	String getArtifactName(EObject artifact);
-
-	/**
-	 * Get the URI of the given artifact.
-	 * 
-	 * @param artifact
-	 * @return artifact uri
-	 */
-	String getArtifactUri(EObject artifact);
-
-	/**
-	 * Get an instance of the artifact handler.
-	 * 
-	 * @param artifact
-	 * @return artifact handler instance
-	 */
-	ArtifactHandler getArtifactHandlerInstance(EObject artifact);
-
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/Connection.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/Connection.java
deleted file mode 100644
index 7c4e604..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/Connection.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.adapters;
-
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * An minimal abstraction of a traceability link used in
- * {@link TraceMetaModelAdapter}, to retain independence of a concrete trace
- * metamodel.
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class Connection {
-	private EObject origin;
-	private List<EObject> targets;
-	private EObject tlink;
-
-	public Connection(EObject origin, List<EObject> targets, EObject tlink) {
-		this.origin = origin;
-		this.targets = targets;
-		this.tlink = tlink;
-	}
-
-	public EObject getOrigin() {
-		return origin;
-	}
-
-	public List<EObject> getTargets() {
-		return targets;
-	}
-
-	public EObject getTlink() {
-		return tlink;
-	}
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TraceMetaModelAdapter.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TraceMetaModelAdapter.java
deleted file mode 100644
index 27d7dde..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TraceMetaModelAdapter.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.adapters;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * This interface defines all functionality that must be implemented to support
- * a specific trace metamodel. This enables swapping the concept of what a
- * "trace" is, as long as these methods can be implemented.
- * 
- * @author Anthony Anjorin, Salome Maro
- *
- */
-public interface TraceMetaModelAdapter {
-
-	EObject createModel();
-
-	/**
-	 * Used to retrieve a set of types of traces that can be created for the
-	 * given selection of objects in the Eclipse workspace
-	 * 
-	 * @param selection
-	 *            The selection of objects the user has made and wants to create
-	 *            a trace for in the Eclipse workspace
-	 * @return A collection of possible types of traces that can be created for
-	 *         the given selection
-	 */
-	Collection<EClass> getAvailableTraceTypes(List<EObject> selection);
-
-	/**
-	 * Used to create a trace of the given type
-	 * 
-	 * @param traceType
-	 *            The type of the trace to be created
-	 * @param traceModel
-	 *            The root of the trace model that should contain the trace
-	 *            type. If this is empty, then a new root is to be created and
-	 *            returned.
-	 * @param selection
-	 *            Objects to create the trace for
-	 * @return root of trace model that now contains the newly created trace
-	 */
-	EObject createTrace(EClass traceType, EObject traceModel, List<EObject> selection);
-
-	/**
-	 * Used to delete a trace
-	 * 
-	 * @param traceModel
-	 *            Trace model to delete from
-	 * @param first
-	 *            First object
-	 * @param second
-	 *            Second object
-	 */
-	void deleteTrace(EObject first, EObject second, EObject traceModel);
-
-	/**
-	 * Decide if two objects are connected according to the given trace model
-	 * 
-	 * @param first
-	 *            First object
-	 * @param second
-	 *            Second object
-	 * @param traceModel
-	 *            Trace model to base decision on
-	 * @return <code>true</code> if object are connected, <code>false</code>
-	 *         otherwise
-	 */
-	boolean isThereATraceBetween(EObject first, EObject second, EObject traceModel);
-
-	/**
-	 * Determine a list of all objects connected to element according to the
-	 * given trace model
-	 * 
-	 * @param element
-	 *            The element used to determine the list of connected objects.
-	 *            Note that this element could be a trace in the trace model
-	 * @param traceModel
-	 *            Trace model to base calculation on
-	 * @return A Map with the following structure: [Trace object t -> {list of
-	 *         all objects connected to element via t}]
-	 */
-	List<Connection> getConnectedElements(EObject element, EObject traceModel);
-
-	/**
-	 * Determine a list of all objects connected to element according to the
-	 * given trace model
-	 * 
-	 * @param element
-	 *            The element used to determine the list of connected objects.
-	 *            Note that this element could be a trace in the trace model
-	 * @param traceModel
-	 *            Trace model to base calculation on
-	 * @return A Map with the following structure: [Trace object t -> {list of
-	 *         all objects connected to element via t}]
-	 */
-	List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel);
-
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TracePersistenceAdapter.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TracePersistenceAdapter.java
deleted file mode 100644
index a308ede..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/adapters/TracePersistenceAdapter.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.adapters;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-
-/**
- * This interface defines all functionality used to decide how and where the
- * trace model and all artifact wrappers are persisted.
- * 
- * @author Anthony Anjorin, Salome Maro
- *
- */
-public interface TracePersistenceAdapter {
-
-	/**
-	 * Load and return the trace model in the given resource set
-	 * 
-	 * @param resourceSet
-	 *            Resource set to load the trace model in
-	 * @return Root of loaded trace model, Optional can be empty to indicate
-	 *         that loading failed or was not possible (there is no trace model
-	 *         to load at the moment)
-	 */
-	public EObject getTraceModel(ResourceSet resourceSet);
-
-	/**
-	 * Return the trace model for the given object
-	 * 
-	 * @param object
-	 *            EObject to return the model for
-	 * @return Root of trace model, Optional can be empty to indicate that there
-	 *         is no trace model for the object
-	 */
-	public EObject getTraceModel(EObject object);
-
-	/**
-	 * Load and return the container for all artifact wrappers in the given
-	 * resource set
-	 * 
-	 * @param resourceSet
-	 *            Resource set to load the container for artifact wrappers in
-	 * @return Container for all artifact wrappers, Optional can be empty to
-	 *         indicate that loading failed or was not possible (no container
-	 *         exists at the moment)
-	 */
-	public EObject getArtifactWrappers(ResourceSet resourceSet);
-
-	/**
-	 * Return the trace model for the given object
-	 * 
-	 * @param object
-	 *            EObject to return the model for
-	 * @return Root of trace model, Optional can be empty to indicate that there
-	 *         is no trace model for the object
-	 */
-	public EObject getArtifactWrappers(EObject object);
-
-	/**
-	 * Save the trace and artifact models. Implementations are expected to: (i)
-	 * save the trace model, (ii) check selectionForTraceCreation for artifact
-	 * wrappers that are not already contained in artifactWrappers, (iii) add
-	 * these new artifact wrappers to artifactWrappers before saving it as well
-	 * 
-	 * @param traceModel
-	 *            The updated trace model to be saved
-	 * @param artifactModel
-	 *            The updated artifacts to be saved
-	 */
-	void saveTracesAndArtifacts(EObject traceModel, EObject artifactModel);
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/ArtifactHandler.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/ArtifactHandler.java
deleted file mode 100644
index 092fb5f..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/ArtifactHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.handlers;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * This interface defines functionality required to map chosen Objects in the
- * Eclipse workspace to EObjects of some kind, which can then be traced and
- * persisted in EMF models.
- * 
- * Implementations can use the provided concepts of an {@link ArtifactWrapper}
- * if this is suitable.
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public interface ArtifactHandler {
-
-	/**
-	 * Can the handler map selection to an EObject as required?
-	 * 
-	 * @param selection
-	 *            The object to be mapped to an EObject
-	 * @return <code>true</code> if selection can be handled, <code>false</code>
-	 *         otherwise.
-	 */
-	boolean canHandleSelection(Object selection);
-
-	/**
-	 * Map the object selection to an EObject.
-	 * 
-	 * @param selection
-	 *            The object to be mapped
-	 * @param artifactModel
-	 * @return
-	 */
-	EObject getEObjectForSelection(Object selection, EObject artifactModel);
-
-	/**
-	 * Resolve the persisted EObject to the originally selected Object from the
-	 * Eclipse workspace. This is essentially the inverse of the
-	 * getEObjectForSelection operation.
-	 * 
-	 * @param artifact
-	 *            The persisted EObject
-	 * @return originally selected object
-	 */
-	Object resolveArtifact(EObject artifact);
-
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/PriorityHandler.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/PriorityHandler.java
deleted file mode 100644
index 4e431a1..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/handlers/PriorityHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.handlers;
-
-import java.util.Collection;
-
-/**
- * A priority handler is used to define which {@link ArtifactHandler} should
- * preferably be used when creating a new trace link. Depending on the choice,
- * different trace types can then be selected.
- */
-public interface PriorityHandler {
-
-	/**
-	 * This method gets a list of available handers for a selection and returns
-	 * the best (prioritized) handler that can handle the selection
-	 * 
-	 * @param handlers
-	 *            List of available handlers for the selection
-	 * 
-	 * @param selectedElement
-	 *            The selected Object s
-	 * @return one handler
-	 * 
-	 */
-	ArtifactHandler getSelectedHandler(Collection<ArtifactHandler> handlers, Object selectedElement);
-
-}
diff --git a/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ExtensionPointHelper.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ExtensionPointHelper.java
deleted file mode 100644
index 9a1215c..0000000
--- a/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/ExtensionPointHelper.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.core.helpers;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
-import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.handlers.PriorityHandler;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * Provides functionality to work with relevant Capra extension points.
- */
-public class ExtensionPointHelper {
-
-	private static final String TRACE_ID = "org.eclipse.capra.configuration.TraceabilityMetaModel";
-	private static final String TRACE_CONFIG = "class";
-	private static final String PERSISTENCE_ID = "org.eclipse.capra.configuration.persistenceHandler";
-	private static final String PERSISTENCE_CONFIG = "class";
-	private static final String ARTIFACT_ID = "org.eclipse.capra.configuration.ArtifactMetaModel";
-	private static final String ARTIFACT_CONFIG = "class";
-	private static final String ARTIFACT_HANDLER_ID = "org.eclipse.capra.configuration.artifactHandler";
-	private static final String ARTIFACT_HANDLER_CONFIG = "class";
-	private static final String PRIORITY_HANDLER_ID = "org.eclipse.capra.configuration.priorityHandler";
-	private static final String PRIORITY_HANDLER_CONFIG = "class";
-
-	/**
-	 * Gets all extensions from the extension point ID and attribute passed.
-	 * 
-	 * @param ID
-	 *            the ID of the extension point
-	 * 
-	 * @param CONFIG
-	 *            the name of the attribute
-	 * 
-	 * @return List of extensions
-	 */
-	public static List<Object> getExtensions(final String ID, final String CONFIG) {
-		try {
-			IConfigurationElement[] configs = Platform.getExtensionRegistry().getConfigurationElementsFor(ID);
-
-			List<Object> extensions = new ArrayList<>();
-			for (IConfigurationElement config : configs)
-				extensions.add(config.createExecutableExtension(CONFIG));
-
-			return extensions;
-		} catch (Exception ex) {
-			return Collections.emptyList();
-		}
-	}
-
-	/**
-	 * Get the executable extension for the extension ID.
-	 * 
-	 * @param extensionID
-	 *            The ID of the extension
-	 * @return extension
-	 */
-	public static Optional<ArtifactHandler> getExtension(String extensionID, String ID, String CONFIG) {
-		try {
-			IExtensionRegistry registry = Platform.getExtensionRegistry();
-			IExtension extension = registry.getExtension(ID, extensionID);
-			IConfigurationElement[] elements = extension.getConfigurationElements();
-			return Optional.of((ArtifactHandler) elements[0].createExecutableExtension(CONFIG));
-		} catch (Exception e) {
-			return Optional.empty();
-		}
-	}
-
-	/**
-	 * Gets the configured {@link TraceMetaModelAdapter}.
-	 * 
-	 * @return The configured {@code TraceMetaModelAdapter}. If none is
-	 *         configured, an empty instance of {@link Optional} is returned.
-	 */
-	public static Optional<TraceMetaModelAdapter> getTraceMetamodelAdapter() {
-		try {
-			Object extension = getExtensions(TRACE_ID, TRACE_CONFIG).get(0);
-			return Optional.of((TraceMetaModelAdapter) extension);
-		} catch (Exception e) {
-			return Optional.empty();
-		}
-	}
-
-	/**
-	 * Gets the configured {@link TracePersistenceAdapter}.
-	 * 
-	 * @return The configured {@code TracePersistenceAdapter}. If none is
-	 *         configured, an empty instance of {@link Optional} is returned.
-	 */
-	public static Optional<TracePersistenceAdapter> getTracePersistenceAdapter() {
-		try {
-			Object extension = getExtensions(PERSISTENCE_ID, PERSISTENCE_CONFIG).get(0);
-			return Optional.of((TracePersistenceAdapter) extension);
-		} catch (Exception e) {
-			return Optional.empty();
-		}
-	}
-
-	/**
-	 * Gets the configured {@link ArtifactMetaModelAdapter}.
-	 * 
-	 * @return The configured {@code ArtifactMetaModelAdapter}. If none is
-	 *         configured, an empty instance of {@link Optional} is returned.
-	 */
-	public static Optional<ArtifactMetaModelAdapter> getArtifactWrapperMetaModelAdapter() {
-		try {
-			Object extension = getExtensions(ARTIFACT_ID, ARTIFACT_CONFIG).get(0);
-			return Optional.of((ArtifactMetaModelAdapter) extension);
-		} catch (Exception e) {
-			return Optional.empty();
-		}
-	}
-
-	/**
-	 * Gets the available {@link ArtifactHandler} instances.
-	 * 
-	 * @return A collection of all the artifact handlers available. This method
-	 *         collects all plugins that have an extension to the
-	 *         ArtifactHandler Extension point
-	 */
-	public static Collection<ArtifactHandler> getArtifactHandlers() {
-		try {
-			return getExtensions(ARTIFACT_HANDLER_ID, ARTIFACT_HANDLER_CONFIG).stream().map(ArtifactHandler.class::cast)
-					.collect(Collectors.toList());
-		} catch (Exception e) {
-			return Collections.<ArtifactHandler>emptyList();
-		}
-	}
-
-	/**
-	 * Return the artifact handler with the given ID.
-	 * 
-	 * @param ID
-	 * @return ArtifactHandler
-	 */
-	public static Optional<ArtifactHandler> getArtifactHandler(String ID) {
-		return getExtension(ID, ARTIFACT_HANDLER_ID, ARTIFACT_CONFIG);
-	}
-
-	/**
-	 * Gets the configured {@link PriorityHandler}.
-	 * 
-	 * @return The configured {@code PriorityHandler}. If none is configured, an
-	 *         empty instance of {@link Optional} is returned.
-	 */
-	public static Optional<PriorityHandler> getPriorityHandler() {
-		try {
-			Object extension = getExtensions(PRIORITY_HANDLER_ID, PRIORITY_HANDLER_CONFIG).get(0);
-			return Optional.of((PriorityHandler) extension);
-		} catch (Exception e) {
-			return Optional.empty();
-		}
-	}
-}
diff --git a/org.eclipse.capra.documentation/META-INF/MANIFEST.MF b/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
deleted file mode 100644
index 8378c93..0000000
--- a/org.eclipse.capra.documentation/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,7 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Documentation
-Bundle-SymbolicName: org.eclipse.capra.documentation;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.help
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.documentation/build.properties b/org.eclipse.capra.documentation/build.properties
deleted file mode 100644
index cc91072..0000000
--- a/org.eclipse.capra.documentation/build.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.documentation/docu/capraDocumentation-toc.xml b/org.eclipse.capra.documentation/docu/capraDocumentation-toc.xml
deleted file mode 100644
index d7a0e43..0000000
--- a/org.eclipse.capra.documentation/docu/capraDocumentation-toc.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<toc topic="docu/capraDocumentation.html" label="capraDocumentation">
-	<topic href="docu/capraDocumentation.html" label="Capra Help Contents">
-		<topic href="docu/capraDocumentation.html#user-guide" label="User Guide">
-			<topic href="docu/capraDocumentation.html#introduction-what-is-capra" label="Introduction -- What is Capra?"></topic>
-			<topic href="docu/capraDocumentation.html#getting-started" label="Getting Started">
-				<topic href="docu/capraDocumentation.html#prerequisites" label="Prerequisites"></topic>
-				<topic href="docu/capraDocumentation.html#installing-capra" label="Installing Capra">
-					<topic href="docu/capraDocumentation.html#installing-through-an-update-site" label="Installing Capra through an update site"></topic>
-					<topic href="docu/capraDocumentation.html#manual-installation-import-from-git" label="Installing Capra manually with Git"></topic>
-				</topic>
-			</topic>
-			<topic href="docu/capraDocumentation.html#traceability-concepts" label="Traceability Concepts">
-				<topic href="docu/capraDocumentation.html#definition-of-traceability" label="Definition of traceability"></topic>
-				<topic href="docu/capraDocumentation.html#what-is-a-traceability-link" label="What is a traceability link?"></topic>
-				<topic href="docu/capraDocumentation.html#types-of-traceability-links" label="Types of traceability links"></topic>
-				<topic href="docu/capraDocumentation.html#what-is-an-artifact" label="What is an artifact?"></topic>
-				<topic href="docu/capraDocumentation.html#what-is-an-artifact-handler" label="What is an artifact handler?"></topic>
-			</topic>
-			<topic href="docu/capraDocumentation.html#practical-examples" label="Practical Examples">
-				<topic href="docu/capraDocumentation.html#creating-traceability-links" label="Creating Traceability Links">
-					<topic href="docu/capraDocumentation.html#a-link-from-a-requirement-to-a-feature-representing-the-requirement-in-the-feature-model" label="A link from a requirement to a feature representing the requirement in the feature model"></topic>
-					<topic href="docu/capraDocumentation.html#a-link-from-a-feature-to-the-state-machine-that-describes-the-behavior-of-the-feature" label="A link from a feature to the state machine that describes the behavior of the feature"></topic>
-					<topic href="docu/capraDocumentation.html#a-link-from-a-state-machine-to-test-case-that-tests-the-behavior-described-by-the-state-machine" label="A link from a state machine to test case that tests the behavior described by the state machine"></topic>
-					<topic href="docu/capraDocumentation.html#a-link-from-a-requirement-to-a-pdf-document-that-describes-safety-issues-that-need-to-be-considered" label="A link from a requirement to a PDF document that describes safety issues that need to be considered"></topic>
-					<topic href="docu/capraDocumentation.html#a-link-from-a-task-ticket-to-a-requirement-that-is-associated-with-the-ticket" label="A link from a task ticket to a requirement that is associated with the ticket"></topic>
-				</topic>
-				<topic href="docu/capraDocumentation.html#visualizing-traceability-links" label="Visualizing Traceability Links">
-					<topic href="docu/capraDocumentation.html#graphical-view" label="Graphical view"></topic>
-					<topic href="docu/capraDocumentation.html#traceability-matrix" label="Traceability matrix"></topic>
-				</topic>
-				<topic href="docu/capraDocumentation.html#detecting-and-fixing-inconsistencies" label="Detecting and Fixing Inconsistencies"></topic>
-				<topic href="docu/capraDocumentation.html#analyzing-change-impact" label="Analyzing change impact"></topic>
-			</topic>
-		</topic>
-		<topic href="docu/capraDocumentation.html#developer-guide" label="Developer Guide">
-			<topic href="docu/capraDocumentation.html#architecture-of-capra" label="Architecture of Capra">
-				<topic href="docu/capraDocumentation.html#traceability-metamodel" label="Traceability Metamodel"></topic>
-				<topic href="docu/capraDocumentation.html#artifact-handler" label="Artifact Handler"></topic>
-				<topic href="docu/capraDocumentation.html#persistence-handler" label="Persistence Handler"></topic>
-				<topic href="docu/capraDocumentation.html#priority-handler" label="Priority Handler"></topic>
-			</topic>
-			<topic href="docu/capraDocumentation.html#capra-api" label="Capra API">
-				<topic href="docu/capraDocumentation.html#adding-a-custom-traceability-metamodel" label="Adding a custom Traceability Metamodel"></topic>
-				<topic href="docu/capraDocumentation.html#adding-a-custom-artifact-metamodel" label="Adding a custom Artifact metamodel"></topic>
-				<topic href="docu/capraDocumentation.html#adding-a-new-artifact-handler" label="Adding a new artifact handler"></topic>
-			</topic>
-			<topic href="docu/capraDocumentation.html#changing-the-storage-location-of-the-traceability-model" label="Changing the storage location of the traceability model">
-				<topic href="docu/capraDocumentation.html#edit-existing-persistence-handler" label="Edit existing Persistence Handler"></topic>
-				<topic href="docu/capraDocumentation.html#add-a-new-persistence-handler" label="Add a new Persistence Handler"></topic>
-			</topic>
-			<topic href="docu/capraDocumentation.html#taking-care-of-multiple-handlers-for-the-same-artifact-type" label="Taking care of multiple handlers for the same artifact type"></topic>
-			<topic href="docu/capraDocumentation.html#adding-new-source-files" label="Adding new source files"></topic>
-		</topic>
-		<topic href="docu/capraDocumentation.html#references" label="Rerefences"></topic>
-	</topic>
-</toc>
\ No newline at end of file
diff --git a/org.eclipse.capra.documentation/docu/capraDocumentation.html b/org.eclipse.capra.documentation/docu/capraDocumentation.html
deleted file mode 100644
index 346e514..0000000
--- a/org.eclipse.capra.documentation/docu/capraDocumentation.html
+++ /dev/null
@@ -1,494 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-	<head>
-		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-	</head>
-	<body>
-		<h1 id="capra-help-contents">Capra Help Contents</h1>
-		<h2 id="user-guide">User Guide</h2>
-		<h3 id="introduction-what-is-capra">Introduction &#8212; What is Capra?</h3>
-		<p>Capra is a dedicated traceability management tool that allows the creation, management, visualization, and analysis of traceability links within Eclipse. Traceability links can be created between arbitrary artifacts, including all EMF model elements, all types of source code files supported by the Eclipse Platform through specialized development tools, tickets and bugs managed by Eclipse Mylyn, and all other artifacts for which an appropriate wrapper is provided. Capra is highly configurable and allows users (in a company or project) to define link types that are useful to them. </p>
-		<p>Compared to other similar projects which may have similar features, Capra is not a modeling tool or a tool for requirements management. All functionality is focused on providing traceability capabilities, i.e., the ability to create and visualize links between artifacts modeled in different domain-specific languages. This allows the architecture to be highly modular and the tool to be extremely customizable.</p>
-		<h3 id="getting-started">Getting Started</h3>
-		<p>This section describes the prerequisites to run Capra and how to install the tool.</p>
-		<h4 id="prerequisites">Prerequisites</h4>
-		<p>Before downloading and using Capra, first download a distribution of the Eclipse Modeling Environment (Eclipse V 4.5 (Mars)) and make sure you have the following installed:</p>
-		<ul>
-			<li>
-				<a href="http://plantuml.com/eclipse.html">PlantUML</a>: Use the nightlies 
-				<a href="http://basar.idi.ntnu.no/svn/tdt4100/anonymous/trunk/updatesite">update site</a> in Eclipse&#8217;s &#8220;Install new software...&#8221; feature. Version 1.1.11 or higher should be installed through this link. Older versions advertised on the website will not work! It might also be necessary to install 
-				<a href="http://www.graphviz.org">Graphviz</a> binaries on your system to view the visualisation of traceability links.
-			</li>
-			<li>
-				<a href="https://wiki.eclipse.org/Xcore">Xcore</a>: Install through Eclipse&#8217;s &#8220;Install new software...&#8221; feature. Select the Mars distribution &#8220;http://download.eclipse.org/releases/mars/&#8221; in the work with field. 
-			</li>
-			<li>
-				<a href="https://www.eclipse.org/mylyn/">Mylyn</a>: Install the &#8220;Mylyn Builds Connector: Hudson/Jenkins&#8221; through Eclipse&#8217;s &#8220;Install new software...&#8221; feature
-			</li>
-			<li>
-				<a href="https://www.eclipse.org/cdt/">C/C++ Development Tools</a>: : Use Eclipse&#8217;s &#8220;Install new software...&#8221; feature
-			</li>
-			<li>
-				<a href="https://www.eclipse.org/jdt">Java Development Tools</a>: Use Eclipse&#8217;s &#8220;Install new software...&#8221; feature
-			</li>
-			<li>
-				<a href="https://eclipse.org/xtend/">Xtend</a>: Install through the Eclipse Market Place
-			</li>
-			<li>
-				<a href="https://eclipse.org/papyrus/">Papyrus</a>: Install through the Eclipse Market Place 
-			</li>
-		</ul>
-		<h4 id="installing-capra">Installing Capra</h4>
-		<p>Capra can be installed either through an update site or manually.</p>
-		<h5 id="installing-through-an-update-site">Installing Capra through an update site</h5>
-		<ul>
-			<li>Go to the 
-				<a href="https://github.com/Salome-Maro/TraceabilityManagement">Capra Github repository</a>.
-			</li>
-			<li>Click on &#8220;Releases&#8221; (Please note that the current release is a Pre-release and the official release will be available once the tool is an Eclipse project)</li>
-			<li>Download the file 
-				<code>Capra_v.0.1.zip</code> (Note the location of your download)
-			</li>
-			<li>Open your Eclipse environment</li>
-			<li>Make sure that you have all the dependencies listed above installed</li>
-			<li>Click on Help &gt;&gt; Install New Software</li>
-			<li>Click on Add and select Archive</li>
-			<li>Select your zip file and click Add</li>
-			<li>You should see the features that Capra has grouped into several categories as shown in Figure 1.</li>
-			<li>To get a minimum version of Capra working, install all the features in Core and at least one artifact wrapper. This means that if you for instance install only the EMFHandler, then you will only be able to create traceability links between model elements contained in EMF models. It is recommended to install all available artifact handlers.</li>
-			<li>Install the features in the visualization and notification categories in order to get their functionality working. </li>
-			<li>Restart Eclipse</li>
-			<li>Go to perspectives and switch to the Capra perspective</li>
-			<li>Now you can create traceability links as described in 
-				<a href="#creating-traceability-links">Creating Traceability Links</a>.
-			</li>
-		</ul>
-		<p><figure><img src="../images/updatesite.png" width="600"/><figcaption>Figure 1: Installing Capra from the Updatesite</figcaption></figure></p>
-		<h5 id="manual-installation-import-from-git">Installing Capra manually with Git</h5>
-		<ul>
-			<li>Open your Eclipse Environment</li>
-			<li>Go to File &gt;&gt; Import and select Git &gt;&gt; Projects from Git</li>
-			<li>Use the 
-				<a href="https://git.eclipse.org/r/capra/org.eclipse.capra">Git repository</a> and import all available projects to your workspace
-			</li>
-			<li>Build your workspace</li>
-			<li>Make sure that all the projects have no errors.</li>
-			<li>Click on Run &gt;&gt; Run Configurations and create a new Eclipse Application Configuration</li>
-			<li>Select your running workspace</li>
-			<li>Click Finish</li>
-			<li>Once the new workspace opens, create or import projects that you want to use to create traceability links</li>
-			<li>Go to perspectives and switch to the Capra perspective</li>
-			<li>Now you can create traceability links as described in 
-				<a href="#creating-traceability-links">Creating Traceability Links</a>.
-			</li>
-		</ul>
-		<h3 id="traceability-concepts">Traceability Concepts</h3>
-		<p>In this section, important concepts for traceability are described.</p>
-		<h4 id="definition-of-traceability">Definition of traceability</h4>
-		<p>Traceability can be defined as the ability to relate different artifacts created during the development of a software system. Traceability allows creating and using links between system and software development artifacts. For instance, this allows connecting the origin of a requirement with its specification, the design elements that address its specification, the code that implements these design elements, and the acceptance tests that check if the requirement has been achieved.</p>
-		<h4 id="what-is-a-traceability-link">What is a traceability link?</h4>
-		<p>The connections between different artifacts in a software development environment are called traceability links. A traceability link can connect two or more elements to imply that there is a relationship between these elements.</p>
-		<h4 id="types-of-traceability-links">Types of traceability links</h4>
-		<p>Depending on the requirements of a domain, traceability links can have different types. There are three different categories that can lead to different types of traceability links: the shape of a link, the semantics of a link, and the direction of a link. </p>
-		<ul>
-			<li>Link Shape: A link can have a source and target which means that you can only use it to connect two artifacts, or it can be of N-nary type, meaning that you can connect more than two artifacts using the same link.</li>
-			<li>Link Semantics: Traceability links can carry different semantics. The semantics of a link can be implied through the link name, e.g., &#8220;satisfies&#8221;, &#8220;implements&#8221;, &#8220;tests&#8221;. It is also possible to enforce &#8220;technical&#8221; restrictions on which kind of artifacts a link can connect. For example, a &#8220;tests&#8221; link type can only allow connecting a test to a requirement. Link semantics are defined through a 
-				<a href="#traceability-metamodel">traceability metamodel</a> and are configurable in Capra.
-			</li>
-			<li>Direction of a link: A traceability link can be either a directed link or a bi-directional link. A directed link has a &#8220;source&#8221; and &#8220;target(s)&#8221; relationship where the link is from the source and points to the target(s). A directed link also means that one can navigate from &#8220;source&#8221; to target(s) but not vice versa. A bi-directional link means that the link has no semantics in the direction and one can navigate from any connected artifact to the other connected artifact(s).</li>
-		</ul>
-		<h4 id="what-is-an-artifact">What is an artifact?</h4>
-		<p>Artifacts, and in particular software development artifacts refer to the resources that are either created or used as an input by a software development activity. For instance, the requirements elicitation activity produces artifacts known as requirements. Artifacts can be of different types, such as a requirement, a model element, a line of code, or a test case.</p>
-		<h4 id="what-is-an-artifact-handler">What is an artifact handler?</h4>
-		<p>As previously mentioned, there are different types of artifacts that can exist in a software development environment. However, Capra stores the traceability links in form of an EMF model. This means that, in principle, only EMF artifact types can be supported. To support other artifact types, there is a need to create EMF representations of the artifacts. This is what an artifact handler does. It creates an EMF representation of non-EMF artifacts. The representations are known as &#8220;artifact wrappers&#8221;. For example to be able to link to Java Code, an artifact handler for Java needs to be created. For details on how to add new artifact handlers to the tool, refer to 
-			<a href="#adding-a-new-artifact-handler">Adding a new artifact handler</a>. 
-		</p>
-		<h3 id="practical-examples">Practical Examples</h3>
-		<p>To demonstrate features of Capra, we take an example of the development of a Heating, Ventilation and Air Conditioning (HVAC) System. The resources can be dowloaded 
-			<a href="https://www.dropbox.com/s/h6vzmca7sjpq83q/HVAC%20Projects.zip?dl=0">here</a>. The project contains the following artifacts:
-		</p>
-		<ul>
-			<li>A set of requirements which are written in 
-				<a href="http://www.omg.org/spec/ReqIF/">ReqIF</a> format.
-			</li>
-			<li>A feature model describing the different features that can form several products of the HVAC system.</li>
-			<li>State machines used to describe the behavior of the system</li>
-			<li>Generated code from the state machines </li>
-			<li>Test cases defined as Java Unit tests and </li>
-			<li>Issues/Tasks/Tickets reported as development progresses which are stored on a 
-				<a href="https://trac.edgewall.org/wiki/TracTickets">Trac</a> server
-			</li>
-		</ul>
-		<p>These artifacts are shown in the figure below in the context of the development environment of the HVAC system.</p>
-		<p><figure><img src="../images/hvacProjects.png" width="800"/><figcaption>Figure 2: Resources for the HVAC system</figcaption></figure></p>
-		<h4 id="creating-traceability-links">Creating Traceability Links</h4>
-		<p>Capra provides the functionality to create traceability links between different artifacts as long as artifact handlers for those artifact types are available. The current version supports tracing to EMF models, Java code (up to method level), C/C++ code (up to function level), Task tickets from ticketing systems supported by Mylyn, arbitrary files (such as PDF or word), Test executions (Hudson and Jenkins), Papyrus models, and Capella models. </p>
-		<p>To show how traceability links can be created, we continue with the HVAC example and its artifacts as described above. Our aim is to establish the following links:</p>
-		<ol>
-			<li>A link from a requirement to a feature representing the requirement in the feature model</li>
-			<li>A link from a feature to the state machine that describes the behavior of the feature</li>
-			<li>A link from a state machine to test case that tests the behavior described by the state machine</li>
-			<li>A link from a requirement to a PDF document that describes safety issues that need to be considered</li>
-			<li>A link from a task ticket to a requirement that is associated with the ticket</li>
-		</ol>
-		<p>The procedure to create the above links is described below.</p>
-		<h5 id="a-link-from-a-requirement-to-a-feature-representing-the-requirement-in-the-feature-model">A link from a requirement to a feature representing the requirement in the feature model</h5>
-		<ol>
-			<li>To start, open the requirements (
-				<code>HVAC_Requirements.reqif</code> file), with the &#8220;Sample Reflective Ecore Editor&#8221; view. 
-			</li>
-			<li>Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. </li>
-			<li>Next, open the feature model (
-				<code>HVAC_Variants.pld</code>), drag and drop the feature named &#8220;Blower&#8221; into the selection view as well as shown in the figure below. 	<figure> 		<img src="../images/selectionView1.png" width="400"/> 		<figcaption> 		Figure 3: Capra Selection View 		</figcaption> 	</figure> 
-			</li>
-			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;. 	<figure> 		<img src="../images/createTrace.png" width="400"/> 		<figcaption> 		Figure 4: Creating a traceability link 		</figcaption> 	</figure> </li>
-			<li>A pop up window will appear, showing the types of links that can be created based on the selected element.</li>
-			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK. <figure> 	<img src="../images/relatedTo.png" width="400"/>	<figcaption> 	Figure 5: Creating a traceability link of type &#8220;RelatedTo&#8221; 	</figcaption> </figure> 	Since this is our first traceability link, a new folder will appear in the 	workspace with the name 
-				<code>__WorkspaceTraceModels</code>. This folder 	contains your 	trace model which contains the traceability link we just created and an 	artifact wrapper model which contains EMF 		representations of artifacts that 	are not in EMF format. In our case the artifact model should be empty since 	the artifacts we used 	to create the traceability link are all EMF elements. 	The trace model (
-				<code>traceModel.xmi</code>) should contain only one traceability link. <figure> 		<img src="../images/traceLink.png" width="700"/> 		<figcaption> 		Figure 6: A traceability link of type &#8220;RelatedTo&#8221; 		</figcaption> </figure>
-			</li>
-			<li>To remove the elements from the selection view, there are two options: 
-				<ol>
-					<li>Right click on an element and select &#8220;Remove from Selection&#8221;. This will only remove the selected element.</li>
-					<li>Right click anywhere on the selection view and click on &#8220;Clear selection&#8221;. This will remove all elements in the selection view. </li>
-				</ol>
-			</li>
-		</ol>
-		<h5 id="a-link-from-a-feature-to-the-state-machine-that-describes-the-behavior-of-the-feature">A link from a feature to the state machine that describes the behavior of the feature</h5>
-		<ol>
-			<li>From the feature model, drag and drop the feature named &#8220;Blower&#8221; into the selection view.</li>
-			<li>Open the 
-				<code>BlowerCtlr</code> state machine and drag and drop the parent element to the selection view.
-			</li>
-			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
-			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements.</li>
-			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK. 	Expand the 
-				<code>__WorkspaceTraceModels</code> project and open the trace model 	(
-				<code>traceModel.xmi</code>). You will notice that a second traceability link has been 	created.
-			</li>
-		</ol>
-		<h5 id="a-link-from-a-state-machine-to-test-case-that-tests-the-behavior-described-by-the-state-machine">A link from a state machine to test case that tests the behavior described by the state machine</h5>
-		<ol>
-			<li>Clear the selection view.</li>
-			<li>Again, Open the 
-				<code>BlowerCtlr</code> state machine and drag and drop the parent element to the selection view.
-			</li>
-			<li>Expand the project containing the tests, expand the 
-				<code>BlowerTest.java</code> file to reveal the BlowerTest class. Drag and drop this class to the selection view.
-			</li>
-			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
-			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements.</li>
-			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK.</li>
-		</ol>
-		<h5 id="a-link-from-a-requirement-to-a-pdf-document-that-describes-safety-issues-that-need-to-be-considered">A link from a requirement to a PDF document that describes safety issues that need to be considered</h5>
-		<ol>
-			<li>Clear the selection view.	</li>
-			<li>Expand the folder containing the requirements to reveal its contents.</li>
-			<li>Open the requirements (
-				<code>HVAC_Requirements.reqif</code> file), with the &#8220;Sample Reflective Ecore Editor&#8221; view.
-			</li>
-			<li>Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. </li>
-			<li>Select the 
-				<code>ISO26262 Requirements.png</code> file from the Project Explorer and drag and drop it to the selection view
-			</li>
-			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
-			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements and the definition of the traceability metamodel. In this example the traceability metamodel has only one traceability link type which is called &#8220;RelatedTo&#8221;.</li>
-			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK.</li>
-		</ol>
-		<h5 id="a-link-from-a-task-ticket-to-a-requirement-that-is-associated-with-the-ticket">A link from a task ticket to a requirement that is associated with the ticket</h5>
-		<ol>
-			<li>Clear the selection view</li>
-			<li>Drag Req 3 and drop it in the Selection view.</li>
-			<li>From the 
-				<code>Task List</code> view, where the tasks from the Trac server are listed, select one task and drag and drop it to the selection view
-			</li>
-			<li>Right click on the selection view and click on &#8220;Create Trace&#8221;.</li>
-			<li>A pop up window will appear, showing the types of links that can be created based on the selected elements.</li>
-			<li>Choose a traceability link type to create (in our case &#8220;RelatedTo&#8221;) and click OK.</li>
-		</ol>
-		<h4 id="visualizing-traceability-links">Visualizing Traceability Links</h4>
-		<p>Capra offers two ways in which you can visualize the traceability links that you have created. These are the Graphical view where the artifacts are shown as nodes and the links as edges in a graph and the Matrix view where artifacts are arranged in rows and column with an &#8220;x&#8221; mark in the cells to indicate a traceability link between the artifact in the column and that in the specific row.</p>
-		<h5 id="graphical-view">Graphical view</h5>
-		<p>To view the traceability links related to an artifact and the connected artifacts, simply select the artifact while in the &#8220;Sample Reflective Editor&#8221; View. The &#8220;Plant UML View&#8221; needs to be open as well.</p>
-		<p>The graphical view allows you to explore directly connected elements or transitively connected elements. To use the latter functionality, click on the downward arrow on right hand corner of the Plant UML View and click on &#8220;Toggle Transitivity&#8221;. This enables you to move from viewing only directly connected elements to the selected element, to viewing all the transitively connected elements. Use the same button to return to the previously active view.</p>
-		<p><figure>		<img src="../images/toggleTransitivity.png" width="600"/>		<figcaption>		Figure 7: Toggle Transitivity		</figcaption></figure></p>
-		<h5 id="traceability-matrix">Traceability matrix</h5>
-		<p>The traceability matrix can be created by selecting at least two model elements when the &#8220;Plant UML View&#8221; is open. This will list all the model elements as rows and columns and an &#8220;x&#8221; mark will appear to show that there is a traceability link between two elements. For instance, the picture below shows the resulting matrix when selecting Req3 and the artifact wrapper representing the PDF document. </p>
-		<p><figure>		<img src="../images/matrixView.png" width="400"/>		<figcaption>		Figure 8: Matrix View as a result of selecting two elements		</figcaption></figure></p>
-		<p>Selecting more than two model elements expands the matrix into a square matrix with same elements listed vertically and horizontally. </p>
-		<p><figure>		<img src="../images/matrixViewMany.png" width="600"/>		<figcaption>		Figure 9: Matrix view as a result of selecting more than two elements		</figcaption></figure></p>
-		<h4 id="detecting-and-fixing-inconsistencies">Detecting and Fixing Inconsistencies</h4>
-		<p>Traceability links need to be updated as the artifacts they connect evolve. Capra provides a feature to notify users when these artifacts change and to give suggestions on how the traceability links can be changed accordingly. The suggestions are offered as quick fixes to the user and if the user wants to make the changes suggested by the quick fix, the fix can be applied automatically by clicking on it. Currently Capra uses the Eclipse Notification Framework to detect changes and can capture rename, move, change and delete actions made on artifacts that have traceability links.</p>
-		<p>The problems detected by Capra are shown in the 
-			<code>Problems View</code> with a type &#8220;Capra problem&#8221;. We demonstrate the use of the 
-			<code>Problems View</code> and quick fixes using our practical example of the HVAC project.
-		</p>
-		<ol>
-			<li>Go to the &#8220;Project Explorer&#8221; and expand the project containing test cases. </li>
-			<li>Delete the file 
-				<code>BlowerTest.java</code>.
-			</li>
-			<li>Look at the 
-				<code>Problems view</code> and you will see a warning with a type &#8220;Capra Problem&#8221;. The issue tells you that there is a traceability link that points to a file named 
-				<code>BlowerTest.java</code>, but that file has been deleted. <figure> 		<img src="../images/problemView.png" width="700"/> 		<figcaption> 		Figure 9: Problem view showing Capra errors 		</figcaption> </figure>
-			</li>
-			<li>Right click on the warning and select Quick fix.</li>
-			<li>A window will appear showing the quick fixes options available. In this case there is one option, which is to delete the traceability link related to 
-				<code>BlowerTest.java</code> file. <figure> 		<img src="../images/quickFix.png" width="500"/> 		<figcaption> 		Figure 10: Quick Fixes 		</figcaption> </figure> 
-			</li>
-			<li>Click Finish.</li>
-			<li>Notice that the traceability link has been deleted and the warning disappears.</li>
-		</ol>
-		<h4 id="analyzing-change-impact">Analyzing change impact</h4>
-		<p>In this section, we describe scenarios in which Capra can be used to facilitate change impact analysis. Change impact analysis allows to evaluate the effect a change to an artifact will have on other artifacts. Using the HVAC example, assume that the customer requests a change on the requirement 
-			<code>REQ-3</code>. Before such a change is made, it is important for the company to know which other artefacts will be affected. With Capra, this can be achieved by selecting 
-			<code>REQ-3</code> and, using the visualization, reviewing all other artefacts that are related to 
-			<code>REQ-3</code> too. 
-		</p>
-		<p><figure>		<img src="../images/toggleTransitivity.png" width="700"/>		<figcaption>		Figure 11: Capra graphical view showing directly connected elements		</figcaption></figure> </p>
-		<p>For further analysis, clicking on Toggle transitivity as shown in the figure below will show all artifacts connected to 
-			<code>REQ-3</code> and their connnections to other artifacts. The end user can therefore use this information as a starting point for performing impact analysis.
-		</p>
-		<p><figure>		<img src="../images/graphical-view-transitive.png" width="500"/>		<figcaption>		Figure 12: Capra graphical view showing transitively connected elements		</figcaption></figure> </p>
-		<h2 id="developer-guide">Developer Guide</h2>
-		<p>The following subsection describes the technical architecture of the tool. This information is also available in more detail in a tool demonstration paper 
-			<a href="#references">(1)</a>. Our motivation for choosing this architecture design is based on a study on factors and guidelines that affect how a traceability tool can support traceability maintenance 
-			<a href="#references">(2)</a>. 
-		</p>
-		<h3 id="architecture-of-capra">Architecture of Capra</h3>
-		<p>Capra is an Eclipse plugin and uses the Eclipse Modeling Framework (EMF) as its base technology. It stores the traceability model as an EMF model. The tool relies on the 
-			<a href="https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points">Eclipse Extension mechanism</a> and provides extension points for those parts of the tool that can be customized. Based on requirements we collected from many interested parties in the industry, the tool is customizable at four points: 
-		</p>
-		<ol>
-			<li>The types of links to be supported;</li>
-			<li>Which types of artifacts can be traced to;</li>
-			<li>How the links should be stored;</li>
-			<li>The artifact handler that should be used in case there is more than one available for one artifact type.</li>
-		</ol>
-		<p>Additionally, Capra has an API which makes traceability data available to other tools. The current version uses the provided traceability data to visualize it graphically.</p>
-		<p>The figure below depicts the extension points. The rationale for each of them is described in the following.</p>
-		<p><figure>		<img src="../images/capraArchitecture.png" width="600"/>		<figcaption>		Figure 13: The Architecture of Capra		</figcaption></figure> </p>
-		<h4 id="traceability-metamodel">Traceability Metamodel</h4>
-		<p>Depending on the company, development context, and process used, the traceability links required can differ. For example, traceability links for a company developing web-based solutions are not the same as links for companies developing embedded software. In the former case, traceability links can help connect certain entries in the server configuration files to specific requirements. The traceability links for embedded software need to relate, e.g., the hardware specification to the software design. Both concepts do not make sense in the respective other domain.</p>
-		<p>To address different link types, the tool offers an extension point for the traceability metamodel. Here the end user (company), can define the types of links through a metamodel and supply it to the tool. Examples of link types are &#8220;verifies&#8221;, &#8220;implements&#8221;, &#8220;refines&#8221;, &#8220;related to&#8221; etc. In addition to link types, the metamodel can also define additional information to be stored with each link. It might be desirable, e.g., to store the date and time the link was created or which user created it.</p>
-		<h4 id="artifact-handler">Artifact Handler</h4>
-		<p>Software development usually involves a number of activities such as requirements engineering, design, implementation, and testing. In most cases, each of these activities use different tools and produce artifacts of different formats. A traceability tool needs to ensure that the different formats can be traced to and from. Since different companies use different tools, it is not easy to foresee which formats a traceability tool should support. This problem of diverse artifacts existing in the development environment has been noted by several studies on traceability. Our tool offers an extension point for Artifact Handlers which allows adding artifact formats based on the needs of the end users.</p>
-		<p>As discussed, Capra stores the traceability links as an EMF model. To be able to support tracing to other formats, EMF representations of these other formats are required. Implementing an extension for a certain format means providing an EMF representation of that format to the tool using the artifact handler extension point. </p>
-		<h4 id="persistence-handler">Persistence Handler</h4>
-		<p>The storage of traceability links is another factor that can vary depending on company policies or project set-ups. For some cases it makes sense that there is a traceability model per project while in some cases there can be one traceability model for the whole workspace. The extension point Persistence Handler allows defining such storage locations. It will also allow integrating the traceability model with versioning solutions such as EMF Store, CDO or Git.</p>
-		<h4 id="priority-handler">Priority Handler</h4>
-		<p>In situations where there is more than one artifact handler that can handle the same artifact type, the tool provides an extension point for a so called Priority Handler. Here the user can define which handler should be used. </p>
-		<h3 id="capra-api">Capra API</h3>
-		<p>Capra provides several programming interfaces that can be used by other plugins to access the traceability data. Currently, there are three interfaces: 
-			<code>ArtifactMetamodelAdapter</code>, 
-			<code>TraceMetamodelAdapter</code> and 
-			<code>TracePersistenceAdapter</code>. 
-			<code>ArtifactMetaodelAdapter</code> has methods that provide access to the artifact wrappers and their contents,  
-			<code>TraceMetamodelAdapter</code> has methods that provide access to the traceability links and the content of the links and the 
-			<code>TracePersistenceAdapter</code> has methods that provide access to the traceability model and the artifact wrapper model. The traceability model containing the traceability links is available to other tools. That means that traceability data can be used by other tools for specialised tasks such as impact analysis.
-		</p>
-		<p>A good example on how these methods can be used is in the plugin 
-			<code>org.eclipse.capra.ui.plantuml</code>. This plugin utilizes the methods to get the traceability model and its links and also to determine which artifacts are connected by the links. The plugin uses the results of these methods to create a string that can be rendered as a diagram using the PlantUML view. For example in the file 
-			<code>VisualizationHelper</code>, the method 
-			<code>CreateMatrix()</code> calls a method 
-			<code>isThereATraceBetween()</code> which is part of the
-			<br/>
-			<code>TraceMetamodelAdapter</code> interface. 
-		</p>
-		<p><figure>		<img src="../images/interface.png" width="600"/>		<figcaption>		Figure 14: Use of the method &#8220;isThereATraceBetween()&#8221; provided by the `TraceMetamodelAdapter` interface		</figcaption></figure></p>
-		<h4 id="adding-a-custom-traceability-metamodel">Adding a custom Traceability Metamodel</h4>
-		<p>To define your own traceability metamodel follow the steps below:</p>
-		<ol>
-			<li>Create a Java project and name it 
-				<code>org.eclipse.capra.MyTraceabilityMetaModel</code>
-			</li>
-			<li>Create a new folder and name it 
-				<code>model</code>
-			</li>
-			<li>In the 
-				<code>model</code> folder create a new file and name it 
-				<code>MyTraceabilityMetaModel.xcore</code>. A pop up window will appear asking if you want to add the Xtext nature to the project. Click &#8220;Yes&#8221;.
-			</li>
-			<li>Define your traceability metamodel as required. In our example, we add two types of traceability links i.e &#8220;implements&#8221; and &#8220;tests&#8221; <figure> 		<img src="../images/traceMetamodelDefinition.png" width="400"/>		<figcaption> 		Figure 15: Tracemetamodel Definition 		</figcaption> </figure> </li>
-			<li>Open the 
-				<code>plugin.xml</code> file of the new project and click on the &#8220;Extension Points&#8221; tab 
-			</li>
-			<li>Un-check the check box that says &#8220;Show only extension points from the required plugins&#8221; </li>
-			<li>In the text box for the &#8220;Extension point filter&#8221; type &#8220;Traceability&#8221; and select 
-				<code>org.eclipse.capra.configuration.TraceabilityMetaModel</code>
-			</li>
-			<li>Click Finish. <figure> 		<img src="../images/addTraceExtension.png" width="500"/> 		<figcaption> 		Figure 16: Adding the Trace metamodel extension point 		</figcaption> </figure> </li>
-			<li>Another pop up window will appear asking if you want to add the project 
-				<code>org.eclipse.capra.core</code> to the list of plugin dependencies. Click Yes 
-			</li>
-			<li>Right click on the newly added extension, and click on &#8220;New&#8221; then 
-				<code>TraceabilityMetaModelAdapter</code>. A new 
-				<code>TraceabilityMetaModelAdapter</code> will be created 	<figure> 		<img src="../images/newTMAdapter.png" width="700"/> 		<figcaption> 		Figure 17: Adding the Trace metamodel extension point 		</figcaption> 	</figure> 	
-			</li>
-			<li>Click on the newly created 
-				<code>TraceabilityMetaModelAdapter</code>. On the right hand side, we need to provide a class for this extension in which we will implement all the required interfaces. 
-			</li>
-			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
-				<code>src</code> and name your class <figure> 		<img src="../images/newClass.png" width="700"> </img>		<figcaption> 		Figure 18: Add new Class 		</figcaption> </figure> <figure> 		<img src="../images/addNewTraceAdapterClass.png" width="500"/> 		<figcaption> 		Figure 19: Add new Trace Adapter Class 		</figcaption> </figure> 
-			</li>
-			<li>Click Finish and a class will be created with the methods to be implemented in it. </li>
-			<li>Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. </li>
-		</ol>
-		<h4 id="adding-a-custom-artifact-metamodel">Adding a custom Artifact metamodel</h4>
-		<p>To define your own artifact metamodel, follow the steps below:</p>
-		<ol>
-			<li>In the same project used to define the traceability metamodel, go to the 
-				<code>model</code> folder, create a new file and name it 
-				<code>artifact.xcore</code>.
-			</li>
-			<li>Define the artifact metamodel as in the picture below. Note that you can modify this definition to fit your needs. <figure> 		<img src="../images/artifactMetamodelDefinition.png" width="400"/> 		<figcaption> 		Figure 20: Artifact Metamodel definition 		</figcaption> </figure> </li>
-			<li>Next, open the 
-				<code>plugin.xml</code> file of the project and click on the &#8220;Extension Points&#8221; tab
-			</li>
-			<li>Un-check the checkbox that says &#8220;Show only extension points from the required plugins&#8221; </li>
-			<li>In the textbox for &#8220;Extension point filter&#8221; type &#8220;Artifact&#8221; and select 
-				<code>org.eclipse.capra.configuration.ArtifactMetamodel</code>
-			</li>
-			<li>Right click on the newly added extension, and click on &#8220;New&#8221; then 
-				<code>ArtifactMetamodelAdapter</code>. A new 
-				<code>ArtifactMetamodelAdapter</code> will be created <figure> 		<img src="../images/newArtifactAdapter.png" width="600"/>		<figcaption> 		Figure 21: Artifact adapter definition 		</figcaption> </figure> 
-			</li>
-			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
-				<code>src</code> and name your class <figure> 		<img src="../images/newArtifactAdapterClass.png" width="500"/> 		<figcaption> 		Figure 22: Artifact adapter Class definition 		</figcaption> </figure> 
-			</li>
-			<li>Click Finish and a class will be created with the methods to be implemented in it. </li>
-			<li>Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. </li>
-		</ol>
-		<p>NOTE: To test your new Traceability metamodel and artifact model, first close the project 
-			<code>org.eclipse.capra.generic.tracemodels</code>. Otherwise that project will be used by Capra.
-		</p>
-		<h4 id="adding-a-new-artifact-handler">Adding a new artifact handler</h4>
-		<p>In case you want Capra to support an artifact type that is not already supported, you will need to create a new artifact handler for the particular artifact type.</p>
-		<p>As an example, we describe how the Java artifact handler was added using the following steps:</p>
-		<ol>
-			<li>Create a new plugin project and name it 
-				<code>org.eclipse.capra.handler.jdt</code>.
-			</li>
-			<li>In the 
-				<code>src</code> folder of the new project, create a package and name it 
-				<code>org.eclipse.capra.handler.jdt</code>.
-			</li>
-			<li>Expand the 
-				<code>META-INF</code> folder , open the 
-				<code>MANIFEST.MF</code> file and click on the &#8220;Extensions&#8221; tab
-			</li>
-			<li>Click on Add. A pop up window will appear with a list of available extension points.</li>
-			<li>Un-check the checkbox that says &#8220;Show only extension points from the required plugins&#8221; </li>
-			<li>In the textbox for &#8220;Extension point filter&#8221; type &#8220;Artifact&#8221; and select 
-				<code>org.eclipse.capra.configuration.ArtifactMetaModel</code> and click Finish.
-			</li>
-			<li>Another pop up window will appear asking if you want to add the project 
-				<code>org.eclipse.capra.core</code> to the list of plugin dependencies. Click Yes 
-			</li>
-			<li>Right click on the newly added extension, and click on &#8220;New&#8221;, then &#8220;ArtifactHandler&#8221;. A new 
-				<code>ArtifactHandler</code> will be created. <figure> 		<img src="../images/newArtifactHandler.png" width="600"/>		<figcaption> 		Figure 23: New Artifact Handler definition 		</figcaption> </figure>
-			</li>
-			<li>Click on the newly created 
-				<code>ArtifactHandler</code>. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
-			</li>
-			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
-				<code>src</code> and name your class <figure> 		<img src="../images/newArtifactClass.png" width="500"/>		<figcaption> 		Figure 24: New Artifact Handler Class definition 		</figcaption> </figure>
-			</li>
-			<li>Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.</li>
-			<li>Implement all required methods. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. </li>
-		</ol>
-		<h3 id="changing-the-storage-location-of-the-traceability-model">Changing the storage location of the traceability model</h3>
-		<p>The storage of the traceability model and the artifact handler model is not fixed and can be modified depending on the users' needs and requirements. To change the storage location of the traceability model there are two options.</p>
-		<ol>
-			<li>To edit the existing persistence handler project OR </li>
-			<li>To create a completely new persistence handler.</li>
-		</ol>
-		<h4 id="edit-existing-persistence-handler">Edit existing Persistence Handler</h4>
-		<ol>
-			<li>Expand the project 
-				<code>org.eclipse.capra.generic.persistance</code>.
-			</li>
-			<li>Expand the 
-				<code>src</code> folder and then the 
-				<code>org.eclipse.capra.generic.persistence</code> package
-			</li>
-			<li>Open the file 
-				<code>TracePersistenceAdapter.java</code>.
-			</li>
-			<li>Edit the static variables 
-				<code>DEFAULT_PROJECT_NAME</code>, 
-				<code>DEFAULT_TRACE_MODEL_NAME</code> and 
-				<code>DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME</code> to reflect the new location and new model names for your traceability model and artifact wrapper model. <figure> 		<img src="../images/editPersistenceHandler.png" width="700"/> 		<figcaption> 		Figure 25: Editing existing Persistence Handler 		</figcaption> </figure>
-			</li>
-			<li>Save the project and Run Capra</li>
-		</ol>
-		<h4 id="add-a-new-persistence-handler">Add a new Persistence Handler</h4>
-		<ol>
-			<li>Create a new plugin project and name it 
-				<code>org.eclipse.capra.MyPersistenceHandler</code>
-			</li>
-			<li>In the 
-				<code>src</code> folder create a package and name it 
-				<code>org.eclipse.capra.MyPersistenceHandler</code>.
-			</li>
-			<li>Expand the 
-				<code>META-INF</code> folder , Open the 
-				<code>MANIFEST.MF</code> file and click on the &#8220;Extensions&#8221; tab.
-			</li>
-			<li>Click on Add. A pop up window will appear with a list of available extension points.</li>
-			<li>Un-check the checkbox that says &#8220;Show only extension points from the required plugins&#8221; </li>
-			<li>In the textbox for &#8220;Extension point filter&#8221; type &#8220;Persistence&#8221;, select 
-				<code>org.eclipse.capra.configuration.persistenceHandler</code> and click Finish. <figure> 		<img src="../images/addPersistenceHandler.png" width="500"/> 		<figcaption> 		Figure 26: Add new Persistence Handler 		</figcaption> </figure>
-			</li>
-			<li>Another pop up window will appear asking if you want to add the project 
-				<code>org.eclipse.capra.core</code> to the list of plugin dependencies. Click Yes. 
-			</li>
-			<li>Right click on the newly added extension, and click on &#8220;New&#8221;, then 
-				<code>persistenceHandler</code>. A new Persistence Handler will be created. <figure> 		<img src="../images/newPersistenceHandler.png" width="600"/>		<figcaption> 		Figure 27: New Persistence Handler 		</figcaption> </figure>
-			</li>
-			<li>Click on the newly created 
-				<code>persistenceHandler</code>. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
-			</li>
-			<li>Click on &#8220;Class&#8221; and a pop up window for creating a new class will appear. Make sure the folder is 
-				<code>src</code> and name your class. <figure> 		<img src="../images/newPersistenceHandlerClass.png" width="500"/> 		<figcaption> 		Figure 28: New Persistence Handler Class 		</figcaption> </figure>
-			</li>
-			<li>Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.</li>
-			<li>Implement all methods according to your needs. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name.</li>
-		</ol>
-		<h3 id="taking-care-of-multiple-handlers-for-the-same-artifact-type">Taking care of multiple handlers for the same artifact type</h3>
-		<p>There are cases in which several handlers are available for one artifact type. It is important during configuration to select which handler should be given a priority for the particular artifact type. This can be done by editing the code in the Priority Handler as follows:</p>
-		<ol>
-			<li>Expand the project 
-				<code>org.eclipse.capra.generic.priority</code>.
-			</li>
-			<li>Expand the src folder and then the 
-				<code>org.eclipse.capra.generic.priority</code> package.
-			</li>
-			<li>Open the file 
-				<code>DefaultPriorityHander.java</code>.
-			</li>
-			<li>Modify the code to select the correct handler. For instance, the code below selects a 
-				<code>hudsonHandler</code> when the element selected is a Test element or a build element. <figure> 		<img src="../images/priorityHandlerCode.png" width="700"/> 		<figcaption> 		Figure 29: Code for the Priority Handler 		</figcaption> </figure>
-			</li>
-		</ol>
-		<h3 id="adding-new-source-files">Adding new source files</h3>
-		<p>It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.</p>
-		<p>Install the 
-			<a href="https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool">Eclipse Releng Tools</a>. They contain the copyright tool. Use the following copyright header:
-		</p>
-		<pre><code>Copyright (c) ${date} 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 v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
-</code></pre>
-		<pre><code>Contributors:
-bc.     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-</code></pre>
-		<p>The Contributors entry can be replaced with the appropriate names. Use &#8220;Fix copyrights&#8221; from the context menu to add the copyrights to all relevant files in a project or folder.</p>
-		<h2 id="references">Rerefences</h2>
-		<p>1. Maro, S. and Steghöfer, JP., 2016, September. Capra: A Configurable and Extendable Traceability Management Tool. In 2016 IEEE 24th International Requirements Engineering Conference (RE). IEEE.
-			<br/>2. Maro, S., Anjorin A., Wohlrab R. and Steghöfer, JP., 2016, September. Traceability Maintenance: Factors and Guidelines. In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference. IEEE.
-		</p>
-	</body>
-</html>
\ No newline at end of file
diff --git a/org.eclipse.capra.documentation/docu/capraDocumentation.textile b/org.eclipse.capra.documentation/docu/capraDocumentation.textile
deleted file mode 100644
index 4de89ae..0000000
--- a/org.eclipse.capra.documentation/docu/capraDocumentation.textile
+++ /dev/null
@@ -1,377 +0,0 @@
-h1(#capra-help-contents). Capra Help Contents
-
-h2(#user-guide). User Guide
-
-h3(#introduction-what-is-capra). Introduction -- What is Capra?
-
-Capra is a dedicated traceability management tool that allows the creation, management, visualization, and analysis of traceability links within Eclipse. Traceability links can be created between arbitrary artifacts, including all EMF model elements, all types of source code files supported by the Eclipse Platform through specialized development tools, tickets and bugs managed by Eclipse Mylyn, and all other artifacts for which an appropriate wrapper is provided. Capra is highly configurable and allows users (in a company or project) to define link types that are useful to them. 
-
-Compared to other similar projects which may have similar features, Capra is not a modeling tool or a tool for requirements management. All functionality is focused on providing traceability capabilities, i.e., the ability to create and visualize links between artifacts modeled in different domain-specific languages. This allows the architecture to be highly modular and the tool to be extremely customizable.
-
-h3(#getting-started). Getting Started
-
-This section describes the prerequisites to run Capra and how to install the tool.
-
-h4(#prerequisites). Prerequisites
-
-Before downloading and using Capra, first download a distribution of the Eclipse Modeling Environment (Eclipse V 4.5 (Mars)) and make sure you have the following installed:
-
-* "PlantUML":http://plantuml.com/eclipse.html: Use the nightlies "update site":http://basar.idi.ntnu.no/svn/tdt4100/anonymous/trunk/updatesite in Eclipse's "Install new software..." feature. Version 1.1.11 or higher should be installed through this link. Older versions advertised on the website will not work! It might also be necessary to install "Graphviz":http://www.graphviz.org binaries on your system to view the visualisation of traceability links.
-* "Xcore":https://wiki.eclipse.org/Xcore: Install through Eclipse's "Install new software..." feature. Select the Mars distribution "http://download.eclipse.org/releases/mars/" in the work with field. 
-* "Mylyn":https://www.eclipse.org/mylyn/: Install the "Mylyn Builds Connector: Hudson/Jenkins" through Eclipse's "Install new software..." feature
-* "C/C++ Development Tools":https://www.eclipse.org/cdt/: : Use Eclipse's "Install new software..." feature
-* "Java Development Tools":https://www.eclipse.org/jdt: Use Eclipse's "Install new software..." feature
-* "Xtend":https://eclipse.org/xtend/: Install through the Eclipse Market Place
-* "Papyrus":https://eclipse.org/papyrus/: Install through the Eclipse Market Place 
-
-h4(#installing-capra). Installing Capra
-
-Capra can be installed either through an update site or manually.
-
-h5(#installing-through-an-update-site). Installing Capra through an update site
-
-* Go to the "Capra Github repository":https://github.com/Salome-Maro/TraceabilityManagement.
-* Click on "Releases" (Please note that the current release is a Pre-release and the official release will be available once the tool is an Eclipse project)
-* Download the file @Capra_v.0.1.zip@ (Note the location of your download)
-* Open your Eclipse environment
-* Make sure that you have all the dependencies listed above installed
-* Click on Help >> Install New Software
-* Click on Add and select Archive
-* Select your zip file and click Add
-* You should see the features that Capra has grouped into several categories as shown in Figure 1.
-* To get a minimum version of Capra working, install all the features in Core and at least one artifact wrapper. This means that if you for instance install only the EMFHandler, then you will only be able to create traceability links between model elements contained in EMF models. It is recommended to install all available artifact handlers.
-* Install the features in the visualization and notification categories in order to get their functionality working. 
-* Restart Eclipse
-* Go to perspectives and switch to the Capra perspective
-* Now you can create traceability links as described in "Creating Traceability Links":#creating-traceability-links.
-
-<figure><img src="../images/updatesite.png" width="600"/><figcaption>Figure 1: Installing Capra from the Updatesite</figcaption></figure>
-
-h5(#manual-installation-import-from-git). Installing Capra manually with Git
-
-* Open your Eclipse Environment
-* Go to File >> Import and select Git >> Projects from Git
-* Use the "Git repository":https://git.eclipse.org/r/capra/org.eclipse.capra and import all available projects to your workspace
-* Build your workspace
-* Make sure that all the projects have no errors.
-* Click on Run >> Run Configurations and create a new Eclipse Application Configuration
-* Select your running workspace
-* Click Finish
-* Once the new workspace opens, create or import projects that you want to use to create traceability links
-* Go to perspectives and switch to the Capra perspective
-* Now you can create traceability links as described in "Creating Traceability Links":#creating-traceability-links.
-
-h3(#traceability-concepts). Traceability Concepts
-
-In this section, important concepts for traceability are described.
-
-h4(#definition-of-traceability). Definition of traceability
-
-Traceability can be defined as the ability to relate different artifacts created during the development of a software system. Traceability allows creating and using links between system and software development artifacts. For instance, this allows connecting the origin of a requirement with its specification, the design elements that address its specification, the code that implements these design elements, and the acceptance tests that check if the requirement has been achieved.
-
-h4(#what-is-a-traceability-link). What is a traceability link?
-
-The connections between different artifacts in a software development environment are called traceability links. A traceability link can connect two or more elements to imply that there is a relationship between these elements.
-
-h4(#types-of-traceability-links). Types of traceability links
-
-Depending on the requirements of a domain, traceability links can have different types. There are three different categories that can lead to different types of traceability links: the shape of a link, the semantics of a link, and the direction of a link. 
-
-* Link Shape: A link can have a source and target which means that you can only use it to connect two artifacts, or it can be of N-nary type, meaning that you can connect more than two artifacts using the same link.
-* Link Semantics: Traceability links can carry different semantics. The semantics of a link can be implied through the link name, e.g., "satisfies", "implements", "tests". It is also possible to enforce "technical" restrictions on which kind of artifacts a link can connect. For example, a "tests" link type can only allow connecting a test to a requirement. Link semantics are defined through a "traceability metamodel":#traceability-metamodel and are configurable in Capra.
-* Direction of a link: A traceability link can be either a directed link or a bi-directional link. A directed link has a "source" and "target(s)" relationship where the link is from the source and points to the target(s). A directed link also means that one can navigate from "source" to target(s) but not vice versa. A bi-directional link means that the link has no semantics in the direction and one can navigate from any connected artifact to the other connected artifact(s).
-
-h4(#what-is-an-artifact). What is an artifact?
-
-Artifacts, and in particular software development artifacts refer to the resources that are either created or used as an input by a software development activity. For instance, the requirements elicitation activity produces artifacts known as requirements. Artifacts can be of different types, such as a requirement, a model element, a line of code, or a test case.
-
-h4(#what-is-an-artifact-handler). What is an artifact handler?
-
-As previously mentioned, there are different types of artifacts that can exist in a software development environment. However, Capra stores the traceability links in form of an EMF model. This means that, in principle, only EMF artifact types can be supported. To support other artifact types, there is a need to create EMF representations of the artifacts. This is what an artifact handler does. It creates an EMF representation of non-EMF artifacts. The representations are known as "artifact wrappers". For example to be able to link to Java Code, an artifact handler for Java needs to be created. For details on how to add new artifact handlers to the tool, refer to "Adding a new artifact handler":#adding-a-new-artifact-handler. 
-
-h3(#practical-examples). Practical Examples
-
-To demonstrate features of Capra, we take an example of the development of a Heating, Ventilation and Air Conditioning (HVAC) System. The resources can be dowloaded "here":https://www.dropbox.com/s/h6vzmca7sjpq83q/HVAC%20Projects.zip?dl=0. The project contains the following artifacts:
-
-* A set of requirements which are written in "ReqIF":http://www.omg.org/spec/ReqIF/ format.
-* A feature model describing the different features that can form several products of the HVAC system.
-* State machines used to describe the behavior of the system
-* Generated code from the state machines 
-* Test cases defined as Java Unit tests and 
-* Issues/Tasks/Tickets reported as development progresses which are stored on a "Trac":https://trac.edgewall.org/wiki/TracTickets server
-
-These artifacts are shown in the figure below in the context of the development environment of the HVAC system.
-
-<figure><img src="../images/hvacProjects.png" width="800"/><figcaption>Figure 2: Resources for the HVAC system</figcaption></figure>
-
-h4(#creating-traceability-links). Creating Traceability Links
-
-Capra provides the functionality to create traceability links between different artifacts as long as artifact handlers for those artifact types are available. The current version supports tracing to EMF models, Java code (up to method level), C/C++ code (up to function level), Task tickets from ticketing systems supported by Mylyn, arbitrary files (such as PDF or word), Test executions (Hudson and Jenkins), Papyrus models, and Capella models. 
-
-To show how traceability links can be created, we continue with the HVAC example and its artifacts as described above. Our aim is to establish the following links:
-
-# A link from a requirement to a feature representing the requirement in the feature model
-# A link from a feature to the state machine that describes the behavior of the feature
-# A link from a state machine to test case that tests the behavior described by the state machine
-# A link from a requirement to a PDF document that describes safety issues that need to be considered
-# A link from a task ticket to a requirement that is associated with the ticket
-
-The procedure to create the above links is described below.
-
-h5(#a-link-from-a-requirement-to-a-feature-representing-the-requirement-in-the-feature-model). A link from a requirement to a feature representing the requirement in the feature model
-
-# To start, open the requirements (@HVAC_Requirements.reqif@ file), with the "Sample Reflective Ecore Editor" view. 
-# Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
-# Next, open the feature model (@HVAC_Variants.pld@), drag and drop the feature named "Blower" into the selection view as well as shown in the figure below. 	<figure> 		<img src="../images/selectionView1.png" width="400"/> 		<figcaption> 		Figure 3: Capra Selection View 		</figcaption> 	</figure> 
-# Right click on the selection view and click on "Create Trace". 	<figure> 		<img src="../images/createTrace.png" width="400"/> 		<figcaption> 		Figure 4: Creating a traceability link 		</figcaption> 	</figure> 
-# A pop up window will appear, showing the types of links that can be created based on the selected element.
-# Choose a traceability link type to create (in our case "RelatedTo") and click OK. <figure> 	<img src="../images/relatedTo.png" width="400"/>	<figcaption> 	Figure 5: Creating a traceability link of type "RelatedTo" 	</figcaption> </figure> 	Since this is our first traceability link, a new folder will appear in the 	workspace with the name @__WorkspaceTraceModels@. This folder 	contains your 	trace model which contains the traceability link we just created and an 	artifact wrapper model which contains EMF 		representations of artifacts that 	are not in EMF format. In our case the artifact model should be empty since 	the artifacts we used 	to create the traceability link are all EMF elements. 	The trace model (@traceModel.xmi@) should contain only one traceability link. <figure> 		<img src="../images/traceLink.png" width="700"/> 		<figcaption> 		Figure 6: A traceability link of type "RelatedTo" 		</figcaption> </figure>
-# To remove the elements from the selection view, there are two options: 
-## Right click on an element and select "Remove from Selection". This will only remove the selected element.
-## Right click anywhere on the selection view and click on "Clear selection". This will remove all elements in the selection view. 
-
-h5(#a-link-from-a-feature-to-the-state-machine-that-describes-the-behavior-of-the-feature). A link from a feature to the state machine that describes the behavior of the feature
-
-# From the feature model, drag and drop the feature named "Blower" into the selection view.
-# Open the @BlowerCtlr@ state machine and drag and drop the parent element to the selection view.
-# Right click on the selection view and click on "Create Trace".
-# A pop up window will appear, showing the types of links that can be created based on the selected elements.
-# Choose a traceability link type to create (in our case "RelatedTo") and click OK. 	Expand the @__WorkspaceTraceModels@ project and open the trace model 	(@traceModel.xmi@). You will notice that a second traceability link has been 	created.
-
-h5(#a-link-from-a-state-machine-to-test-case-that-tests-the-behavior-described-by-the-state-machine). A link from a state machine to test case that tests the behavior described by the state machine
-
-# Clear the selection view.
-# Again, Open the @BlowerCtlr@ state machine and drag and drop the parent element to the selection view.
-# Expand the project containing the tests, expand the @BlowerTest.java@ file to reveal the BlowerTest class. Drag and drop this class to the selection view.
-# Right click on the selection view and click on "Create Trace".
-# A pop up window will appear, showing the types of links that can be created based on the selected elements.
-# Choose a traceability link type to create (in our case "RelatedTo") and click OK.
-
-h5(#a-link-from-a-requirement-to-a-pdf-document-that-describes-safety-issues-that-need-to-be-considered). A link from a requirement to a PDF document that describes safety issues that need to be considered
-
-# Clear the selection view.	
-# Expand the folder containing the requirements to reveal its contents.
-# Open the requirements (@HVAC_Requirements.reqif@ file), with the "Sample Reflective Ecore Editor" view.
-# Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
-# Select the @ISO26262 Requirements.png@ file from the Project Explorer and drag and drop it to the selection view
-# Right click on the selection view and click on "Create Trace".
-# A pop up window will appear, showing the types of links that can be created based on the selected elements and the definition of the traceability metamodel. In this example the traceability metamodel has only one traceability link type which is called "RelatedTo".
-# Choose a traceability link type to create (in our case "RelatedTo") and click OK.
-
-h5(#a-link-from-a-task-ticket-to-a-requirement-that-is-associated-with-the-ticket). A link from a task ticket to a requirement that is associated with the ticket
-
-# Clear the selection view
-# Drag Req 3 and drop it in the Selection view.
-# From the @Task List@ view, where the tasks from the Trac server are listed, select one task and drag and drop it to the selection view
-# Right click on the selection view and click on "Create Trace".
-# A pop up window will appear, showing the types of links that can be created based on the selected elements.
-# Choose a traceability link type to create (in our case "RelatedTo") and click OK.
-
-h4(#visualizing-traceability-links). Visualizing Traceability Links
-
-Capra offers two ways in which you can visualize the traceability links that you have created. These are the Graphical view where the artifacts are shown as nodes and the links as edges in a graph and the Matrix view where artifacts are arranged in rows and column with an "x" mark in the cells to indicate a traceability link between the artifact in the column and that in the specific row.
-
-h5(#graphical-view). Graphical view
-
-To view the traceability links related to an artifact and the connected artifacts, simply select the artifact while in the "Sample Reflective Editor" View. The "Plant UML View" needs to be open as well.
-
-The graphical view allows you to explore directly connected elements or transitively connected elements. To use the latter functionality, click on the downward arrow on right hand corner of the Plant UML View and click on "Toggle Transitivity". This enables you to move from viewing only directly connected elements to the selected element, to viewing all the transitively connected elements. Use the same button to return to the previously active view.
-
-<figure>		<img src="../images/toggleTransitivity.png" width="600"/>		<figcaption>		Figure 7: Toggle Transitivity		</figcaption></figure>
-
-h5(#traceability-matrix). Traceability matrix
-
-The traceability matrix can be created by selecting at least two model elements when the "Plant UML View" is open. This will list all the model elements as rows and columns and an "x" mark will appear to show that there is a traceability link between two elements. For instance, the picture below shows the resulting matrix when selecting Req3 and the artifact wrapper representing the PDF document. 
-
-<figure>		<img src="../images/matrixView.png" width="400"/>		<figcaption>		Figure 8: Matrix View as a result of selecting two elements		</figcaption></figure>
-
-Selecting more than two model elements expands the matrix into a square matrix with same elements listed vertically and horizontally. 
-
-<figure>		<img src="../images/matrixViewMany.png" width="600"/>		<figcaption>		Figure 9: Matrix view as a result of selecting more than two elements		</figcaption></figure>
-
-h4(#detecting-and-fixing-inconsistencies). Detecting and Fixing Inconsistencies
-
-Traceability links need to be updated as the artifacts they connect evolve. Capra provides a feature to notify users when these artifacts change and to give suggestions on how the traceability links can be changed accordingly. The suggestions are offered as quick fixes to the user and if the user wants to make the changes suggested by the quick fix, the fix can be applied automatically by clicking on it. Currently Capra uses the Eclipse Notification Framework to detect changes and can capture rename, move, change and delete actions made on artifacts that have traceability links.
-
-The problems detected by Capra are shown in the @Problems View@ with a type "Capra problem". We demonstrate the use of the @Problems View@ and quick fixes using our practical example of the HVAC project.
-
-# Go to the "Project Explorer" and expand the project containing test cases. 
-# Delete the file @BlowerTest.java@.
-# Look at the @Problems view@ and you will see a warning with a type "Capra Problem". The issue tells you that there is a traceability link that points to a file named @BlowerTest.java@, but that file has been deleted. <figure> 		<img src="../images/problemView.png" width="700"/> 		<figcaption> 		Figure 9: Problem view showing Capra errors 		</figcaption> </figure>
-# Right click on the warning and select Quick fix.
-# A window will appear showing the quick fixes options available. In this case there is one option, which is to delete the traceability link related to @BlowerTest.java@ file. <figure> 		<img src="../images/quickFix.png" width="500"/> 		<figcaption> 		Figure 10: Quick Fixes 		</figcaption> </figure> 
-# Click Finish.
-# Notice that the traceability link has been deleted and the warning disappears.
-
-h4(#analyzing-change-impact). Analyzing change impact
-
-In this section, we describe scenarios in which Capra can be used to facilitate change impact analysis. Change impact analysis allows to evaluate the effect a change to an artifact will have on other artifacts. Using the HVAC example, assume that the customer requests a change on the requirement @REQ-3@. Before such a change is made, it is important for the company to know which other artefacts will be affected. With Capra, this can be achieved by selecting @REQ-3@ and, using the visualization, reviewing all other artefacts that are related to @REQ-3@ too. 
-
-<figure>		<img src="../images/toggleTransitivity.png" width="700"/>		<figcaption>		Figure 11: Capra graphical view showing directly connected elements		</figcaption></figure> 
-
-For further analysis, clicking on Toggle transitivity as shown in the figure below will show all artifacts connected to @REQ-3@ and their connnections to other artifacts. The end user can therefore use this information as a starting point for performing impact analysis.
-
-<figure>		<img src="../images/graphical-view-transitive.png" width="500"/>		<figcaption>		Figure 12: Capra graphical view showing transitively connected elements		</figcaption></figure> 
-
-h2(#developer-guide). Developer Guide
-
-The following subsection describes the technical architecture of the tool. This information is also available in more detail in a tool demonstration paper "(1)":#references. Our motivation for choosing this architecture design is based on a study on factors and guidelines that affect how a traceability tool can support traceability maintenance "(2)":#references. 
-
-h3(#architecture-of-capra). Architecture of Capra
-
-Capra is an Eclipse plugin and uses the Eclipse Modeling Framework (EMF) as its base technology. It stores the traceability model as an EMF model. The tool relies on the "Eclipse Extension mechanism":https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points and provides extension points for those parts of the tool that can be customized. Based on requirements we collected from many interested parties in the industry, the tool is customizable at four points: 
-
-# The types of links to be supported;
-# Which types of artifacts can be traced to;
-# How the links should be stored;
-# The artifact handler that should be used in case there is more than one available for one artifact type.
-
-Additionally, Capra has an API which makes traceability data available to other tools. The current version uses the provided traceability data to visualize it graphically.
-
-The figure below depicts the extension points. The rationale for each of them is described in the following.
-
-<figure>		<img src="../images/capraArchitecture.png" width="600"/>		<figcaption>		Figure 13: The Architecture of Capra		</figcaption></figure> 
-
-h4(#traceability-metamodel). Traceability Metamodel
-
-Depending on the company, development context, and process used, the traceability links required can differ. For example, traceability links for a company developing web-based solutions are not the same as links for companies developing embedded software. In the former case, traceability links can help connect certain entries in the server configuration files to specific requirements. The traceability links for embedded software need to relate, e.g., the hardware specification to the software design. Both concepts do not make sense in the respective other domain.
-
-To address different link types, the tool offers an extension point for the traceability metamodel. Here the end user (company), can define the types of links through a metamodel and supply it to the tool. Examples of link types are "verifies", "implements", "refines", "related to" etc. In addition to link types, the metamodel can also define additional information to be stored with each link. It might be desirable, e.g., to store the date and time the link was created or which user created it.
-
-h4(#artifact-handler). Artifact Handler
-
-Software development usually involves a number of activities such as requirements engineering, design, implementation, and testing. In most cases, each of these activities use different tools and produce artifacts of different formats. A traceability tool needs to ensure that the different formats can be traced to and from. Since different companies use different tools, it is not easy to foresee which formats a traceability tool should support. This problem of diverse artifacts existing in the development environment has been noted by several studies on traceability. Our tool offers an extension point for Artifact Handlers which allows adding artifact formats based on the needs of the end users.
-
-As discussed, Capra stores the traceability links as an EMF model. To be able to support tracing to other formats, EMF representations of these other formats are required. Implementing an extension for a certain format means providing an EMF representation of that format to the tool using the artifact handler extension point. 
-
-h4(#persistence-handler). Persistence Handler
-
-The storage of traceability links is another factor that can vary depending on company policies or project set-ups. For some cases it makes sense that there is a traceability model per project while in some cases there can be one traceability model for the whole workspace. The extension point Persistence Handler allows defining such storage locations. It will also allow integrating the traceability model with versioning solutions such as EMF Store, CDO or Git.
-
-h4(#priority-handler). Priority Handler
-
-In situations where there is more than one artifact handler that can handle the same artifact type, the tool provides an extension point for a so called Priority Handler. Here the user can define which handler should be used. 
-
-h3(#capra-api). Capra API
-
-Capra provides several programming interfaces that can be used by other plugins to access the traceability data. Currently, there are three interfaces: @ArtifactMetamodelAdapter@, @TraceMetamodelAdapter@ and @TracePersistenceAdapter@. @ArtifactMetaodelAdapter@ has methods that provide access to the artifact wrappers and their contents,  @TraceMetamodelAdapter@ has methods that provide access to the traceability links and the content of the links and the @TracePersistenceAdapter@ has methods that provide access to the traceability model and the artifact wrapper model. The traceability model containing the traceability links is available to other tools. That means that traceability data can be used by other tools for specialised tasks such as impact analysis.
-
-A good example on how these methods can be used is in the plugin @org.eclipse.capra.ui.plantuml@. This plugin utilizes the methods to get the traceability model and its links and also to determine which artifacts are connected by the links. The plugin uses the results of these methods to create a string that can be rendered as a diagram using the PlantUML view. For example in the file @VisualizationHelper@, the method @CreateMatrix()@ calls a method @isThereATraceBetween()@ which is part of the
-@TraceMetamodelAdapter@ interface. 
-
-<figure>		<img src="../images/interface.png" width="600"/>		<figcaption>		Figure 14: Use of the method "isThereATraceBetween()" provided by the `TraceMetamodelAdapter` interface		</figcaption></figure>
-
-h4(#adding-a-custom-traceability-metamodel). Adding a custom Traceability Metamodel
-
-To define your own traceability metamodel follow the steps below:
-
-# Create a Java project and name it @org.eclipse.capra.MyTraceabilityMetaModel@
-# Create a new folder and name it @model@
-# In the @model@ folder create a new file and name it @MyTraceabilityMetaModel.xcore@. A pop up window will appear asking if you want to add the Xtext nature to the project. Click "Yes".
-# Define your traceability metamodel as required. In our example, we add two types of traceability links i.e "implements" and "tests" <figure> 		<img src="../images/traceMetamodelDefinition.png" width="400"/>		<figcaption> 		Figure 15: Tracemetamodel Definition 		</figcaption> </figure> 
-# Open the @plugin.xml@ file of the new project and click on the "Extension Points" tab 
-# Un-check the check box that says "Show only extension points from the required plugins" 
-# In the text box for the "Extension point filter" type "Traceability" and select @org.eclipse.capra.configuration.TraceabilityMetaModel@
-# Click Finish. <figure> 		<img src="../images/addTraceExtension.png" width="500"/> 		<figcaption> 		Figure 16: Adding the Trace metamodel extension point 		</figcaption> </figure> 
-# Another pop up window will appear asking if you want to add the project @org.eclipse.capra.core@ to the list of plugin dependencies. Click Yes 
-# Right click on the newly added extension, and click on "New" then @TraceabilityMetaModelAdapter@. A new @TraceabilityMetaModelAdapter@ will be created 	<figure> 		<img src="../images/newTMAdapter.png" width="700"/> 		<figcaption> 		Figure 17: Adding the Trace metamodel extension point 		</figcaption> 	</figure> 	
-# Click on the newly created @TraceabilityMetaModelAdapter@. On the right hand side, we need to provide a class for this extension in which we will implement all the required interfaces. 
-# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class <figure> 		<img src="../images/newClass.png" width="700"> </img>		<figcaption> 		Figure 18: Add new Class 		</figcaption> </figure> <figure> 		<img src="../images/addNewTraceAdapterClass.png" width="500"/> 		<figcaption> 		Figure 19: Add new Trace Adapter Class 		</figcaption> </figure> 
-# Click Finish and a class will be created with the methods to be implemented in it. 
-# Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
-
-h4(#adding-a-custom-artifact-metamodel). Adding a custom Artifact metamodel
-
-To define your own artifact metamodel, follow the steps below:
-
-# In the same project used to define the traceability metamodel, go to the @model@ folder, create a new file and name it @artifact.xcore@.
-# Define the artifact metamodel as in the picture below. Note that you can modify this definition to fit your needs. <figure> 		<img src="../images/artifactMetamodelDefinition.png" width="400"/> 		<figcaption> 		Figure 20: Artifact Metamodel definition 		</figcaption> </figure> 
-# Next, open the @plugin.xml@ file of the project and click on the "Extension Points" tab
-# Un-check the checkbox that says "Show only extension points from the required plugins" 
-# In the textbox for "Extension point filter" type "Artifact" and select @org.eclipse.capra.configuration.ArtifactMetamodel@
-# Right click on the newly added extension, and click on "New" then @ArtifactMetamodelAdapter@. A new @ArtifactMetamodelAdapter@ will be created <figure> 		<img src="../images/newArtifactAdapter.png" width="600"/>		<figcaption> 		Figure 21: Artifact adapter definition 		</figcaption> </figure> 
-# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class <figure> 		<img src="../images/newArtifactAdapterClass.png" width="500"/> 		<figcaption> 		Figure 22: Artifact adapter Class definition 		</figcaption> </figure> 
-# Click Finish and a class will be created with the methods to be implemented in it. 
-# Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
-
-NOTE: To test your new Traceability metamodel and artifact model, first close the project @org.eclipse.capra.generic.tracemodels@. Otherwise that project will be used by Capra.
-
-h4(#adding-a-new-artifact-handler). Adding a new artifact handler
-
-In case you want Capra to support an artifact type that is not already supported, you will need to create a new artifact handler for the particular artifact type.
-
-As an example, we describe how the Java artifact handler was added using the following steps:
-
-# Create a new plugin project and name it @org.eclipse.capra.handler.jdt@.
-# In the @src@ folder of the new project, create a package and name it @org.eclipse.capra.handler.jdt@.
-# Expand the @META-INF@ folder , open the @MANIFEST.MF@ file and click on the "Extensions" tab
-# Click on Add. A pop up window will appear with a list of available extension points.
-# Un-check the checkbox that says "Show only extension points from the required plugins" 
-# In the textbox for "Extension point filter" type "Artifact" and select @org.eclipse.capra.configuration.ArtifactMetaModel@ and click Finish.
-# Another pop up window will appear asking if you want to add the project @org.eclipse.capra.core@ to the list of plugin dependencies. Click Yes 
-# Right click on the newly added extension, and click on "New", then "ArtifactHandler". A new @ArtifactHandler@ will be created. <figure> 		<img src="../images/newArtifactHandler.png" width="600"/>		<figcaption> 		Figure 23: New Artifact Handler definition 		</figcaption> </figure>
-# Click on the newly created @ArtifactHandler@. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
-# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class <figure> 		<img src="../images/newArtifactClass.png" width="500"/>		<figcaption> 		Figure 24: New Artifact Handler Class definition 		</figcaption> </figure>
-# Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
-# Implement all required methods. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
-
-h3(#changing-the-storage-location-of-the-traceability-model). Changing the storage location of the traceability model
-
-The storage of the traceability model and the artifact handler model is not fixed and can be modified depending on the users' needs and requirements. To change the storage location of the traceability model there are two options.
-
-# To edit the existing persistence handler project OR 
-# To create a completely new persistence handler.
-
-h4(#edit-existing-persistence-handler). Edit existing Persistence Handler
-
-# Expand the project @org.eclipse.capra.generic.persistance@.
-# Expand the @src@ folder and then the @org.eclipse.capra.generic.persistence@ package
-# Open the file @TracePersistenceAdapter.java@.
-# Edit the static variables @DEFAULT_PROJECT_NAME@, @DEFAULT_TRACE_MODEL_NAME@ and @DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME@ to reflect the new location and new model names for your traceability model and artifact wrapper model. <figure> 		<img src="../images/editPersistenceHandler.png" width="700"/> 		<figcaption> 		Figure 25: Editing existing Persistence Handler 		</figcaption> </figure>
-# Save the project and Run Capra
-
-h4(#add-a-new-persistence-handler). Add a new Persistence Handler
-
-# Create a new plugin project and name it @org.eclipse.capra.MyPersistenceHandler@
-# In the @src@ folder create a package and name it @org.eclipse.capra.MyPersistenceHandler@.
-# Expand the @META-INF@ folder , Open the @MANIFEST.MF@ file and click on the "Extensions" tab.
-# Click on Add. A pop up window will appear with a list of available extension points.
-# Un-check the checkbox that says "Show only extension points from the required plugins" 
-# In the textbox for "Extension point filter" type "Persistence", select @org.eclipse.capra.configuration.persistenceHandler@ and click Finish. <figure> 		<img src="../images/addPersistenceHandler.png" width="500"/> 		<figcaption> 		Figure 26: Add new Persistence Handler 		</figcaption> </figure>
-# Another pop up window will appear asking if you want to add the project @org.eclipse.capra.core@ to the list of plugin dependencies. Click Yes. 
-# Right click on the newly added extension, and click on "New", then @persistenceHandler@. A new Persistence Handler will be created. <figure> 		<img src="../images/newPersistenceHandler.png" width="600"/>		<figcaption> 		Figure 27: New Persistence Handler 		</figcaption> </figure>
-# Click on the newly created @persistenceHandler@. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces. 
-# Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is @src@ and name your class. <figure> 		<img src="../images/newPersistenceHandlerClass.png" width="500"/> 		<figcaption> 		Figure 28: New Persistence Handler Class 		</figcaption> </figure>
-# Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
-# Implement all methods according to your needs. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name.
-
-h3(#taking-care-of-multiple-handlers-for-the-same-artifact-type). Taking care of multiple handlers for the same artifact type
-
-There are cases in which several handlers are available for one artifact type. It is important during configuration to select which handler should be given a priority for the particular artifact type. This can be done by editing the code in the Priority Handler as follows:
-
-# Expand the project @org.eclipse.capra.generic.priority@.
-# Expand the src folder and then the @org.eclipse.capra.generic.priority@ package.
-# Open the file @DefaultPriorityHander.java@.
-# Modify the code to select the correct handler. For instance, the code below selects a @hudsonHandler@ when the element selected is a Test element or a build element. <figure> 		<img src="../images/priorityHandlerCode.png" width="700"/> 		<figcaption> 		Figure 29: Code for the Priority Handler 		</figcaption> </figure>
-
-h3(#adding-new-source-files). Adding new source files
-
-It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.
-
-Install the "Eclipse Releng Tools":https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool. They contain the copyright tool. Use the following copyright header:
-
-bc. Copyright (c) ${date} 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 v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
- 
-bc. Contributors:
-bc.     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-
-The Contributors entry can be replaced with the appropriate names. Use "Fix copyrights" from the context menu to add the copyrights to all relevant files in a project or folder.
-
-h2(#references). Rerefences
-
-1. Maro, S. and Steghöfer, JP., 2016, September. Capra: A Configurable and Extendable Traceability Management Tool. In 2016 IEEE 24th International Requirements Engineering Conference (RE). IEEE.
-2. Maro, S., Anjorin A., Wohlrab R. and Steghöfer, JP., 2016, September. Traceability Maintenance: Factors and Guidelines. In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference. IEEE.
diff --git a/org.eclipse.capra.documentation/images/Capra Documentation.md b/org.eclipse.capra.documentation/images/Capra Documentation.md
deleted file mode 100644
index a52275c..0000000
--- a/org.eclipse.capra.documentation/images/Capra Documentation.md
+++ /dev/null
@@ -1,417 +0,0 @@
-# Capra Help Contents
-
-## User Guide
-
-###  Introduction - What is Capra
-
-Capra is a dedicated traceability management tool that allows the creation, management, visualization, and analysis of trace links within Eclipse. Trace links can be created between arbitrary artifacts, including all EMF model elements, all types of source code files supported by the Eclipse Platform through specialized development tools, tickets and bugs managed by Eclipse Mylyn, and all other artifacts for which an appropriate wrapper is provided. Capra is highly configurable and allows users to create their own traceability meta-model.
-
-Compared to other similar projects which may have similar features, Capra is not a modeling tool or a tool for requirements management. All functionality is focused on providing traceability capabilities, i.e., the ability to create and visualize links between artifacts modeled in different domain-specific languages. This allows the architecture to be highly modular and the tool to be extremely customizable.
-
-###  Getting Started
-
-This section describes the prerequisites to run Capra and how to install the tool.
-
-#### Prerequisites
-
-Before downloading and using Capra, first download a distribution of the Eclipse Modeling Environment (Eclipse V 4.5 (Mars)) and make sure you have the following installed:
-
-* [PlantUML](http://plantuml.com/eclipse.html): Use the nightlies [update site](http://basar.idi.ntnu.no/svn/tdt4100/anonymous/trunk/updatesite) in Eclipse's "Install new software..." feature. Version 1.1.11 or higher should be installed through this link. Older versions advertised on the website will not work! It might also be necessary to install [Graphviz](http://www.graphviz.org) binaries on your system to view the visualisation of trace links.
-* [Xcore](https://wiki.eclipse.org/Xcore): Install through Eclipse's "Install new software..." feature
-* [Mylyn](https://www.eclipse.org/mylyn/): Install the "Mylyn Builds Connector: Hudson/Jenkins" through Eclipse's "Install new software..." feature
-* [C/C++ Development Tools](https://www.eclipse.org/cdt/): : Use Eclipse's "Install new software..." feature
-* [Java Development Tools](https://www.eclipse.org/jdt): Use Eclipse's "Install new software..." feature
-* [Xtend](https://eclipse.org/xtend/): Install through the Eclipse Market Place
-* [Papyrus](https://eclipse.org/papyrus/): Install through the Eclipse Market Place  
-
-
-#### Installing Capra
-
-Capra can be installed either through an update site or manually .
-
-##### Installing through an update site
-* Go to the [Capra GitHub repository](https://github.com/Salome-Maro/TraceabilityManagement).
-* Click on "Releases" (Please note that the current release is a Pre-release and the official release will be available once the tool is an Eclipse project)
-* Download the file `Capra_v.0.1.zip` (Note the location of your download)
-* Open your Eclipse environment
-* Make sure that you have all the dependencied listed above installed
-* Click on Help >> Install New Softaware
-* Click on Add and select Archive
-* Select your zip file and click Add
-* You should see the features that Capra has grouped into several categories.
-* To get a minimum version of Capra working, install all the features in Core and at least one artifact wrapper. This means that if you for instance install only the EMFHandler, then you will only be able to create traceability links between EMF models. It is recommended to install all available artifact handlers.
-* Install the features in the visualization and notification categories in order to get their functionality working. 
-* Restart Eclipse
-* Go to perspectives and switch to the Capra perspective
-* Now you can create traceability links as described in [Creating Traceability Links](#create-trace-links).
-
-![alt text](updatesite.png =700x)
-
-
-#####  Manual installation (Import from Git)
-* Open your Eclipse Environment
-* Go to File >> Import and select Git >> Projects from Git
-* Use the [GitHub repository](https://github.com/Salome-Maro/TraceabilityManagement) and import all available projects to your workspace
-* Build your workspace
-* Make sure that all the projects have no errors.
-* Click on Run >> Run Configurations and create a new Eclipse Application Configuration
-* Select your running workspace
-* Click Finish
-* Once the new workspace opens, create or import projects that you want to use to create traceability links
-* Go to perspectives and switch to the Capra perspective
-* Now you can create traceability links as described in [Creating Traceability Links](#create-trace-links).
-
-
-### Traceability Concepts
-
-In this section, important concepts for traceability are described.
-
-#### Definition of traceability
-
-Traceability can be defined as the ability to relate different artifacts created during the development of a software system. Traceability allows creating and using links between system and software development artifacts. For instance, this allows connecting the origin of a requirement with its specification, the design elements that address its specification, the code that implements these design elements, and the acceptance tests that check if the requirement has been achieved.
-
-#### What is a traceability link?
-
-The connections between different artifacts in a software development environment are called traceability links. A traceability link can connect two or more elements to imply that there is a relationship between these elements.
-
-#### Types of traceability links
-
-Depending on the requirements of a domain, traceability links can have different types. There are three different categories that can lead to different types of traceability links: the shape of a link, the semantics of a link, and the direction of a link. 
-
-* Link Shape: 
-A link can have a source and target which means that you can only use it to connect two artifacts, or it can be of N-nary type, meaning that you can connect more than two artifacts using the same link.
-* Link Semantics:
-Traceability links can carry different semantics. The semantics of a link can be implied through the link name, e.g., "satisfies", "implements", "tests". It is also possible to enforce "technical" restrictions on which kind of artifacts a link can connect. For example, a "tests" link type can only allow connecting a test to a requirement. Link semantics are defined through a [traceability metamodel](#traceability-metamodel) and are configurable in Capra.
-* Direction of a link:
-A trace link can be either a directed link or a bi-directional link. A directed link has a "source" and "target(s)" relationship where the link is from the source and points to the target(s). A directed link also means that one can navigate from "source" to target(s) but not vice versa. A bi-directional link means that the link has no semantics in the direction and one can navigate from any connected artifact to the other connected artifact(s).
-
-#### What is an artifact?
-Artifacts, and in particular software development artifacts refer to the resources that are either created or used as an input by a software development activity. For instance, the requirements elicitation activity produces artifacts known as requirements. Artifacts can be of different types, such as a requirement, a model element, a line of code, or a test case.
-
-#### What is an artifact handler?
-
-As previously mentioned, there are different types of artifacts that can exist in a software development environment. However, Capra stores the traceability links in form of an EMF model. This means that, basically only EMF artifact types can be supported. To support other artifact types, there is a need to create EMF representations of the artifacts. This is what an artifact handler does. It creates an EMF representation of non-EMF artifacts. The representations are known as "artifact wrappers". For example to be able to link to Java Code, an artifact handler for Java needs to created. For details on how to add new artifact handlers to the tool, refer to section [Adding a new artifact handler](#new-artifact-handler). 
-
-###  Practical Examples
-To demonstrate features of Capra, we take an example of the development of a Heating, Ventilation and Air Conditioning (HVAC) System.  The project contains the following artifacts:
-
-* A set of requirements which are written in [ReqIF](http://www.omg.org/spec/ReqIF/) format.
-* A feature model describing the different features that can form several products of the HVAC system.
-* State machines used to describe the behavior of the system
-* Generated code from the state machines 
-* Test cases defined as Java Unit tests and 
-* Issues/Tasks/Tickets reported as development progresses which are stored on a [Trac](https://trac.edgewall.org/wiki/TracTickets) server
-
-These artifacts are shown in the figure below in the context of the development environment of the HVAC system.
-
-![alt text](hvacProjects.png =800x)
-
-> Can we provide a link to where the project can be downloaded? 
-
-#### Creating Traceability Links <a id="create-trace-links"></a>
-
-Capra provides the functionality to create traceability links between different artifacts as long as artifact handlers for those artifact types are available. The current version supports tracing to EMF models, Java code (up to method level), C/C++ code (up to function level), Task tickets from ticketing systems supported by Mylyn, arbitrary files (such as PDF or word), Test executions (Hudson and Jenkins), Papyrus models, and Capella models. 
-
-To show how traceability links can be created, we continue with the HVAC example and its artifacts as described above. Our aim is to establish the following links. 
-
-1. A link from a requirement to a feature representing the requirement in the feature model
-2. A link from a feature to the state machine that describes the behavior of the feature
-3. A link from a state machine to test case that tests the behavior described by the state machine
-4. A link from a requirement to a PDF document that describes safety issues that need to be considered
-5. A link from a task ticket to a requirement that is associated with the ticket
-
-The procedure to create the above links is described below.
-
-##### A link from a requirement to a feature representing the requirement in the feature model
-
-1. To start, open the requirements (`HVAC_Requirements.reqif` file), with the "Sample Reflective Ecore Editor" view. 
-2.  Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
-3.  Next, open the feature model (`HVAC_Variants.pld`), drag and drop the feature named "Blower" into the selection view as well as shown in the figure below.  
-![alt text](selectionView1.png =400x)
-4. Right click on the selection view and click on "Create Trace".  
-![alt text](createTrace.png =300x)
-5. A pop up window will appear, showing the types of links that can be created based on the selected element.
-6. Choose a trace link type to create (in our case "RelatedTo") and click OK.                                                   
-![alt text](relatedTo.png =300x)
-7. Since this is our first trace link, a new folder will appear in the workspace with the name `__WorkspaceTraceModels`. This folder contains your trace model which contains the trace link we just created and an artifact wrapper model which contains EMF representations of artifacts that are not in EMF format. In our case the artifact model should be empty since the artifacts we used to create the trace link are all EMF elements. The trace model (`traceModel.xmi`) should contain only one trace link.  
-![alt text](traceLink.png =700x)	
-8. To remove an element from the selection view, right click on an element and select "Remove from Selection".
-9. To remove all elements, right click anywhere on the selection view and click on "Clear selection".
-
-
-##### A link from a feature to the state machine that describes the behavior of the feature
-
-1. From the feature model, drag and drop the feature named "Blower" into the selection view.
-2. Open the `BlowerCtlr` state machine and drag and drop the parent element to the selection view.
-3. Right click on the selection view and click on "Create Trace".
-4. A pop up window will appear, showing the types of links that can be created based on the selected elements.
-5. Choose a trace link type to create (in our case "RelatedTo") and click OK.
-6. Expand the `__WorkspaceTraceModels` project and open the trace model (`traceModel.xmi`). You will notice that a second trace link has been created.
-	
-##### A link from a state machine to test case that tests the behavior described by the state machine
-
-1. Clear the selection view.
-2. Again, Open the `BlowerCtlr` state machine and drag and drop the parent element to the selection view.
-3. Expand the project containing the tests, expand the `BlowerTest.java` file to reveal the BlowerTest class. Drag and drop this class to the selection view.
-4. Right click on the selection view and click on "Create Trace".
-5. A pop up window will appear, showing the types of links that can be created based on the selected elements.
-6. Choose a trace link type to create (in our case "RelatedTo") and click OK.
-	
-#####  A link from a requirement to a PDF document that describes safety issues that need to be considered
-	
-1. Clear the selection view.	
-2. Expand the folder containing the requirements to reveal its contents.
-3. Open the requirements (`HVAC_Requirements.reqif` file), with the "Sample Reflective Ecore Editor" view.
-4. Expand the model to see the requirements. Drag Req 3 and drop it in the Selection view. 
-5. Select the `ISO26262 Requirements.pdf` file from the Project Explorer and drag and drop it to the selection view
-6. Right click on the selection view and click on "Create Trace".
-7. A pop up window will appear, showing the types of links that can be created based on the selected elements.
-8. Choose a trace link type to create (in our case "RelatedTo") and click OK.
-
-##### A link from a task ticket to a requirement that is associated with the ticket
-
-1. Clear the selection view
-2. Drag Req 3 and drop it in the Selection view.
-3. From the `Task List` view, where the tasks from the Trac server are listed, select one task and drag and drop it to the selection view
-4. Right click on the selection view and click on "Create Trace".
-5. A pop up window will appear, showing the types of links that can be created based on the selected elements.
-6. Choose a trace link type to create (in our case "RelatedTo") and click OK.
-
-
-#### Visualizing Traceability Links
-
-Capra offers two ways in which you can visualize the traceability links that you have created. These are the Graphical view where the artifacts are shown as nodes and the links as edges in a graph and the Matrix view where artifacts are arranged in rows and column with an "x" mark in the cells to indicate a trace link between the artifact in the column and that in the specific row.
-
-
-
-##### Graphical view
-
-To view the traceability links related to an artifact and the connected artifacts, simply select the artifact while in the "Sample Reflective Editor" View. The "Plant UML View" needs to be open as well.
-
-The graphical view allows you to explore directly connected elements or transitively connected elements.  To use the latter functionality, click on the downward arrow on right hand corner of the Plant UML View and click on "Toggle Transitivity". This enables you to move from viewing only directly connected elements to the selected element, to viewing all the transitively connected elements. Use the same button to return to the previously active view.  
-
-![alt text](toggleTransitivity.pdf =700x)
-
-##### Traceability matrix
-
-The traceability matrix can be created by selecting at least two model elements when the "Plant UML View" is open. This will list all the model elements as rows and columns and an "x" mark will appear show that there is a trace link between two elements. For instance, the picture below shows the resulting matrix when selecting Req3 and the artifact wrapper representing the PDF document. 
-
-![alt text](matrixView.png)
-
-Selecting more than two model elements expands the matrix into a square matrix with same elements listed in vertically and horizontally. 
-
-![alt text](matrixViewMany.png =600x)
-
-#### Detecting and Fixing Inconsistencies
-
-Trace links need to be updated as the artifacts they connect evolve. Capra provides a feature to notify users when these artifacts evolve and give suggestions on how the trace links can be evolved. The suggestions are offered as quick fixes to the user and if the user wishes to make the changes suggested by the quick fix, the fix can be applied automatically by clicking on it. 
-
-The problems detected by Capra are shown in the "Problems" view with a type "Capra problem". We demonstrate the use of the Problems view and quick fixes using our practical example of the HVAC project.
-
-1. Go to the "Project Explorer" and expand the project containing test cases. 
-2. Delete the file `BlowerTest.java`.
-3. Look at the Problems view and you will see a warning with a type  "Capra problem". The issue tells you that there is a trace link that points to a file named `BlowerTest.java`, but that file has been deleted.  
-![alt text](problemView.png =700x)
-4. Right-click on the warning and select Quick fix.
-5. A window will appear showing the quick fixes options available. In this case there is one option, which is to delete the trace link related to `BlowerTest.java` file.  
-![alt text](quickFix.png =500x)
-6. Click Finish.
-7. Notice that the trace link has been deleted and the warning disappears.
-
-
-#### Analyzing change impact 
-In this section, we describe scenarios in which Capra can be used to facilitate change impact analysis. Change impact analysis means being able to evaluate the effect a change to an artifact will have to other artifacts. Using the HVAC example, assume that the customer requests a change on the requirements `REQ-3`. Before such a change is made, it is important for the company to know which other artefacts will be affected. With Capra, this can be done by selecting `REQ-3` and then using the visualization, one can see all other artefacts that are related to `REQ-3`.too. 
-
-![alt text](toggleTransitivity.pdf =700x)
-
-For further analysis, clicking on Toggle transitivity as shown in th figure below will show all artifacts connected to `REQ-3` and their connnections to other artifacts 
-
-![alt text](graphical-view-transitive.pdf =500x)
-
-
-## Developer Guide
-
-The following subsection describes the technical architecture of the tool. This information is also available in more detail in a tool demonstration paper[^fn1]. Our motivation for choosing this architecture design is based on a study on factors and guidelines that affect how a traceability tool can support traceabilityy maintenance[^fn2]. 
-
-### Architecture of Capra
-Capra is an Eclipse plugin and uses the Eclipse Modeling Framework (EMF) as its base technology. It stores the traceability model as an EMF model. The tool relies on the [Eclipse Extension mechanism](https://wiki.eclipse.org/FAQ_What_are_extensions_and_extension_points) and provides extension points for those parts of the tool that can be customized. Based on requirements we collected from many interested parties in the industry, the tool is customizable at four points: 
-
-1. The types of links to be supported;
-2. Which types of artifacts can be traced to;
-3. How the links should be stored;
-4. The artifact handler that should be used in case there is more than one available for one artifact type.
-
-Additionally, Capra has an API which makes traceability data available to other tools. The current version uses the provided traceability data to visualize it graphically.
-
-
-The figure below depicts the extension points. The rationale for each of them is described in the following.
-
-![alt text](capraArchitecture.png =600x)
-
-#### Traceability Metamodel <a id="traceability-metamodel"></a>
-
-Depending on the company, development context, and process used, the traceability links required can differ. For example, traceability links for a company developing web-based solutions are not the same as links for companies developing embedded software. In the former case, traceability links can help connect certain entries in the server configuration files to specific requirements. The traceability links for embedded software need to relate, e.g., the hardware specification to the software design. Both concepts do not make sense in the respective other domain.
-
-To address the different link types, the tool offers an extension point for the traceability metamodel. Here the end user (company), can define the types of links through a metamodel and supply it to the tool. Examples of link types are "verifies", "implements", "refines", "related to" etc. In addition to link types, the metamodel can also define additional information to be stored with each link. It might be desirable, e.g., to store the date and time the link was created or which user created it.
-
-#### Artifact Handler
-
-Software development usually involves a number of activities such as requirements engineering, design, implementation, and testing. In most cases, each of these activities use different tools and produce artifacts of different formats. A traceability tool needs to ensure that the different formats can be traced to and from. Since different companies use different tools, it is not easy to foresee which formats a traceability tool should support. This problem of diverse artifacts existing in the development environment has been noted by several studies on traceability. Our tool offers an extension point for Artifact Handlers which allows adding artifact formats based on the needs of the end users.
-
-As discussed, Capra stores the traceability links as an EMF model. To be able to support tracing to other formats, EMF representations of these other formats are required. Implementing an extension for a certain format means providing an EMF representation of that format to the tool using the artifact handler extension point. 
-
-#### Persistence Handler
-
-The storage of traceability links is another factor that can vary depending on company policies or project set-ups. For some cases it makes sense that there is a traceability model per project while in some cases there can be one traceability model for the whole workspace. The extension point Persistence Handler allows defining such storage locations. It will also allow integrating the traceability model with versioning solutions such as EMF Store, CDO or Git.
-
-#### Priority Handler
-
-In situations where there is more than one artifact handler that can handle the same artifact type, the tool provides an extension point for a so called Priority Handler. Here the user can define which handler should be used. 
-
-#### Capra API
-
-Capra provides several programming interfaces that can be used by other plugins to access the traceability data. Currently, this is in three interfaces which are the `ArtifactMetaodelAdapter`, `TraceMetamodelAdapter` and `TracePersistenceAdapter`. 
-The `ArtifactMetaodelAdapter` has method that give you access to the artifact wrappers and their contents, the `TraceMetamodelAdapter` has methods that give you access to the traceability links and the content of the links and the `TracePersistenceAdapter` has methods that give access to the traceability model and the artifact wrapper model. The traceability model containing the traceability links is available to other tools this traceability data can b used for tasks such as impact analysis.
-
-A good example on how these methods can be used is in the plugin `org.eclipse.capra.ui.plantuml`. This plugin utilizes the methods to get the traceability model and its links and also to determine which artifacts are connected by the links. The plugin uses the results of these methods to create a string that can be rendered as a diagram using the PlantUML view. 
-For example the in the file `VisualizationHelper`, the method `CreateMatrix()` calls a method `isThereATraceBetween()` which is part of the  `TraceMetamodelAdapter` interface. 
-
-![alt text](interface.png =800x)
-
-
-
-### Adding a custom Traceability metamodel
-
-To define your own traceability metamodel follow the steps below:
-
-1. Create a Java project and name it `org.eclipse.capra.MyTraceabilityMetaModel`
-1. Create a new folder and name it `model`
-1. In the `model` folder create a new file and name it `MyTraceabilityMetaModel.xcore`. A pop up window will appear asking if you want to add the Xtext nature to the project. Click "Yes".
-1. Define your traceability metamodel as required. In our example, we add two types of traceability links i.e "implements" and "tests"  
-![alt text](traceMetamodelDefinition.pdf =350x)   
-1. Open the `plugin.xml` file of the new project and click on the "Extension Points" tab  
-1. Un-check the check box that says "Show only extension points from the required plugins"  
-1. In the text box for the "Extension point filter" type "Traceability" and select `org.eclipse.capra.configuration.TraceabilityMetaModel`
-1. Click Finish.   
-![alt text](addTraceExtension.pdf =400x)   
-1. Another pop up window will appear asking is you want to add the project `org.eclipse.capra.core` to the list of plugin dependencies. Click Yes  
-1. Right-click on the newly added extension, and click on "New" then `TraceabilityMetaModelAdapter`. A new `TraceabilityMetaModelAdapter` will be created  
-![alt text](newTMAdapter.pdf =400x)  
-1. Click on the newly created `TraceabilityMetaModelAdapter`. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces.  
-1. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class  
-![alt text](newClass.pdf =600x) 
-![alt text](addNewTraceAdapterClass.png =600x)    
-1. Click Finish and a class will be created with the methods to be implemented in it.   
-1. Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
-
-### Adding a custom Artifact metamodel
-
-To define your own artifact metamodel, follow the steps below:
-
-1. In the same project used to define the traceability metamodel, go to the `model` folder, create a new file and name it `artifact.xcore`.
-1. Define the artifact metamodel as in the picture below. Note that you can modify this definition to fit your needs.  
-![alt text](artifactMetamodelDefinition.png) 
-1. Next, open the `plugin.xml` file of the project and click on the "Extension Points" tab
-1. Un-check the checkbox that says "Show only extension points from the required plugins"  
-1. In the textbox for "Extension point filter" type "Artifact" and select  `org.eclipse.capra.configuration.ArtifactMetamodel`
-1. Right-click on the newly added extension, and click on "New" then `ArtifactMetamodelAdapter`. A new `ArtifactMetamodelAdapter` will be created  
- ![alt text](newArtifactAdapter.png =400x)
-1. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class      
-![alt text](newArtifactAdapterClass.png =400x)    
-1. Click Finish and a class will be created with the methods to be implemented in it.   
-1. Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
-
-NOTE: To test your new Traceability metamodel and artifact model, first close the project `org.eclipse.capra.generic.tracemodels`. Otherwise that project will be used by Capra.
-
-
-### Adding a new artifact handler <a id="new-artifact-handler"></a>
-
-In case you want Capra to support an artifact type that is not already supported, you will need to create a new artifact handler for the particular artifact type.
-
-As an example, we describe how the Java artifact handler was added using the following steps:
-
-1. Create a Java project and name it `org.eclipse.capra.handler.jdt`.
-1. In the `src` folder of the new project, create a package and name it `org.eclipse.capra.handler.jdt`.
-1. Right click on the project, click on "Configure" and select "Convert to Plugin Project"
-1. Expand the `META-INF` folder , Open the `MANIFEST.MF` file and click on the "Extensions" tab
-1. Click on Add. A pop up window will appear with a list of available extension points.
-1. Un-check the checkbox that says "Show only extension points from the required plugins" 
-1. In the textbox for "Extension point filter"type "Artifact" and select  `org.eclipse.capra.configuration.ArtifactMetaModel` and click Finish.
-1. Another pop up window will appear asking is you want to add the project `org.eclipse.capra.core` to the list of plugin dependencies. Click Yes 
-1. Right-click on the newly added extension, and click on "New" then "ArtifactHandler". A new `ArtifactHandler` will be created.  
-![alt text](newArtifactHandler.png =400x) 
-1. Click on the newly created `ArtifactHandler`. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces.  
-1. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class  
-![alt text](newArtifactClass.png  =400x)       
-1. Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
-1. Implement all the methods according to your new custom metamodel. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name. 
-
-### Changing the storage location of the traceability model
-
-The storage of the traceability model and the artifact handler model is not fixed and can be modified depending on the users needs and requirements. To change the storage location of the traceability model there are two options.
-
-1. To edit the existing persistence handler project OR 
-1. To create a completely new persistence handler.
-
-#### Edit existing Persistence Handler
-
-1. Expand the project `org.eclipse.capra.generic.persistance`.
-2. Expand the `src` folder and then the `org.eclipse.capra.generic.persistence` package
-3. Open the file `TracePersistenceAdapter.java`.
-4. Edit the static variables `DEFAULT_PROJECT_NAME`, `DEFAULT_TRACE_MODEL_NAME` and `DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME` to reflect the new location and new model names for your traceability model and artifact wrapper model.
-![alt text](editPersistenceHandler.png  =600x) 
-4. Save the project and Run Capra
-
-#### Add a new Persistence Handler
-1. Create a Java project and name it `org.eclipse.capra.MyPersistenceHandler`
-2. In the `src` folder create a package and name it `org.eclipse.capra.MyPersistenceHandler`.
-3. Right click on the project, click on "Configure" and select "Convert to Plugin Project"
-4. Expand the `META-INF` folder , Open the `MANIFEST.MF` file and click on the "Extensions" tab.`
-5. Click on Add. A pop up window will appear with a list of available extension points.
-6. Un-check the checkbox that says "Show only extension points from the required plugins" 
-6. In the textbox for "Extension point filter" type "Persistence" and select  `org.eclipse.capra.configuration.persistenceHandler` and click Finish.  
-![alt text](addPersistenceHandler.png  =400x) 
-7. Another pop up window will appear asking is you want to add the project `org.eclipse.capra.core` to the list of plugin dependencies. Click Yes. 
-6. Right-click on the newly added extension, and click on "New" then `persistenceHandler`. A new Persistence Handler will be created.  
-![alt text](newPersistenceHandler.png  =400x) 
-7. Click on the newly created `persistenceHandler`. On the right hand side, we need to provide a class for this extension, where we will implement all the required interfaces.  
-8. Click on "Class" and a pop up window for creating a new class will appear. Make sure the folder is `src` and name your class.
-![alt text](newPersistenceHandlerClass.png =400x)
-9. Click Finish and a class will be created with the methods to be implemented in it. In this case there are only two methods.
-10. Implement all the methods according to your needs. Note that information about what each method does and its parameters can be obtained by hovering the mouse over the respective method name.
-
-
-### Taking care of multiple handlers for the same artifact type
-
-There are cases where for one artifact type, there are several handlers available. It is important during configuration to select which handler should be given a priority for the particular artifact type. This can be done by editing the code in the Priority Handler as follows:
-
-1. Expand the project `org.eclipse.capra.generic.priority`.
-1. Expand the src folder and then the `org.eclipse.capra.generic.priority` package.
-1. Open the file `DefaultPriorityHander.java`.
-1. Modify the code to have the right handler selected. For instance, the code below selects a `hudsonHandler` when the element selected is a Test element and also a build element.  
- 
-![alt text](priorityHandlerCode.png =600x) 
-
-### Adding new source files
-
-It is important to maintain the correct copyright messages, indicating the contributors of each file and that it is covered by the EPL. You can use automation to insert a correct copyright header.
-
-Install the [Eclipse Releng Tools](https://wiki.eclipse.org/Development_Resources/How_to_Use_Eclipse_Copyright_Tool). They contain the copyright tool. Use the following copyright header:
-
-```
-Copyright (c) ${date} 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 v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/epl-v10.html
- 
-  Contributors:
-     Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-```
-
-The Contributors entry can be replaced with the appropriate names. Use "Fix copyrights" from the context menu to add the copyrights to all relevant files in a project or folder.
- 
-
-[^fn1]: Maro, S. and Steghöfer, JP., 2016, September. Capra: A Configurable and Extendable Traceability Management Tool. In 2016 IEEE 24th International Requirements Engineering Conference (RE). IEEE.
-
-[^fn2]: Maro, S., Anjorin A., Wohlrab R. and Steghöfer, JP., 2016, September. Traceability Maintenance: Factors and Guidelines. In Automated Software Engineering (ASE), 2016 31st IEEE/ACM International Conference. IEEE.
\ No newline at end of file
diff --git a/org.eclipse.capra.documentation/plugin.xml b/org.eclipse.capra.documentation/plugin.xml
deleted file mode 100644
index 7cd1503..0000000
--- a/org.eclipse.capra.documentation/plugin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-   <extension
-         point="org.eclipse.help.toc">
-      <toc
-            file="mainTOC.xml"
-            primary="true">
-      </toc>
-      <toc
-            file="docu/capraDocumentation-toc.xml"
-            primary="false">
-      </toc>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.documentation/pom.xml b/org.eclipse.capra.documentation/pom.xml
deleted file mode 100644
index b61d13f..0000000
--- a/org.eclipse.capra.documentation/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.documentation</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.feature/build.properties b/org.eclipse.capra.feature/build.properties
deleted file mode 100644
index 64f93a9..0000000
--- a/org.eclipse.capra.feature/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-bin.includes = feature.xml
diff --git a/org.eclipse.capra.feature/feature.xml b/org.eclipse.capra.feature/feature.xml
deleted file mode 100644
index b79ac8d..0000000
--- a/org.eclipse.capra.feature/feature.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.capra.feature"
-      label="Capra"
-      version="0.7.0.qualifier"
-      license-feature="org.eclipse.license"
-      license-feature-version="0.0.0">
-
-   <copyright>
-      Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs and others.
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <plugin
-         id="org.eclipse.capra.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.generic.persistence"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.generic.priority"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.generic.tracemodels"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.cdt"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.emf"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.file"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.gef"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.hudson"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.jdt"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.mylyn"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.handler.papyrus"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.ui.notification"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.ui.plantuml"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.capra.documentation"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"/>
-
-</feature>
diff --git a/org.eclipse.capra.feature/pom.xml b/org.eclipse.capra.feature/pom.xml
deleted file mode 100644
index 5bde0d6..0000000
--- a/org.eclipse.capra.feature/pom.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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.7.0-SNAPSHOT</version>
-        </parent>
-
-        <artifactId>org.eclipse.capra.feature</artifactId>
-        <packaging>eclipse-feature</packaging>
-
-</project>
diff --git a/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF b/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
deleted file mode 100644
index a7a7deb..0000000
--- a/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Trace
-Bundle-SymbolicName: org.eclipse.capra.generic.persistence;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.emf;bundle-version="2.6.0",
- org.eclipse.core.resources;bundle-version="3.9.1",
- org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.capra.core;bundle-version="0.7.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.generic.persistence/build.properties b/org.eclipse.capra.generic.persistence/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.generic.persistence/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.generic.persistence/plugin.xml b/org.eclipse.capra.generic.persistence/plugin.xml
deleted file mode 100644
index 23f4e3f..0000000
--- a/org.eclipse.capra.generic.persistence/plugin.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         point="org.eclipse.capra.configuration.persistenceHandler">
-      <persistenceHandler
-            class="org.eclipse.capra.generic.persistance.TracePersistenceAdapter">
-      </persistenceHandler>
-   </extension>
-</plugin>
diff --git a/org.eclipse.capra.generic.persistence/pom.xml b/org.eclipse.capra.generic.persistence/pom.xml
deleted file mode 100644
index ea548e2..0000000
--- a/org.eclipse.capra.generic.persistence/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.generic.persistence</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java b/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
deleted file mode 100644
index dd40686..0000000
--- a/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.generic.persistance;
-
-import java.io.IOException;
-import java.util.Optional;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-
-/**
- * This generic implementation of
- * {@link org.eclipse.capra.core.adapters.TracePersistenceAdapter} creates a
- * special project in the workspace to house the trace link model and the
- * artifact model.
- */
-public class TracePersistenceAdapter implements org.eclipse.capra.core.adapters.TracePersistenceAdapter {
-
-	private static final String DEFAULT_PROJECT_NAME = "__WorkspaceTraceModels";
-	private static final String DEFAULT_TRACE_MODEL_NAME = "traceModel.xmi";
-	private static final String DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME = "artifactWrappers.xmi";
-
-	private Optional<EObject> loadModel(ResourceSet resourceSet, String modelName) {
-		if (projectExist(DEFAULT_PROJECT_NAME) && fileExists(DEFAULT_PROJECT_NAME + "/" + modelName)) {
-			try {
-				URI uri = URI.createPlatformResourceURI(DEFAULT_PROJECT_NAME + "/" + modelName, true);
-				Resource resource = resourceSet.getResource(uri, true);
-				resource.load(null);
-
-				return Optional.of(resource.getContents().get(0));
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return Optional.empty();
-	}
-
-	@Override
-	public EObject getTraceModel(ResourceSet resourceSet) {
-		TraceMetaModelAdapter adapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		return loadModel(resourceSet, DEFAULT_TRACE_MODEL_NAME).orElse(adapter.createModel());
-	}
-
-	private boolean fileExists(String path) {
-		return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path)).exists();
-	}
-
-	private boolean projectExist(String defaultProjectName) {
-		return ResourcesPlugin.getWorkspace().getRoot().getProject(defaultProjectName).exists();
-	}
-
-	private IProject ensureProjectExists(String defaultProjectName) throws CoreException {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(defaultProjectName);
-		if (!project.exists()) {
-			project.create(new NullProgressMonitor());
-			project.open(new NullProgressMonitor());
-		}
-
-		return project;
-	}
-
-	@Override
-	public void saveTracesAndArtifacts(EObject traceModel, EObject artifactModel) {
-		try {
-			ResourceSet resourceSet = new ResourceSetImpl();
-
-			URI uri = URI.createPlatformResourceURI(DEFAULT_PROJECT_NAME + "/" + DEFAULT_TRACE_MODEL_NAME, true);
-			Resource resource = resourceSet.createResource(uri);
-			resource.getContents().add(traceModel);
-
-			uri = URI.createPlatformResourceURI(DEFAULT_PROJECT_NAME + "/" + DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME, true);
-			Resource resourceForArtifacts = resourceSet.createResource(uri);
-			resourceForArtifacts.getContents().add(artifactModel);
-
-			ensureProjectExists(DEFAULT_PROJECT_NAME);
-
-			resourceForArtifacts.save(null);
-			resource.save(null);
-		} catch (Exception e) {
-			System.err.println("Unable to save trace model!");
-			e.printStackTrace();
-		}
-	}
-
-	@Override
-	public EObject getArtifactWrappers(ResourceSet resourceSet) {
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		return loadModel(resourceSet, DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME).orElse(adapter.createModel());
-	}
-
-	@Override
-	public EObject getTraceModel(EObject object) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public EObject getArtifactWrappers(EObject object) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF b/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
deleted file mode 100644
index 8920e16..0000000
--- a/org.eclipse.capra.generic.priority/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: HudsonPriorityHandler
-Bundle-SymbolicName: org.eclipse.capra.generic.priority;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.capra.handler.hudson,
- org.eclipse.capra.core,
- org.eclipse.emf.ecore;bundle-version="2.10.2"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.mylyn.builds.internal.core
diff --git a/org.eclipse.capra.generic.priority/build.properties b/org.eclipse.capra.generic.priority/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.generic.priority/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.generic.priority/plugin.xml b/org.eclipse.capra.generic.priority/plugin.xml
deleted file mode 100644
index ccc8fe7..0000000
--- a/org.eclipse.capra.generic.priority/plugin.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         point="org.eclipse.capra.configuration.priorityHandler">
-      <PriorityHandler
-            class="org.eclipse.capra.generic.priority.DefaultPriorityHandler">
-      </PriorityHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.generic.priority/pom.xml b/org.eclipse.capra.generic.priority/pom.xml
deleted file mode 100644
index 6af487b..0000000
--- a/org.eclipse.capra.generic.priority/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.generic.priority</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java b/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
deleted file mode 100644
index 1f2b153..0000000
--- a/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.generic.priority;
-
-import java.util.Collection;
-
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.handlers.PriorityHandler;
-import org.eclipse.capra.handler.hudson.HudsonHandler;
-import org.eclipse.mylyn.builds.internal.core.BuildElement;
-import org.eclipse.mylyn.builds.internal.core.TestElement;
-
-/**
- * Provides a simple default policy for selecting an {@link ArtifactHandler} in
- * cases where tests or builds from Hudson are selected by returning the first
- * available {@link HudsonHandler}.
- */
-public class DefaultPriorityHandler implements PriorityHandler {
-
-	@Override
-	public ArtifactHandler getSelectedHandler(Collection<ArtifactHandler> handlers, Object selectedElement) {
-		if (selectedElement instanceof TestElement || selectedElement instanceof BuildElement) {
-			return handlers.stream().filter(h -> h instanceof HudsonHandler).findAny().get();
-
-		}
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.generic.tracemodels/META-INF/MANIFEST.MF b/org.eclipse.capra.generic.tracemodels/META-INF/MANIFEST.MF
deleted file mode 100644
index 91d7226..0000000
--- a/org.eclipse.capra.generic.tracemodels/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.capra.generic.tracemodels;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Bundle-ClassPath: .
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.capra.GenericTraceMetaModel,
- org.eclipse.capra.GenericTraceMetaModel.impl,
- org.eclipse.capra.GenericTraceMetaModel.util,
- org.eclipse.capra.GenericArtifactMetaModel,
- org.eclipse.capra.GenericArtifactMetaModel.impl,
- org.eclipse.capra.GenericArtifactMetaModel.util
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.emf.ecore;visibility:=reexport,
- org.eclipse.xtext.xbase.lib,
- org.eclipse.emf.ecore.xcore.lib,
- org.eclipse.capra.core
-Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.capra.generic.tracemodels/build.properties b/org.eclipse.capra.generic.tracemodels/build.properties
deleted file mode 100644
index 2781028..0000000
--- a/org.eclipse.capra.generic.tracemodels/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-#
-bin.includes = .,\
-               model/,\
-               META-INF/,\
-               plugin.xml,\
-               plugin.properties
-jars.compile.order = .
-source.. = src-gen/,\
-		   src/
-output.. = bin/
diff --git a/org.eclipse.capra.generic.tracemodels/model/artifact.xcore b/org.eclipse.capra.generic.tracemodels/model/artifact.xcore
deleted file mode 100644
index d7dab92..0000000
--- a/org.eclipse.capra.generic.tracemodels/model/artifact.xcore
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.eclipse.capra.GenericArtifactMetaModel
-
-class ArtifactWrapperContainer {
-	contains ArtifactWrapper [0..*] artifacts 
-}
-
-class ArtifactWrapper {
-	String uri
-	String name
-	String ArtifactHandler
-}    
-   
\ No newline at end of file
diff --git a/org.eclipse.capra.generic.tracemodels/model/generictrace.xcore b/org.eclipse.capra.generic.tracemodels/model/generictrace.xcore
deleted file mode 100644
index edc4cb2..0000000
--- a/org.eclipse.capra.generic.tracemodels/model/generictrace.xcore
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.eclipse.capra.GenericTraceMetaModel
-import org.eclipse.emf.ecore.EObject
-
-class GenericTraceModel{
-	contains RelatedTo[0..*] traces
-} 
-
-class RelatedTo {
-	refers EObject [0..*] item 
-}   
\ No newline at end of file
diff --git a/org.eclipse.capra.generic.tracemodels/plugin.properties b/org.eclipse.capra.generic.tracemodels/plugin.properties
deleted file mode 100644
index 387ccd6..0000000
--- a/org.eclipse.capra.generic.tracemodels/plugin.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-#
-
-pluginName = Helpers Model
-providerName = www.example.org
diff --git a/org.eclipse.capra.generic.tracemodels/plugin.xml b/org.eclipse.capra.generic.tracemodels/plugin.xml
deleted file mode 100644
index 0beeb30..0000000
--- a/org.eclipse.capra.generic.tracemodels/plugin.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<!--
--->
-
-<plugin>
-   <extension
-         point="org.eclipse.capra.configuration.ArtifactMetaModel">
-      <ArtifactMetaModelAdapter
-            class="org.eclipse.capra.generic.tracemodels.GenericArtifactMetaModelAdapter">
-      </ArtifactMetaModelAdapter>
-   </extension>
-
-   <extension point="org.eclipse.emf.ecore.generated_package">
-      <!-- @generated generictrace -->
-      <package
-            uri="org.eclipse.capra.GenericTraceMetaModel"
-            class="org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage"
-            genModel="model/generictrace.xcore"/>
-   </extension>
-
-   <extension point="org.eclipse.emf.ecore.generated_package">
-      <!-- @generated artifact -->
-      <package
-            uri="org.eclipse.capra.GenericArtifactMetaModel"
-            class="org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage"
-            genModel="model/artifact.xcore"/>
-   </extension>
-   <extension
-         point="org.eclipse.capra.configuration.TraceabilityMetaModel">
-      <TraceabilityMetaModelAdapter
-            class="org.eclipse.capra.generic.tracemodels.GenericMetaModelAdapter">
-      </TraceabilityMetaModelAdapter>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.generic.tracemodels/pom.xml b/org.eclipse.capra.generic.tracemodels/pom.xml
deleted file mode 100644
index e9994ca..0000000
--- a/org.eclipse.capra.generic.tracemodels/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.generic.tracemodels</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/ArtifactWrapper.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/ArtifactWrapper.java
deleted file mode 100644
index 4c8093e..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/ArtifactWrapper.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Artifact Wrapper</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getUri <em>Uri</em>}</li>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getArtifactHandler <em>Artifact Handler</em>}</li>
- * </ul>
- *
- * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#getArtifactWrapper()
- * @model
- * @generated
- */
-public interface ArtifactWrapper extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Uri</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Uri</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Uri</em>' attribute.
-	 * @see #setUri(String)
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#getArtifactWrapper_Uri()
-	 * @model unique="false"
-	 * @generated
-	 */
-	String getUri();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getUri <em>Uri</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Uri</em>' attribute.
-	 * @see #getUri()
-	 * @generated
-	 */
-	void setUri(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name</em>' attribute.
-	 * @see #setName(String)
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#getArtifactWrapper_Name()
-	 * @model unique="false"
-	 * @generated
-	 */
-	String getName();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
-	 * @see #getName()
-	 * @generated
-	 */
-	void setName(String value);
-
-	/**
-	 * Returns the value of the '<em><b>Artifact Handler</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Artifact Handler</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Artifact Handler</em>' attribute.
-	 * @see #setArtifactHandler(String)
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#getArtifactWrapper_ArtifactHandler()
-	 * @model unique="false"
-	 * @generated
-	 */
-	String getArtifactHandler();
-
-	/**
-	 * Sets the value of the '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getArtifactHandler <em>Artifact Handler</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Artifact Handler</em>' attribute.
-	 * @see #getArtifactHandler()
-	 * @generated
-	 */
-	void setArtifactHandler(String value);
-
-} // ArtifactWrapper
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/ArtifactWrapperContainer.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/ArtifactWrapperContainer.java
deleted file mode 100644
index cbc37fa..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/ArtifactWrapperContainer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Artifact Wrapper Container</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer#getArtifacts <em>Artifacts</em>}</li>
- * </ul>
- *
- * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#getArtifactWrapperContainer()
- * @model
- * @generated
- */
-public interface ArtifactWrapperContainer extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Artifacts</b></em>' containment reference list.
-	 * The list contents are of type {@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Artifacts</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Artifacts</em>' containment reference list.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#getArtifactWrapperContainer_Artifacts()
-	 * @model containment="true"
-	 * @generated
-	 */
-	EList<ArtifactWrapper> getArtifacts();
-
-} // ArtifactWrapperContainer
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/GenericArtifactMetaModelFactory.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/GenericArtifactMetaModelFactory.java
deleted file mode 100644
index 59b5ae5..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/GenericArtifactMetaModelFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel;
-
-import org.eclipse.emf.ecore.EFactory;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Factory</b> for the model.
- * It provides a create method for each non-abstract class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage
- * @generated
- */
-public interface GenericArtifactMetaModelFactory extends EFactory {
-	/**
-	 * The singleton instance of the factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	GenericArtifactMetaModelFactory eINSTANCE = org.eclipse.capra.GenericArtifactMetaModel.impl.GenericArtifactMetaModelFactoryImpl.init();
-
-	/**
-	 * Returns a new object of class '<em>Artifact Wrapper Container</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Artifact Wrapper Container</em>'.
-	 * @generated
-	 */
-	ArtifactWrapperContainer createArtifactWrapperContainer();
-
-	/**
-	 * Returns a new object of class '<em>Artifact Wrapper</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Artifact Wrapper</em>'.
-	 * @generated
-	 */
-	ArtifactWrapper createArtifactWrapper();
-
-	/**
-	 * Returns the package supported by this factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the package supported by this factory.
-	 * @generated
-	 */
-	GenericArtifactMetaModelPackage getGenericArtifactMetaModelPackage();
-
-} //GenericArtifactMetaModelFactory
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/GenericArtifactMetaModelPackage.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/GenericArtifactMetaModelPackage.java
deleted file mode 100644
index b365c6c..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/GenericArtifactMetaModelPackage.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Package</b> for the model.
- * It contains accessors for the meta objects to represent
- * <ul>
- *   <li>each class,</li>
- *   <li>each feature of each class,</li>
- *   <li>each operation of each class,</li>
- *   <li>each enum,</li>
- *   <li>and each data type</li>
- * </ul>
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelFactory
- * @model kind="package"
- *        annotation="http://www.eclipse.org/emf/2002/GenModel basePackage='org.eclipse.capra'"
- * @generated
- */
-public interface GenericArtifactMetaModelPackage extends EPackage {
-	/**
-	 * The package name.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	String eNAME = "GenericArtifactMetaModel";
-
-	/**
-	 * The package namespace URI.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	String eNS_URI = "org.eclipse.capra.GenericArtifactMetaModel";
-
-	/**
-	 * The package namespace name.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	String eNS_PREFIX = "GenericArtifactMetaModel";
-
-	/**
-	 * The singleton instance of the package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	GenericArtifactMetaModelPackage eINSTANCE = org.eclipse.capra.GenericArtifactMetaModel.impl.GenericArtifactMetaModelPackageImpl.init();
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperContainerImpl <em>Artifact Wrapper Container</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperContainerImpl
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.GenericArtifactMetaModelPackageImpl#getArtifactWrapperContainer()
-	 * @generated
-	 */
-	int ARTIFACT_WRAPPER_CONTAINER = 0;
-
-	/**
-	 * The feature id for the '<em><b>Artifacts</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS = 0;
-
-	/**
-	 * The number of structural features of the '<em>Artifact Wrapper Container</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER_CONTAINER_FEATURE_COUNT = 1;
-
-	/**
-	 * The number of operations of the '<em>Artifact Wrapper Container</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER_CONTAINER_OPERATION_COUNT = 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl <em>Artifact Wrapper</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.GenericArtifactMetaModelPackageImpl#getArtifactWrapper()
-	 * @generated
-	 */
-	int ARTIFACT_WRAPPER = 1;
-
-	/**
-	 * The feature id for the '<em><b>Uri</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER__URI = 0;
-
-	/**
-	 * The feature id for the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER__NAME = 1;
-
-	/**
-	 * The feature id for the '<em><b>Artifact Handler</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER__ARTIFACT_HANDLER = 2;
-
-	/**
-	 * The number of structural features of the '<em>Artifact Wrapper</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER_FEATURE_COUNT = 3;
-
-	/**
-	 * The number of operations of the '<em>Artifact Wrapper</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int ARTIFACT_WRAPPER_OPERATION_COUNT = 0;
-
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer <em>Artifact Wrapper Container</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Artifact Wrapper Container</em>'.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer
-	 * @generated
-	 */
-	EClass getArtifactWrapperContainer();
-
-	/**
-	 * Returns the meta object for the containment reference list '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer#getArtifacts <em>Artifacts</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Artifacts</em>'.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer#getArtifacts()
-	 * @see #getArtifactWrapperContainer()
-	 * @generated
-	 */
-	EReference getArtifactWrapperContainer_Artifacts();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper <em>Artifact Wrapper</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Artifact Wrapper</em>'.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper
-	 * @generated
-	 */
-	EClass getArtifactWrapper();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getUri <em>Uri</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Uri</em>'.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getUri()
-	 * @see #getArtifactWrapper()
-	 * @generated
-	 */
-	EAttribute getArtifactWrapper_Uri();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getName <em>Name</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Name</em>'.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getName()
-	 * @see #getArtifactWrapper()
-	 * @generated
-	 */
-	EAttribute getArtifactWrapper_Name();
-
-	/**
-	 * Returns the meta object for the attribute '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getArtifactHandler <em>Artifact Handler</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Artifact Handler</em>'.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper#getArtifactHandler()
-	 * @see #getArtifactWrapper()
-	 * @generated
-	 */
-	EAttribute getArtifactWrapper_ArtifactHandler();
-
-	/**
-	 * Returns the factory that creates the instances of the model.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the factory that creates the instances of the model.
-	 * @generated
-	 */
-	GenericArtifactMetaModelFactory getGenericArtifactMetaModelFactory();
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Defines literals for the meta objects that represent
-	 * <ul>
-	 *   <li>each class,</li>
-	 *   <li>each feature of each class,</li>
-	 *   <li>each operation of each class,</li>
-	 *   <li>each enum,</li>
-	 *   <li>and each data type</li>
-	 * </ul>
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	interface Literals {
-		/**
-		 * The meta object literal for the '{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperContainerImpl <em>Artifact Wrapper Container</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperContainerImpl
-		 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.GenericArtifactMetaModelPackageImpl#getArtifactWrapperContainer()
-		 * @generated
-		 */
-		EClass ARTIFACT_WRAPPER_CONTAINER = eINSTANCE.getArtifactWrapperContainer();
-
-		/**
-		 * The meta object literal for the '<em><b>Artifacts</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS = eINSTANCE.getArtifactWrapperContainer_Artifacts();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl <em>Artifact Wrapper</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl
-		 * @see org.eclipse.capra.GenericArtifactMetaModel.impl.GenericArtifactMetaModelPackageImpl#getArtifactWrapper()
-		 * @generated
-		 */
-		EClass ARTIFACT_WRAPPER = eINSTANCE.getArtifactWrapper();
-
-		/**
-		 * The meta object literal for the '<em><b>Uri</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute ARTIFACT_WRAPPER__URI = eINSTANCE.getArtifactWrapper_Uri();
-
-		/**
-		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute ARTIFACT_WRAPPER__NAME = eINSTANCE.getArtifactWrapper_Name();
-
-		/**
-		 * The meta object literal for the '<em><b>Artifact Handler</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EAttribute ARTIFACT_WRAPPER__ARTIFACT_HANDLER = eINSTANCE.getArtifactWrapper_ArtifactHandler();
-
-	}
-
-} //GenericArtifactMetaModelPackage
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/ArtifactWrapperContainerImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/ArtifactWrapperContainerImpl.java
deleted file mode 100644
index ed19b87..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/ArtifactWrapperContainerImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel.impl;
-
-import java.util.Collection;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer;
-import org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage;
-
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
-import org.eclipse.emf.ecore.util.InternalEList;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Artifact Wrapper Container</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperContainerImpl#getArtifacts <em>Artifacts</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class ArtifactWrapperContainerImpl extends MinimalEObjectImpl.Container implements ArtifactWrapperContainer {
-	/**
-	 * The cached value of the '{@link #getArtifacts() <em>Artifacts</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getArtifacts()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<ArtifactWrapper> artifacts;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ArtifactWrapperContainerImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return GenericArtifactMetaModelPackage.Literals.ARTIFACT_WRAPPER_CONTAINER;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<ArtifactWrapper> getArtifacts() {
-		if (artifacts == null) {
-			artifacts = new EObjectContainmentEList<ArtifactWrapper>(ArtifactWrapper.class, this, GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS);
-		}
-		return artifacts;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
-				return ((InternalEList<?>)getArtifacts()).basicRemove(otherEnd, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
-				return getArtifacts();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
-				getArtifacts().clear();
-				getArtifacts().addAll((Collection<? extends ArtifactWrapper>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
-				getArtifacts().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS:
-				return artifacts != null && !artifacts.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-} //ArtifactWrapperContainerImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/ArtifactWrapperImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/ArtifactWrapperImpl.java
deleted file mode 100644
index fc12178..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/ArtifactWrapperImpl.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel.impl;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Artifact Wrapper</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl#getUri <em>Uri</em>}</li>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.capra.GenericArtifactMetaModel.impl.ArtifactWrapperImpl#getArtifactHandler <em>Artifact Handler</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class ArtifactWrapperImpl extends MinimalEObjectImpl.Container implements ArtifactWrapper {
-	/**
-	 * The default value of the '{@link #getUri() <em>Uri</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUri()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String URI_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getUri() <em>Uri</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getUri()
-	 * @generated
-	 * @ordered
-	 */
-	protected String uri = URI_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String NAME_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-	protected String name = NAME_EDEFAULT;
-
-	/**
-	 * The default value of the '{@link #getArtifactHandler() <em>Artifact Handler</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getArtifactHandler()
-	 * @generated
-	 * @ordered
-	 */
-	protected static final String ARTIFACT_HANDLER_EDEFAULT = null;
-
-	/**
-	 * The cached value of the '{@link #getArtifactHandler() <em>Artifact Handler</em>}' attribute.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getArtifactHandler()
-	 * @generated
-	 * @ordered
-	 */
-	protected String artifactHandler = ARTIFACT_HANDLER_EDEFAULT;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected ArtifactWrapperImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return GenericArtifactMetaModelPackage.Literals.ARTIFACT_WRAPPER;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getUri() {
-		return uri;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setUri(String newUri) {
-		String oldUri = uri;
-		uri = newUri;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__URI, oldUri, uri));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setName(String newName) {
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__NAME, oldName, name));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public String getArtifactHandler() {
-		return artifactHandler;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void setArtifactHandler(String newArtifactHandler) {
-		String oldArtifactHandler = artifactHandler;
-		artifactHandler = newArtifactHandler;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER, oldArtifactHandler, artifactHandler));
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__URI:
-				return getUri();
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__NAME:
-				return getName();
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
-				return getArtifactHandler();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__URI:
-				setUri((String)newValue);
-				return;
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__NAME:
-				setName((String)newValue);
-				return;
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
-				setArtifactHandler((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__URI:
-				setUri(URI_EDEFAULT);
-				return;
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__NAME:
-				setName(NAME_EDEFAULT);
-				return;
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
-				setArtifactHandler(ARTIFACT_HANDLER_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__URI:
-				return URI_EDEFAULT == null ? uri != null : !URI_EDEFAULT.equals(uri);
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER__ARTIFACT_HANDLER:
-				return ARTIFACT_HANDLER_EDEFAULT == null ? artifactHandler != null : !ARTIFACT_HANDLER_EDEFAULT.equals(artifactHandler);
-		}
-		return super.eIsSet(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public String toString() {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (uri: ");
-		result.append(uri);
-		result.append(", name: ");
-		result.append(name);
-		result.append(", ArtifactHandler: ");
-		result.append(artifactHandler);
-		result.append(')');
-		return result.toString();
-	}
-
-} //ArtifactWrapperImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/GenericArtifactMetaModelFactoryImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/GenericArtifactMetaModelFactoryImpl.java
deleted file mode 100644
index 9f11027..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/GenericArtifactMetaModelFactoryImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel.impl;
-
-import org.eclipse.capra.GenericArtifactMetaModel.*;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-
-import org.eclipse.emf.ecore.impl.EFactoryImpl;
-
-import org.eclipse.emf.ecore.plugin.EcorePlugin;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Factory</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class GenericArtifactMetaModelFactoryImpl extends EFactoryImpl implements GenericArtifactMetaModelFactory {
-	/**
-	 * Creates the default factory implementation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static GenericArtifactMetaModelFactory init() {
-		try {
-			GenericArtifactMetaModelFactory theGenericArtifactMetaModelFactory = (GenericArtifactMetaModelFactory)EPackage.Registry.INSTANCE.getEFactory(GenericArtifactMetaModelPackage.eNS_URI);
-			if (theGenericArtifactMetaModelFactory != null) {
-				return theGenericArtifactMetaModelFactory;
-			}
-		}
-		catch (Exception exception) {
-			EcorePlugin.INSTANCE.log(exception);
-		}
-		return new GenericArtifactMetaModelFactoryImpl();
-	}
-
-	/**
-	 * Creates an instance of the factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericArtifactMetaModelFactoryImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EObject create(EClass eClass) {
-		switch (eClass.getClassifierID()) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER: return createArtifactWrapperContainer();
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER: return createArtifactWrapper();
-			default:
-				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public ArtifactWrapperContainer createArtifactWrapperContainer() {
-		ArtifactWrapperContainerImpl artifactWrapperContainer = new ArtifactWrapperContainerImpl();
-		return artifactWrapperContainer;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public ArtifactWrapper createArtifactWrapper() {
-		ArtifactWrapperImpl artifactWrapper = new ArtifactWrapperImpl();
-		return artifactWrapper;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericArtifactMetaModelPackage getGenericArtifactMetaModelPackage() {
-		return (GenericArtifactMetaModelPackage)getEPackage();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @deprecated
-	 * @generated
-	 */
-	@Deprecated
-	public static GenericArtifactMetaModelPackage getPackage() {
-		return GenericArtifactMetaModelPackage.eINSTANCE;
-	}
-
-} //GenericArtifactMetaModelFactoryImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/GenericArtifactMetaModelPackageImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/GenericArtifactMetaModelPackageImpl.java
deleted file mode 100644
index 34d5e6d..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/impl/GenericArtifactMetaModelPackageImpl.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel.impl;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer;
-import org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelFactory;
-import org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EcorePackage;
-
-import org.eclipse.emf.ecore.impl.EPackageImpl;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Package</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class GenericArtifactMetaModelPackageImpl extends EPackageImpl implements GenericArtifactMetaModelPackage {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass artifactWrapperContainerEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass artifactWrapperEClass = null;
-
-	/**
-	 * Creates an instance of the model <b>Package</b>, registered with
-	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
-	 * package URI value.
-	 * <p>Note: the correct way to create the package is via the static
-	 * factory method {@link #init init()}, which also performs
-	 * initialization of the package, or returns the registered package,
-	 * if one already exists.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.emf.ecore.EPackage.Registry
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage#eNS_URI
-	 * @see #init()
-	 * @generated
-	 */
-	private GenericArtifactMetaModelPackageImpl() {
-		super(eNS_URI, GenericArtifactMetaModelFactory.eINSTANCE);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private static boolean isInited = false;
-
-	/**
-	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
-	 * 
-	 * <p>This method is used to initialize {@link GenericArtifactMetaModelPackage#eINSTANCE} when that field is accessed.
-	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #eNS_URI
-	 * @see #createPackageContents()
-	 * @see #initializePackageContents()
-	 * @generated
-	 */
-	public static GenericArtifactMetaModelPackage init() {
-		if (isInited) return (GenericArtifactMetaModelPackage)EPackage.Registry.INSTANCE.getEPackage(GenericArtifactMetaModelPackage.eNS_URI);
-
-		// Obtain or create and register package
-		GenericArtifactMetaModelPackageImpl theGenericArtifactMetaModelPackage = (GenericArtifactMetaModelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof GenericArtifactMetaModelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new GenericArtifactMetaModelPackageImpl());
-
-		isInited = true;
-
-		// Initialize simple dependencies
-		EcorePackage.eINSTANCE.eClass();
-
-		// Create package meta-data objects
-		theGenericArtifactMetaModelPackage.createPackageContents();
-
-		// Initialize created meta-data
-		theGenericArtifactMetaModelPackage.initializePackageContents();
-
-		// Mark meta-data to indicate it can't be changed
-		theGenericArtifactMetaModelPackage.freeze();
-
-  
-		// Update the registry and return the package
-		EPackage.Registry.INSTANCE.put(GenericArtifactMetaModelPackage.eNS_URI, theGenericArtifactMetaModelPackage);
-		return theGenericArtifactMetaModelPackage;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EClass getArtifactWrapperContainer() {
-		return artifactWrapperContainerEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getArtifactWrapperContainer_Artifacts() {
-		return (EReference)artifactWrapperContainerEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EClass getArtifactWrapper() {
-		return artifactWrapperEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EAttribute getArtifactWrapper_Uri() {
-		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EAttribute getArtifactWrapper_Name() {
-		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(1);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EAttribute getArtifactWrapper_ArtifactHandler() {
-		return (EAttribute)artifactWrapperEClass.getEStructuralFeatures().get(2);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericArtifactMetaModelFactory getGenericArtifactMetaModelFactory() {
-		return (GenericArtifactMetaModelFactory)getEFactoryInstance();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private boolean isCreated = false;
-
-	/**
-	 * Creates the meta-model objects for the package.  This method is
-	 * guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void createPackageContents() {
-		if (isCreated) return;
-		isCreated = true;
-
-		// Create classes and their features
-		artifactWrapperContainerEClass = createEClass(ARTIFACT_WRAPPER_CONTAINER);
-		createEReference(artifactWrapperContainerEClass, ARTIFACT_WRAPPER_CONTAINER__ARTIFACTS);
-
-		artifactWrapperEClass = createEClass(ARTIFACT_WRAPPER);
-		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__URI);
-		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__NAME);
-		createEAttribute(artifactWrapperEClass, ARTIFACT_WRAPPER__ARTIFACT_HANDLER);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private boolean isInitialized = false;
-
-	/**
-	 * Complete the initialization of the package and its meta-model.  This
-	 * method is guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void initializePackageContents() {
-		if (isInitialized) return;
-		isInitialized = true;
-
-		// Initialize package
-		setName(eNAME);
-		setNsPrefix(eNS_PREFIX);
-		setNsURI(eNS_URI);
-
-		// Obtain other dependent packages
-		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
-
-		// Create type parameters
-
-		// Set bounds for type parameters
-
-		// Add supertypes to classes
-
-		// Initialize classes, features, and operations; add parameters
-		initEClass(artifactWrapperContainerEClass, ArtifactWrapperContainer.class, "ArtifactWrapperContainer", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getArtifactWrapperContainer_Artifacts(), this.getArtifactWrapper(), null, "artifacts", null, 0, -1, ArtifactWrapperContainer.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-		initEClass(artifactWrapperEClass, ArtifactWrapper.class, "ArtifactWrapper", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getArtifactWrapper_Uri(), theEcorePackage.getEString(), "uri", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getArtifactWrapper_Name(), theEcorePackage.getEString(), "name", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEAttribute(getArtifactWrapper_ArtifactHandler(), theEcorePackage.getEString(), "ArtifactHandler", null, 0, 1, ArtifactWrapper.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-		// Create resource
-		createResource(eNS_URI);
-	}
-
-} //GenericArtifactMetaModelPackageImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/util/GenericArtifactMetaModelAdapterFactory.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/util/GenericArtifactMetaModelAdapterFactory.java
deleted file mode 100644
index d867048..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/util/GenericArtifactMetaModelAdapterFactory.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel.util;
-
-import org.eclipse.capra.GenericArtifactMetaModel.*;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Adapter Factory</b> for the model.
- * It provides an adapter <code>createXXX</code> method for each class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage
- * @generated
- */
-public class GenericArtifactMetaModelAdapterFactory extends AdapterFactoryImpl {
-	/**
-	 * The cached model package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected static GenericArtifactMetaModelPackage modelPackage;
-
-	/**
-	 * Creates an instance of the adapter factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericArtifactMetaModelAdapterFactory() {
-		if (modelPackage == null) {
-			modelPackage = GenericArtifactMetaModelPackage.eINSTANCE;
-		}
-	}
-
-	/**
-	 * Returns whether this factory is applicable for the type of the object.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
-	 * <!-- end-user-doc -->
-	 * @return whether this factory is applicable for the type of the object.
-	 * @generated
-	 */
-	@Override
-	public boolean isFactoryForType(Object object) {
-		if (object == modelPackage) {
-			return true;
-		}
-		if (object instanceof EObject) {
-			return ((EObject)object).eClass().getEPackage() == modelPackage;
-		}
-		return false;
-	}
-
-	/**
-	 * The switch that delegates to the <code>createXXX</code> methods.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected GenericArtifactMetaModelSwitch<Adapter> modelSwitch =
-		new GenericArtifactMetaModelSwitch<Adapter>() {
-			@Override
-			public Adapter caseArtifactWrapperContainer(ArtifactWrapperContainer object) {
-				return createArtifactWrapperContainerAdapter();
-			}
-			@Override
-			public Adapter caseArtifactWrapper(ArtifactWrapper object) {
-				return createArtifactWrapperAdapter();
-			}
-			@Override
-			public Adapter defaultCase(EObject object) {
-				return createEObjectAdapter();
-			}
-		};
-
-	/**
-	 * Creates an adapter for the <code>target</code>.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param target the object to adapt.
-	 * @return the adapter for the <code>target</code>.
-	 * @generated
-	 */
-	@Override
-	public Adapter createAdapter(Notifier target) {
-		return modelSwitch.doSwitch((EObject)target);
-	}
-
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer <em>Artifact Wrapper Container</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer
-	 * @generated
-	 */
-	public Adapter createArtifactWrapperContainerAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper <em>Artifact Wrapper</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper
-	 * @generated
-	 */
-	public Adapter createArtifactWrapperAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for the default case.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @generated
-	 */
-	public Adapter createEObjectAdapter() {
-		return null;
-	}
-
-} //GenericArtifactMetaModelAdapterFactory
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/util/GenericArtifactMetaModelSwitch.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/util/GenericArtifactMetaModelSwitch.java
deleted file mode 100644
index 46279cb..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericArtifactMetaModel/util/GenericArtifactMetaModelSwitch.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericArtifactMetaModel.util;
-
-import org.eclipse.capra.GenericArtifactMetaModel.*;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-
-import org.eclipse.emf.ecore.util.Switch;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Switch</b> for the model's inheritance hierarchy.
- * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
- * to invoke the <code>caseXXX</code> method for each class of the model,
- * starting with the actual class of the object
- * and proceeding up the inheritance hierarchy
- * until a non-null result is returned,
- * which is the result of the switch.
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelPackage
- * @generated
- */
-public class GenericArtifactMetaModelSwitch<T> extends Switch<T> {
-	/**
-	 * The cached model package
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected static GenericArtifactMetaModelPackage modelPackage;
-
-	/**
-	 * Creates an instance of the switch.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericArtifactMetaModelSwitch() {
-		if (modelPackage == null) {
-			modelPackage = GenericArtifactMetaModelPackage.eINSTANCE;
-		}
-	}
-
-	/**
-	 * Checks whether this is a switch for the given package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param ePackage the package in question.
-	 * @return whether this is a switch for the given package.
-	 * @generated
-	 */
-	@Override
-	protected boolean isSwitchFor(EPackage ePackage) {
-		return ePackage == modelPackage;
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
-	@Override
-	protected T doSwitch(int classifierID, EObject theEObject) {
-		switch (classifierID) {
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER_CONTAINER: {
-				ArtifactWrapperContainer artifactWrapperContainer = (ArtifactWrapperContainer)theEObject;
-				T result = caseArtifactWrapperContainer(artifactWrapperContainer);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case GenericArtifactMetaModelPackage.ARTIFACT_WRAPPER: {
-				ArtifactWrapper artifactWrapper = (ArtifactWrapper)theEObject;
-				T result = caseArtifactWrapper(artifactWrapper);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			default: return defaultCase(theEObject);
-		}
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Artifact Wrapper Container</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Artifact Wrapper Container</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseArtifactWrapperContainer(ArtifactWrapperContainer object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Artifact Wrapper</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Artifact Wrapper</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseArtifactWrapper(ArtifactWrapper object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch, but this is the last case anyway.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
-	 * @generated
-	 */
-	@Override
-	public T defaultCase(EObject object) {
-		return null;
-	}
-
-} //GenericArtifactMetaModelSwitch
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceMetaModelFactory.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceMetaModelFactory.java
deleted file mode 100644
index b0ec180..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceMetaModelFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel;
-
-import org.eclipse.emf.ecore.EFactory;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Factory</b> for the model.
- * It provides a create method for each non-abstract class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage
- * @generated
- */
-public interface GenericTraceMetaModelFactory extends EFactory {
-	/**
-	 * The singleton instance of the factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	GenericTraceMetaModelFactory eINSTANCE = org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceMetaModelFactoryImpl.init();
-
-	/**
-	 * Returns a new object of class '<em>Generic Trace Model</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Generic Trace Model</em>'.
-	 * @generated
-	 */
-	GenericTraceModel createGenericTraceModel();
-
-	/**
-	 * Returns a new object of class '<em>Related To</em>'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return a new object of class '<em>Related To</em>'.
-	 * @generated
-	 */
-	RelatedTo createRelatedTo();
-
-	/**
-	 * Returns the package supported by this factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the package supported by this factory.
-	 * @generated
-	 */
-	GenericTraceMetaModelPackage getGenericTraceMetaModelPackage();
-
-} //GenericTraceMetaModelFactory
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceMetaModelPackage.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceMetaModelPackage.java
deleted file mode 100644
index e2926e5..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceMetaModelPackage.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Package</b> for the model.
- * It contains accessors for the meta objects to represent
- * <ul>
- *   <li>each class,</li>
- *   <li>each feature of each class,</li>
- *   <li>each operation of each class,</li>
- *   <li>each enum,</li>
- *   <li>and each data type</li>
- * </ul>
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelFactory
- * @model kind="package"
- *        annotation="http://www.eclipse.org/emf/2002/GenModel basePackage='org.eclipse.capra'"
- * @generated
- */
-public interface GenericTraceMetaModelPackage extends EPackage {
-	/**
-	 * The package name.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	String eNAME = "GenericTraceMetaModel";
-
-	/**
-	 * The package namespace URI.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	String eNS_URI = "org.eclipse.capra.GenericTraceMetaModel";
-
-	/**
-	 * The package namespace name.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	String eNS_PREFIX = "GenericTraceMetaModel";
-
-	/**
-	 * The singleton instance of the package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	GenericTraceMetaModelPackage eINSTANCE = org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceMetaModelPackageImpl.init();
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceModelImpl <em>Generic Trace Model</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceModelImpl
-	 * @see org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceMetaModelPackageImpl#getGenericTraceModel()
-	 * @generated
-	 */
-	int GENERIC_TRACE_MODEL = 0;
-
-	/**
-	 * The feature id for the '<em><b>Traces</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int GENERIC_TRACE_MODEL__TRACES = 0;
-
-	/**
-	 * The number of structural features of the '<em>Generic Trace Model</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int GENERIC_TRACE_MODEL_FEATURE_COUNT = 1;
-
-	/**
-	 * The number of operations of the '<em>Generic Trace Model</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int GENERIC_TRACE_MODEL_OPERATION_COUNT = 0;
-
-	/**
-	 * The meta object id for the '{@link org.eclipse.capra.GenericTraceMetaModel.impl.RelatedToImpl <em>Related To</em>}' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.capra.GenericTraceMetaModel.impl.RelatedToImpl
-	 * @see org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceMetaModelPackageImpl#getRelatedTo()
-	 * @generated
-	 */
-	int RELATED_TO = 1;
-
-	/**
-	 * The feature id for the '<em><b>Item</b></em>' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int RELATED_TO__ITEM = 0;
-
-	/**
-	 * The number of structural features of the '<em>Related To</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int RELATED_TO_FEATURE_COUNT = 1;
-
-	/**
-	 * The number of operations of the '<em>Related To</em>' class.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int RELATED_TO_OPERATION_COUNT = 0;
-
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel <em>Generic Trace Model</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Generic Trace Model</em>'.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel
-	 * @generated
-	 */
-	EClass getGenericTraceModel();
-
-	/**
-	 * Returns the meta object for the containment reference list '{@link org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel#getTraces <em>Traces</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Traces</em>'.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel#getTraces()
-	 * @see #getGenericTraceModel()
-	 * @generated
-	 */
-	EReference getGenericTraceModel_Traces();
-
-	/**
-	 * Returns the meta object for class '{@link org.eclipse.capra.GenericTraceMetaModel.RelatedTo <em>Related To</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>Related To</em>'.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.RelatedTo
-	 * @generated
-	 */
-	EClass getRelatedTo();
-
-	/**
-	 * Returns the meta object for the reference list '{@link org.eclipse.capra.GenericTraceMetaModel.RelatedTo#getItem <em>Item</em>}'.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the meta object for the reference list '<em>Item</em>'.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.RelatedTo#getItem()
-	 * @see #getRelatedTo()
-	 * @generated
-	 */
-	EReference getRelatedTo_Item();
-
-	/**
-	 * Returns the factory that creates the instances of the model.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the factory that creates the instances of the model.
-	 * @generated
-	 */
-	GenericTraceMetaModelFactory getGenericTraceMetaModelFactory();
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * Defines literals for the meta objects that represent
-	 * <ul>
-	 *   <li>each class,</li>
-	 *   <li>each feature of each class,</li>
-	 *   <li>each operation of each class,</li>
-	 *   <li>each enum,</li>
-	 *   <li>and each data type</li>
-	 * </ul>
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	interface Literals {
-		/**
-		 * The meta object literal for the '{@link org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceModelImpl <em>Generic Trace Model</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceModelImpl
-		 * @see org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceMetaModelPackageImpl#getGenericTraceModel()
-		 * @generated
-		 */
-		EClass GENERIC_TRACE_MODEL = eINSTANCE.getGenericTraceModel();
-
-		/**
-		 * The meta object literal for the '<em><b>Traces</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference GENERIC_TRACE_MODEL__TRACES = eINSTANCE.getGenericTraceModel_Traces();
-
-		/**
-		 * The meta object literal for the '{@link org.eclipse.capra.GenericTraceMetaModel.impl.RelatedToImpl <em>Related To</em>}' class.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @see org.eclipse.capra.GenericTraceMetaModel.impl.RelatedToImpl
-		 * @see org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceMetaModelPackageImpl#getRelatedTo()
-		 * @generated
-		 */
-		EClass RELATED_TO = eINSTANCE.getRelatedTo();
-
-		/**
-		 * The meta object literal for the '<em><b>Item</b></em>' reference list feature.
-		 * <!-- begin-user-doc -->
-		 * <!-- end-user-doc -->
-		 * @generated
-		 */
-		EReference RELATED_TO__ITEM = eINSTANCE.getRelatedTo_Item();
-
-	}
-
-} //GenericTraceMetaModelPackage
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceModel.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceModel.java
deleted file mode 100644
index 1ceb8ab..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/GenericTraceModel.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Generic Trace Model</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel#getTraces <em>Traces</em>}</li>
- * </ul>
- *
- * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage#getGenericTraceModel()
- * @model
- * @generated
- */
-public interface GenericTraceModel extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Traces</b></em>' containment reference list.
-	 * The list contents are of type {@link org.eclipse.capra.GenericTraceMetaModel.RelatedTo}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Traces</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Traces</em>' containment reference list.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage#getGenericTraceModel_Traces()
-	 * @model containment="true"
-	 * @generated
-	 */
-	EList<RelatedTo> getTraces();
-
-} // GenericTraceModel
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/RelatedTo.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/RelatedTo.java
deleted file mode 100644
index 23d8c2a..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/RelatedTo.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Related To</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericTraceMetaModel.RelatedTo#getItem <em>Item</em>}</li>
- * </ul>
- *
- * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage#getRelatedTo()
- * @model
- * @generated
- */
-public interface RelatedTo extends EObject {
-	/**
-	 * Returns the value of the '<em><b>Item</b></em>' reference list.
-	 * The list contents are of type {@link org.eclipse.emf.ecore.EObject}.
-	 * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Item</em>' reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-	 * @return the value of the '<em>Item</em>' reference list.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage#getRelatedTo_Item()
-	 * @model
-	 * @generated
-	 */
-	EList<EObject> getItem();
-
-} // RelatedTo
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceMetaModelFactoryImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceMetaModelFactoryImpl.java
deleted file mode 100644
index 1a7c01e..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceMetaModelFactoryImpl.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel.impl;
-
-import org.eclipse.capra.GenericTraceMetaModel.*;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-
-import org.eclipse.emf.ecore.impl.EFactoryImpl;
-
-import org.eclipse.emf.ecore.plugin.EcorePlugin;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Factory</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class GenericTraceMetaModelFactoryImpl extends EFactoryImpl implements GenericTraceMetaModelFactory {
-	/**
-	 * Creates the default factory implementation.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public static GenericTraceMetaModelFactory init() {
-		try {
-			GenericTraceMetaModelFactory theGenericTraceMetaModelFactory = (GenericTraceMetaModelFactory)EPackage.Registry.INSTANCE.getEFactory(GenericTraceMetaModelPackage.eNS_URI);
-			if (theGenericTraceMetaModelFactory != null) {
-				return theGenericTraceMetaModelFactory;
-			}
-		}
-		catch (Exception exception) {
-			EcorePlugin.INSTANCE.log(exception);
-		}
-		return new GenericTraceMetaModelFactoryImpl();
-	}
-
-	/**
-	 * Creates an instance of the factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericTraceMetaModelFactoryImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public EObject create(EClass eClass) {
-		switch (eClass.getClassifierID()) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL: return createGenericTraceModel();
-			case GenericTraceMetaModelPackage.RELATED_TO: return createRelatedTo();
-			default:
-				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
-		}
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericTraceModel createGenericTraceModel() {
-		GenericTraceModelImpl genericTraceModel = new GenericTraceModelImpl();
-		return genericTraceModel;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public RelatedTo createRelatedTo() {
-		RelatedToImpl relatedTo = new RelatedToImpl();
-		return relatedTo;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericTraceMetaModelPackage getGenericTraceMetaModelPackage() {
-		return (GenericTraceMetaModelPackage)getEPackage();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @deprecated
-	 * @generated
-	 */
-	@Deprecated
-	public static GenericTraceMetaModelPackage getPackage() {
-		return GenericTraceMetaModelPackage.eINSTANCE;
-	}
-
-} //GenericTraceMetaModelFactoryImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceMetaModelPackageImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceMetaModelPackageImpl.java
deleted file mode 100644
index b1c09a7..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceMetaModelPackageImpl.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel.impl;
-
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelFactory;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel;
-import org.eclipse.capra.GenericTraceMetaModel.RelatedTo;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EcorePackage;
-
-import org.eclipse.emf.ecore.impl.EPackageImpl;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Package</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class GenericTraceMetaModelPackageImpl extends EPackageImpl implements GenericTraceMetaModelPackage {
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass genericTraceModelEClass = null;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private EClass relatedToEClass = null;
-
-	/**
-	 * Creates an instance of the model <b>Package</b>, registered with
-	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
-	 * package URI value.
-	 * <p>Note: the correct way to create the package is via the static
-	 * factory method {@link #init init()}, which also performs
-	 * initialization of the package, or returns the registered package,
-	 * if one already exists.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see org.eclipse.emf.ecore.EPackage.Registry
-	 * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage#eNS_URI
-	 * @see #init()
-	 * @generated
-	 */
-	private GenericTraceMetaModelPackageImpl() {
-		super(eNS_URI, GenericTraceMetaModelFactory.eINSTANCE);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private static boolean isInited = false;
-
-	/**
-	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
-	 * 
-	 * <p>This method is used to initialize {@link GenericTraceMetaModelPackage#eINSTANCE} when that field is accessed.
-	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #eNS_URI
-	 * @see #createPackageContents()
-	 * @see #initializePackageContents()
-	 * @generated
-	 */
-	public static GenericTraceMetaModelPackage init() {
-		if (isInited) return (GenericTraceMetaModelPackage)EPackage.Registry.INSTANCE.getEPackage(GenericTraceMetaModelPackage.eNS_URI);
-
-		// Obtain or create and register package
-		GenericTraceMetaModelPackageImpl theGenericTraceMetaModelPackage = (GenericTraceMetaModelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof GenericTraceMetaModelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new GenericTraceMetaModelPackageImpl());
-
-		isInited = true;
-
-		// Initialize simple dependencies
-		EcorePackage.eINSTANCE.eClass();
-
-		// Create package meta-data objects
-		theGenericTraceMetaModelPackage.createPackageContents();
-
-		// Initialize created meta-data
-		theGenericTraceMetaModelPackage.initializePackageContents();
-
-		// Mark meta-data to indicate it can't be changed
-		theGenericTraceMetaModelPackage.freeze();
-
-  
-		// Update the registry and return the package
-		EPackage.Registry.INSTANCE.put(GenericTraceMetaModelPackage.eNS_URI, theGenericTraceMetaModelPackage);
-		return theGenericTraceMetaModelPackage;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EClass getGenericTraceModel() {
-		return genericTraceModelEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getGenericTraceModel_Traces() {
-		return (EReference)genericTraceModelEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EClass getRelatedTo() {
-		return relatedToEClass;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EReference getRelatedTo_Item() {
-		return (EReference)relatedToEClass.getEStructuralFeatures().get(0);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericTraceMetaModelFactory getGenericTraceMetaModelFactory() {
-		return (GenericTraceMetaModelFactory)getEFactoryInstance();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private boolean isCreated = false;
-
-	/**
-	 * Creates the meta-model objects for the package.  This method is
-	 * guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void createPackageContents() {
-		if (isCreated) return;
-		isCreated = true;
-
-		// Create classes and their features
-		genericTraceModelEClass = createEClass(GENERIC_TRACE_MODEL);
-		createEReference(genericTraceModelEClass, GENERIC_TRACE_MODEL__TRACES);
-
-		relatedToEClass = createEClass(RELATED_TO);
-		createEReference(relatedToEClass, RELATED_TO__ITEM);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	private boolean isInitialized = false;
-
-	/**
-	 * Complete the initialization of the package and its meta-model.  This
-	 * method is guarded to have no affect on any invocation but its first.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public void initializePackageContents() {
-		if (isInitialized) return;
-		isInitialized = true;
-
-		// Initialize package
-		setName(eNAME);
-		setNsPrefix(eNS_PREFIX);
-		setNsURI(eNS_URI);
-
-		// Obtain other dependent packages
-		EcorePackage theEcorePackage = (EcorePackage)EPackage.Registry.INSTANCE.getEPackage(EcorePackage.eNS_URI);
-
-		// Create type parameters
-
-		// Set bounds for type parameters
-
-		// Add supertypes to classes
-
-		// Initialize classes, features, and operations; add parameters
-		initEClass(genericTraceModelEClass, GenericTraceModel.class, "GenericTraceModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getGenericTraceModel_Traces(), this.getRelatedTo(), null, "traces", null, 0, -1, GenericTraceModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-		initEClass(relatedToEClass, RelatedTo.class, "RelatedTo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getRelatedTo_Item(), theEcorePackage.getEObject(), null, "item", null, 0, -1, RelatedTo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-		// Create resource
-		createResource(eNS_URI);
-	}
-
-} //GenericTraceMetaModelPackageImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceModelImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceModelImpl.java
deleted file mode 100644
index a4a0695..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/GenericTraceModelImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel.impl;
-
-import java.util.Collection;
-
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel;
-import org.eclipse.capra.GenericTraceMetaModel.RelatedTo;
-
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
-import org.eclipse.emf.ecore.util.EObjectContainmentEList;
-import org.eclipse.emf.ecore.util.InternalEList;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Generic Trace Model</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericTraceMetaModel.impl.GenericTraceModelImpl#getTraces <em>Traces</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class GenericTraceModelImpl extends MinimalEObjectImpl.Container implements GenericTraceModel {
-	/**
-	 * The cached value of the '{@link #getTraces() <em>Traces</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getTraces()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<RelatedTo> traces;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected GenericTraceModelImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return GenericTraceMetaModelPackage.Literals.GENERIC_TRACE_MODEL;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<RelatedTo> getTraces() {
-		if (traces == null) {
-			traces = new EObjectContainmentEList<RelatedTo>(RelatedTo.class, this, GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL__TRACES);
-		}
-		return traces;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL__TRACES:
-				return ((InternalEList<?>)getTraces()).basicRemove(otherEnd, msgs);
-		}
-		return super.eInverseRemove(otherEnd, featureID, msgs);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL__TRACES:
-				return getTraces();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL__TRACES:
-				getTraces().clear();
-				getTraces().addAll((Collection<? extends RelatedTo>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL__TRACES:
-				getTraces().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL__TRACES:
-				return traces != null && !traces.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-} //GenericTraceModelImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/RelatedToImpl.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/RelatedToImpl.java
deleted file mode 100644
index 7fe9987..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/impl/RelatedToImpl.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel.impl;
-
-import java.util.Collection;
-
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage;
-import org.eclipse.capra.GenericTraceMetaModel.RelatedTo;
-
-import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
-import org.eclipse.emf.ecore.util.EObjectResolvingEList;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Related To</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.capra.GenericTraceMetaModel.impl.RelatedToImpl#getItem <em>Item</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class RelatedToImpl extends MinimalEObjectImpl.Container implements RelatedTo {
-	/**
-	 * The cached value of the '{@link #getItem() <em>Item</em>}' reference list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getItem()
-	 * @generated
-	 * @ordered
-	 */
-	protected EList<EObject> item;
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected RelatedToImpl() {
-		super();
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	protected EClass eStaticClass() {
-		return GenericTraceMetaModelPackage.Literals.RELATED_TO;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public EList<EObject> getItem() {
-		if (item == null) {
-			item = new EObjectResolvingEList<EObject>(EObject.class, this, GenericTraceMetaModelPackage.RELATED_TO__ITEM);
-		}
-		return item;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public Object eGet(int featureID, boolean resolve, boolean coreType) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.RELATED_TO__ITEM:
-				return getItem();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void eSet(int featureID, Object newValue) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.RELATED_TO__ITEM:
-				getItem().clear();
-				getItem().addAll((Collection<? extends EObject>)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public void eUnset(int featureID) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.RELATED_TO__ITEM:
-				getItem().clear();
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	@Override
-	public boolean eIsSet(int featureID) {
-		switch (featureID) {
-			case GenericTraceMetaModelPackage.RELATED_TO__ITEM:
-				return item != null && !item.isEmpty();
-		}
-		return super.eIsSet(featureID);
-	}
-
-} //RelatedToImpl
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/util/GenericTraceMetaModelAdapterFactory.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/util/GenericTraceMetaModelAdapterFactory.java
deleted file mode 100644
index 9545325..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/util/GenericTraceMetaModelAdapterFactory.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel.util;
-
-import org.eclipse.capra.GenericTraceMetaModel.*;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Adapter Factory</b> for the model.
- * It provides an adapter <code>createXXX</code> method for each class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage
- * @generated
- */
-public class GenericTraceMetaModelAdapterFactory extends AdapterFactoryImpl {
-	/**
-	 * The cached model package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected static GenericTraceMetaModelPackage modelPackage;
-
-	/**
-	 * Creates an instance of the adapter factory.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericTraceMetaModelAdapterFactory() {
-		if (modelPackage == null) {
-			modelPackage = GenericTraceMetaModelPackage.eINSTANCE;
-		}
-	}
-
-	/**
-	 * Returns whether this factory is applicable for the type of the object.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
-	 * <!-- end-user-doc -->
-	 * @return whether this factory is applicable for the type of the object.
-	 * @generated
-	 */
-	@Override
-	public boolean isFactoryForType(Object object) {
-		if (object == modelPackage) {
-			return true;
-		}
-		if (object instanceof EObject) {
-			return ((EObject)object).eClass().getEPackage() == modelPackage;
-		}
-		return false;
-	}
-
-	/**
-	 * The switch that delegates to the <code>createXXX</code> methods.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected GenericTraceMetaModelSwitch<Adapter> modelSwitch =
-		new GenericTraceMetaModelSwitch<Adapter>() {
-			@Override
-			public Adapter caseGenericTraceModel(GenericTraceModel object) {
-				return createGenericTraceModelAdapter();
-			}
-			@Override
-			public Adapter caseRelatedTo(RelatedTo object) {
-				return createRelatedToAdapter();
-			}
-			@Override
-			public Adapter defaultCase(EObject object) {
-				return createEObjectAdapter();
-			}
-		};
-
-	/**
-	 * Creates an adapter for the <code>target</code>.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param target the object to adapt.
-	 * @return the adapter for the <code>target</code>.
-	 * @generated
-	 */
-	@Override
-	public Adapter createAdapter(Notifier target) {
-		return modelSwitch.doSwitch((EObject)target);
-	}
-
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel <em>Generic Trace Model</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel
-	 * @generated
-	 */
-	public Adapter createGenericTraceModelAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.capra.GenericTraceMetaModel.RelatedTo <em>Related To</em>}'.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.capra.GenericTraceMetaModel.RelatedTo
-	 * @generated
-	 */
-	public Adapter createRelatedToAdapter() {
-		return null;
-	}
-
-	/**
-	 * Creates a new adapter for the default case.
-	 * <!-- begin-user-doc -->
-	 * This default implementation returns null.
-	 * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @generated
-	 */
-	public Adapter createEObjectAdapter() {
-		return null;
-	}
-
-} //GenericTraceMetaModelAdapterFactory
diff --git a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/util/GenericTraceMetaModelSwitch.java b/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/util/GenericTraceMetaModelSwitch.java
deleted file mode 100644
index 8546fe7..0000000
--- a/org.eclipse.capra.generic.tracemodels/src-gen/org/eclipse/capra/GenericTraceMetaModel/util/GenericTraceMetaModelSwitch.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- */
-package org.eclipse.capra.GenericTraceMetaModel.util;
-
-import org.eclipse.capra.GenericTraceMetaModel.*;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-
-import org.eclipse.emf.ecore.util.Switch;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Switch</b> for the model's inheritance hierarchy.
- * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
- * to invoke the <code>caseXXX</code> method for each class of the model,
- * starting with the actual class of the object
- * and proceeding up the inheritance hierarchy
- * until a non-null result is returned,
- * which is the result of the switch.
- * <!-- end-user-doc -->
- * @see org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage
- * @generated
- */
-public class GenericTraceMetaModelSwitch<T> extends Switch<T> {
-	/**
-	 * The cached model package
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected static GenericTraceMetaModelPackage modelPackage;
-
-	/**
-	 * Creates an instance of the switch.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public GenericTraceMetaModelSwitch() {
-		if (modelPackage == null) {
-			modelPackage = GenericTraceMetaModelPackage.eINSTANCE;
-		}
-	}
-
-	/**
-	 * Checks whether this is a switch for the given package.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @param ePackage the package in question.
-	 * @return whether this is a switch for the given package.
-	 * @generated
-	 */
-	@Override
-	protected boolean isSwitchFor(EPackage ePackage) {
-		return ePackage == modelPackage;
-	}
-
-	/**
-	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
-	 * @generated
-	 */
-	@Override
-	protected T doSwitch(int classifierID, EObject theEObject) {
-		switch (classifierID) {
-			case GenericTraceMetaModelPackage.GENERIC_TRACE_MODEL: {
-				GenericTraceModel genericTraceModel = (GenericTraceModel)theEObject;
-				T result = caseGenericTraceModel(genericTraceModel);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			case GenericTraceMetaModelPackage.RELATED_TO: {
-				RelatedTo relatedTo = (RelatedTo)theEObject;
-				T result = caseRelatedTo(relatedTo);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
-			default: return defaultCase(theEObject);
-		}
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Generic Trace Model</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Generic Trace Model</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseGenericTraceModel(GenericTraceModel object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>Related To</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>Related To</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-	public T caseRelatedTo(RelatedTo object) {
-		return null;
-	}
-
-	/**
-	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
-	 * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch, but this is the last case anyway.
-	 * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
-	 * @generated
-	 */
-	@Override
-	public T defaultCase(EObject object) {
-		return null;
-	}
-
-} //GenericTraceMetaModelSwitch
diff --git a/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericArtifactMetaModelAdapter.java b/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericArtifactMetaModelAdapter.java
deleted file mode 100644
index a5eadcd..0000000
--- a/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericArtifactMetaModelAdapter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.generic.tracemodels;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer;
-import org.eclipse.capra.GenericArtifactMetaModel.GenericArtifactMetaModelFactory;
-import org.eclipse.capra.core.adapters.AbstractArtifactMetaModelAdapter;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Provides generic functionality to deal with artifact meta models.
- */
-public class GenericArtifactMetaModelAdapter extends AbstractArtifactMetaModelAdapter {
-
-	private ArtifactWrapperContainer getContainer(EObject artifactModel) {
-		return (ArtifactWrapperContainer) artifactModel;
-	}
-
-	@Override
-	public EObject createModel() {
-		return GenericArtifactMetaModelFactory.eINSTANCE.createArtifactWrapperContainer();
-	}
-
-	public EObject getArtifact(EObject artifactModel, String artifactHandler, String artifactUri) {
-		ArtifactWrapperContainer container = getContainer(artifactModel);
-		for (ArtifactWrapper artifact : container.getArtifacts()) {
-			if (getArtifactHandler(artifact).equals(artifactHandler) && getArtifactUri(artifact).equals(artifactUri))
-				return artifact;
-		}
-		return null;
-	}
-
-	@Override
-	public EObject createArtifact(EObject artifactModel, String artifactHandler, String artifactUri,
-			String artifactName) {
-		ArtifactWrapperContainer container = getContainer(artifactModel);
-		EObject existingWrapper = getArtifact(artifactModel, artifactHandler, artifactUri);
-		if (existingWrapper != null)
-			return existingWrapper;
-
-		ArtifactWrapper wrapper = GenericArtifactMetaModelFactory.eINSTANCE.createArtifactWrapper();
-		wrapper.setArtifactHandler(artifactHandler);
-		wrapper.setUri(artifactUri);
-		wrapper.setName(artifactName);
-		container.getArtifacts().add(wrapper);
-
-		return wrapper;
-	}
-
-	@Override
-	public String getArtifactHandler(EObject artifact) {
-		if (artifact instanceof ArtifactWrapper) {
-			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
-			return wrapper.getArtifactHandler();
-		}
-		return null;
-	}
-
-	@Override
-	public String getArtifactName(EObject artifact) {
-		if (artifact instanceof ArtifactWrapper) {
-			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
-			return wrapper.getName();
-		}
-		return null;
-	}
-
-	@Override
-	public String getArtifactUri(EObject artifact) {
-		if (artifact instanceof ArtifactWrapper) {
-			ArtifactWrapper wrapper = (ArtifactWrapper) artifact;
-			return wrapper.getUri();
-		}
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java b/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
deleted file mode 100644
index a4e152a..0000000
--- a/org.eclipse.capra.generic.tracemodels/src/org/eclipse/capra/generic/tracemodels/GenericMetaModelAdapter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.generic.tracemodels;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelFactory;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel;
-import org.eclipse.capra.GenericTraceMetaModel.RelatedTo;
-import org.eclipse.capra.core.adapters.Connection;
-import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Provides generic functionality to deal with traceability meta models.
- */
-public class GenericMetaModelAdapter implements TraceMetaModelAdapter {
-
-	public GenericMetaModelAdapter() {
-		// TODO Auto-generated constructor stub
-	}
-
-	@Override
-	public EObject createModel() {
-		return GenericTraceMetaModelFactory.eINSTANCE.createGenericTraceModel();
-	}
-
-	@Override
-	public Collection<EClass> getAvailableTraceTypes(List<EObject> selection) {
-		Collection<EClass> traceTypes = new ArrayList<>();
-		if (selection.size() > 1) {
-
-			traceTypes.add(GenericTraceMetaModelPackage.eINSTANCE.getRelatedTo());
-		}
-		return traceTypes;
-	}
-
-	@Override
-	public EObject createTrace(EClass traceType, EObject traceModel, List<EObject> selection) {
-
-		GenericTraceModel TM = (GenericTraceModel) traceModel;
-		EObject trace = GenericTraceMetaModelFactory.eINSTANCE.create(traceType);
-		RelatedTo RelatedToTrace = (RelatedTo) trace;
-		RelatedToTrace.getItem().addAll(selection);
-
-		TM.getTraces().add(RelatedToTrace);
-		return TM;
-	}
-
-	@Override
-	public void deleteTrace(EObject first, EObject second, EObject traceModel) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean isThereATraceBetween(EObject firstElement, EObject secondElement, EObject traceModel) {
-		GenericTraceModel root = (GenericTraceModel) traceModel;
-		List<RelatedTo> traces = root.getTraces();
-		for (RelatedTo trace : traces) {
-			if (firstElement != secondElement) {
-				return trace.getItem().contains(firstElement) && trace.getItem().contains(secondElement);
-			}
-		}
-		return false;
-	}
-
-	@Override
-	public List<Connection> getConnectedElements(EObject element, EObject tracemodel) {
-		GenericTraceModel root = (GenericTraceModel) tracemodel;
-		List<Connection> connections = new ArrayList<>();
-		List<RelatedTo> traces = root.getTraces();
-
-		if (element instanceof RelatedTo) {
-			RelatedTo trace = (RelatedTo) element;
-			connections.add(new Connection(element, trace.getItem(), trace));
-		} else {
-
-			for (RelatedTo trace : traces) {
-				if (trace.getItem().contains(element)) {
-					connections.add(new Connection(element, trace.getItem(), trace));
-				}
-			}
-		}
-		return connections;
-	}
-
-	private List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel,
-			List<Object> accumulator) {
-		List<Connection> directElements = getConnectedElements(element, traceModel);
-		List<Connection> allElements = new ArrayList<>();
-
-		directElements.forEach(connection -> {
-			if (!accumulator.contains(connection.getTlink())) {
-				allElements.add(connection);
-				accumulator.add(connection.getTlink());
-				connection.getTargets().forEach(e -> {
-					allElements.addAll(getTransitivelyConnectedElements(e, traceModel, accumulator));
-				});
-			}
-		});
-
-		return allElements;
-	}
-
-	@Override
-	public List<Connection> getTransitivelyConnectedElements(EObject element, EObject traceModel) {
-		List<Object> accumulator = new ArrayList<>();
-		return getTransitivelyConnectedElements(element, traceModel, accumulator);
-	}
-
-}
diff --git a/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
deleted file mode 100644
index 510cded..0000000
--- a/org.eclipse.capra.handler.cdt/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: CDThandler
-Bundle-SymbolicName: org.eclipse.capra.handler.cdt;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Bundle-Vendor: rt-labs.com
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.cdt.core,
- org.eclipse.capra.core;bundle-version="0.7.0",
- org.eclipse.core.runtime
-Export-Package: org.eclipse.capra.handler.cdt
diff --git a/org.eclipse.capra.handler.cdt/build.properties b/org.eclipse.capra.handler.cdt/build.properties
deleted file mode 100644
index 3960f18..0000000
--- a/org.eclipse.capra.handler.cdt/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.cdt/plugin.xml b/org.eclipse.capra.handler.cdt/plugin.xml
deleted file mode 100644
index 2aa79b1..0000000
--- a/org.eclipse.capra.handler.cdt/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.cdt.CDTHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.cdt.CDTHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.cdt/pom.xml b/org.eclipse.capra.handler.cdt/pom.xml
deleted file mode 100644
index f8397af..0000000
--- a/org.eclipse.capra.handler.cdt/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.cdt</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java b/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
deleted file mode 100644
index 8657e19..0000000
--- a/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.cdt;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.model.ICElement;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Handler to allow tracing to and from elements of C such as files and
- * functions. Uses CDT as the foundation.
- */
-public class CDTHandler implements ArtifactHandler {
-
-	@Override
-	public boolean canHandleSelection(Object selection) {
-		return selection instanceof ICElement;
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		ICElement cu = (ICElement) selection;
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), cu.getHandleIdentifier(),
-				cu.getElementName());
-		return wrapper;
-	}
-
-	@Override
-	public ICElement resolveArtifact(EObject artifact) {
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		String uri = adapter.getArtifactUri(artifact);
-		return CoreModel.create(uri);
-	}
-
-}
diff --git a/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
deleted file mode 100644
index e5b7463..0000000
--- a/org.eclipse.capra.handler.emf/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,8 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: EMFHandler
-Bundle-SymbolicName: org.eclipse.capra.handler.emf;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.emf.ecore,
- org.eclipse.capra.core;bundle-version="0.7.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.handler.emf/build.properties b/org.eclipse.capra.handler.emf/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.handler.emf/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.emf/plugin.xml b/org.eclipse.capra.handler.emf/plugin.xml
deleted file mode 100644
index 76edd61..0000000
--- a/org.eclipse.capra.handler.emf/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.emf.EMFHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.emf.EMFHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.emf/pom.xml b/org.eclipse.capra.handler.emf/pom.xml
deleted file mode 100644
index 97505b2..0000000
--- a/org.eclipse.capra.handler.emf/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.emf</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java b/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
deleted file mode 100644
index e4ae209..0000000
--- a/org.eclipse.capra.handler.emf/src/org/eclipse/capra/handler/emf/EMFHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.emf;
-
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Handler to allow tracing to and from arbitrary model elements handled by EMF.
- */
-public class EMFHandler implements ArtifactHandler {
-
-	public boolean canHandleSelection(Object selection) {
-		return selection instanceof EObject;
-
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		return EObject.class.cast(selection);
-	}
-
-	@Override
-	public Object resolveArtifact(EObject artifact) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
diff --git a/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
deleted file mode 100644
index c69ee1a..0000000
--- a/org.eclipse.capra.handler.file/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: IFilehandler
-Bundle-SymbolicName: org.eclipse.capra.handler.file;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.core.resources,
- org.eclipse.emf.ecore,
- org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.capra.core;bundle-version="0.7.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.handler.file/build.properties b/org.eclipse.capra.handler.file/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.handler.file/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.file/plugin.xml b/org.eclipse.capra.handler.file/plugin.xml
deleted file mode 100644
index fdc7050..0000000
--- a/org.eclipse.capra.handler.file/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.file.IFileHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.file.IFileHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.file/pom.xml b/org.eclipse.capra.handler.file/pom.xml
deleted file mode 100644
index 978327e..0000000
--- a/org.eclipse.capra.handler.file/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.file</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java b/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
deleted file mode 100644
index 59593d2..0000000
--- a/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.file;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Handler to allow tracing to and from arbitrary files in the file system.
- */
-public class IFileHandler implements ArtifactHandler {
-
-	@Override
-	public boolean canHandleSelection(Object selection) {
-		return selection instanceof IFile;
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		IFile selectionAsFile = (IFile) selection;
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(),
-				selectionAsFile.getFullPath().toString(), selectionAsFile.getName());
-		return wrapper;
-	}
-
-	@Override
-	public Object resolveArtifact(EObject artifact) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
diff --git a/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
deleted file mode 100644
index f62e158..0000000
--- a/org.eclipse.capra.handler.gef/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Capella
-Bundle-SymbolicName: org.eclipse.capra.handler.gef;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.capra.core,
- org.eclipse.papyrus.infra.gmfdiag.css;bundle-version="1.1.4",
- org.eclipse.papyrus.infra.emf;bundle-version="1.1.4",
- org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.8.0"
-Import-Package: org.eclipse.capra.ui.helpers
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.handler.gef/build.properties b/org.eclipse.capra.handler.gef/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.handler.gef/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.gef/plugin.xml b/org.eclipse.capra.handler.gef/plugin.xml
deleted file mode 100644
index 632a978..0000000
--- a/org.eclipse.capra.handler.gef/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.gef.GEFHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.gef.GEFHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.gef/pom.xml b/org.eclipse.capra.handler.gef/pom.xml
deleted file mode 100644
index 4a4a593..0000000
--- a/org.eclipse.capra.handler.gef/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.gef</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java b/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
deleted file mode 100644
index b0ec0e8..0000000
--- a/org.eclipse.capra.handler.gef/src/org/eclipse/capra/handler/gef/GEFHandler.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.gef;
-
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gef.EditPart;
-import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
-
-/**
- * Handler to allow tracing to and from visual model representations handled by
- * editors built with GEF.
- */
-public class GEFHandler implements ArtifactHandler {
-
-	@Override
-	public boolean canHandleSelection(Object selection) {
-		// TODO Auto-generated method stub
-		return selection instanceof EditPart;
-
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		// TODO Auto-generated method stub
-		EditPart sel = (EditPart) selection;
-
-		return EMFHelper.getEObject(sel);
-
-	}
-
-	@Override
-	public Object resolveArtifact(EObject artifact) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
deleted file mode 100644
index dbeb382..0000000
--- a/org.eclipse.capra.handler.hudson/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Hudsonhandler
-Bundle-SymbolicName: org.eclipse.capra.handler.hudson;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.mylyn.hudson.core;bundle-version="1.9.0",
- org.eclipse.mylyn.builds.core;bundle-version="1.9.0",
- org.eclipse.capra.core;bundle-version="0.7.0"
-Export-Package: org.eclipse.capra.handler.hudson
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.handler.hudson/build.properties b/org.eclipse.capra.handler.hudson/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.handler.hudson/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.hudson/plugin.xml b/org.eclipse.capra.handler.hudson/plugin.xml
deleted file mode 100644
index 0443889..0000000
--- a/org.eclipse.capra.handler.hudson/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.hudson.HudsonHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.hudson.HudsonHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.hudson/pom.xml b/org.eclipse.capra.handler.hudson/pom.xml
deleted file mode 100644
index a61b3ad..0000000
--- a/org.eclipse.capra.handler.hudson/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.hudson</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/HudsonHandler.java b/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/HudsonHandler.java
deleted file mode 100644
index 18d064d..0000000
--- a/org.eclipse.capra.handler.hudson/src/org/eclipse/capra/handler/hudson/HudsonHandler.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.hudson;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.mylyn.builds.internal.core.BuildElement;
-import org.eclipse.mylyn.builds.internal.core.TestElement;
-
-/**
- * A handler to allow tracing to and from elements handled by the continuous
- * integration server Hudson via the integrated Mylyn facilities. In particular,
- * it is possible to trace to tests and to builds.
- */
-public class HudsonHandler implements ArtifactHandler {
-
-	@Override
-	public boolean canHandleSelection(Object selection) {
-		return (selection instanceof TestElement || selection instanceof BuildElement);
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		if (selection instanceof TestElement) {
-			TestElement test = (TestElement) selection;
-
-			// TODO Need to get the URI for where the test is
-			EObject testWrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), test.getLabel(),
-					test.getLabel());
-			return testWrapper;
-		} else if (selection instanceof BuildElement) {
-			BuildElement build = (BuildElement) selection;
-
-			EObject buildWrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), build.getUrl(),
-					build.getLabel());
-			return buildWrapper;
-		}
-
-		return null;
-	}
-
-	@Override
-	public Object resolveArtifact(EObject artifact) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
deleted file mode 100644
index cd37bd5..0000000
--- a/org.eclipse.capra.handler.jdt/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: JavaHandler
-Bundle-SymbolicName: org.eclipse.capra.handler.jdt;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.jdt.core,
- org.eclipse.capra.core;bundle-version="0.7.0",
- org.eclipse.emf.ecore
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.capra.handler.jdt
diff --git a/org.eclipse.capra.handler.jdt/build.properties b/org.eclipse.capra.handler.jdt/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.handler.jdt/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.jdt/plugin.xml b/org.eclipse.capra.handler.jdt/plugin.xml
deleted file mode 100644
index 749a9a4..0000000
--- a/org.eclipse.capra.handler.jdt/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.jdt.JavaElementHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.jdt.JavaElementHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.jdt/pom.xml b/org.eclipse.capra.handler.jdt/pom.xml
deleted file mode 100644
index 1527bcf..0000000
--- a/org.eclipse.capra.handler.jdt/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.jdt</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java b/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
deleted file mode 100644
index 45e0d08..0000000
--- a/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.jdt;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.JavaCore;
-
-/**
- * A handler to allow creating traces to and from java elements such as classes
- * and methods based on JDT.
- */
-public class JavaElementHandler implements ArtifactHandler {
-
-	@Override
-	public boolean canHandleSelection(Object selection) {
-		if (selection instanceof IJavaElement) {
-			return true;
-		}
-
-		return false;
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		IJavaElement cu = (IJavaElement) selection;
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), cu.getHandleIdentifier(),
-				cu.getElementName());
-		return wrapper;
-	}
-
-	@Override
-	public IJavaElement resolveArtifact(EObject artifact) {
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		String uri = adapter.getArtifactUri(artifact);
-		return JavaCore.create(uri);
-	}
-
-}
diff --git a/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
deleted file mode 100644
index 56014c1..0000000
--- a/org.eclipse.capra.handler.mylyn/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,8 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Mylynhandler
-Bundle-SymbolicName: org.eclipse.capra.handler.mylyn;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.mylyn.tasks.core;bundle-version="3.17.0",
- org.eclipse.capra.core;bundle-version="0.7.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.handler.mylyn/build.properties b/org.eclipse.capra.handler.mylyn/build.properties
deleted file mode 100644
index 9fc85e9..0000000
--- a/org.eclipse.capra.handler.mylyn/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.handler.mylyn/plugin.xml b/org.eclipse.capra.handler.mylyn/plugin.xml
deleted file mode 100644
index 2fab947..0000000
--- a/org.eclipse.capra.handler.mylyn/plugin.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         id="org.eclipse.capra.handler.mylyn.MylynHandler"
-         point="org.eclipse.capra.configuration.artifactHandler">
-      <artifactHandler
-            class="org.eclipse.capra.handler.mylyn.MylynHandler">
-      </artifactHandler>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.handler.mylyn/pom.xml b/org.eclipse.capra.handler.mylyn/pom.xml
deleted file mode 100644
index bb59f7c..0000000
--- a/org.eclipse.capra.handler.mylyn/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.mylyn</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java b/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
deleted file mode 100644
index ca851b2..0000000
--- a/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.handler.mylyn;
-
-import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.mylyn.tasks.core.ITask;
-
-/**
- * A handler to allow tracing from and to tasks handled by Mylyn.
- */
-public class MylynHandler implements ArtifactHandler {
-
-	@Override
-	public boolean canHandleSelection(Object selection) {
-		return selection instanceof ITask;
-	}
-
-	@Override
-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {
-		ITask task = (ITask) selection;
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
-		EObject wrapper = adapter.createArtifact(artifactModel, this.getClass().getName(), task.getUrl(),
-				task.getSummary());
-		return wrapper;
-	}
-
-	@Override
-	public Object resolveArtifact(EObject artifact) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF b/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
deleted file mode 100644
index 17cd354..0000000
--- a/org.eclipse.capra.handler.papyrus/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Papyrushandler
-Bundle-SymbolicName: org.eclipse.capra.handler.papyrus;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.capra.core,
- org.eclipse.capra.ui,
- org.eclipse.emf.ecore,
- org.eclipse.papyrus.emf.facet.custom.metamodel;bundle-version="1.1.4"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.handler.papyrus/build.properties b/org.eclipse.capra.handler.papyrus/build.properties
deleted file mode 100644
index a638415..0000000
--- a/org.eclipse.capra.handler.papyrus/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################

-# Copyright (c) 2016 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 v1.0

-# which accompanies this distribution, and is available at

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

-#  

-#   Contributors:

-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation

-###############################################################################

-source.. = src/

-bin.includes = META-INF/,\

-               .,\

-               plugin.xml

diff --git a/org.eclipse.capra.handler.papyrus/plugin.xml b/org.eclipse.capra.handler.papyrus/plugin.xml
deleted file mode 100644
index 1517fa1..0000000
--- a/org.eclipse.capra.handler.papyrus/plugin.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<?eclipse version="3.4"?>

-<!--

-    Copyright (c) 2016 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 v1.0

-    which accompanies this distribution, and is available at

-    http://www.eclipse.org/legal/epl-v10.html

-     

-      Contributors:

-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation

- -->

-
-<plugin>

-	<extension

-       id="org.eclipse.capra.handler.papyrus.PapyrusHandler"

-       point="org.eclipse.capra.configuration.artifactHandler">

-	  	<artifactHandler

-	    	class="org.eclipse.capra.handler.papyrus.PapyrusHandler">

-	  	</artifactHandler>

-	</extension>

-</plugin>

diff --git a/org.eclipse.capra.handler.papyrus/pom.xml b/org.eclipse.capra.handler.papyrus/pom.xml
deleted file mode 100644
index 4b36e92..0000000
--- a/org.eclipse.capra.handler.papyrus/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.handler.papyrus</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java b/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
deleted file mode 100644
index d8de348..0000000
--- a/org.eclipse.capra.handler.papyrus/src/org/eclipse/capra/handler/papyrus/PapyrusHandler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************

- * Copyright (c) 2016 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 v1.0

- * which accompanies this distribution, and is available at

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

- *  

- *   Contributors:

- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation

- *******************************************************************************/

-package org.eclipse.capra.handler.papyrus;

-

-import org.eclipse.capra.core.handlers.ArtifactHandler;

-import org.eclipse.emf.ecore.EObject;

-import org.eclipse.papyrus.emf.facet.custom.metamodel.v0_2_0.internal.treeproxy.TreeElement;

-

-/**

- * A handler to create trace links from and to model elements created in

- * Papyrus.

- */

-public class PapyrusHandler implements ArtifactHandler {

-

-	@Override

-	public boolean canHandleSelection(Object selection) {

-		return selection instanceof TreeElement;

-	}

-

-	@Override

-	public EObject getEObjectForSelection(Object selection, EObject artifactModel) {

-		// Returns the EObject corresponding to the input object if the input is

-		// an EObject, or if it is Adaptable to an EObject

-		return EObject.class.cast((TreeElement) selection);

-	}

-

-	@Override

-	public Object resolveArtifact(EObject artifact) {

-		// TODO Auto-generated method stub

-		return null;

-	}

-

-}

diff --git a/org.eclipse.capra.releng.p2/category.xml b/org.eclipse.capra.releng.p2/category.xml
deleted file mode 100644
index 72ddbdb..0000000
--- a/org.eclipse.capra.releng.p2/category.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<site>
-   <feature url="features/org.eclipse.capra.feature_0.7.0.qualifier.jar" id="org.eclipse.capra.feature" version="0.7.0.qualifier">
-      <category name="capra"/>
-   </feature>
-   <category-def name="capra" label="Capra"/>
-</site>
diff --git a/org.eclipse.capra.releng.p2/pom.xml b/org.eclipse.capra.releng.p2/pom.xml
deleted file mode 100644
index efb2469..0000000
--- a/org.eclipse.capra.releng.p2/pom.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-         xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <relativePath>../pom.xml</relativePath>
-    <groupId>org.eclipse.capra</groupId>
-    <artifactId>parent</artifactId>
-    <version>0.7.0-SNAPSHOT</version>
-  </parent>
-  <groupId>org.eclipse.capra</groupId>
-  <artifactId>org.eclipse.capra.p2</artifactId>
-  <version>0.7.0-SNAPSHOT</version>
-  <packaging>eclipse-repository</packaging>
-  <name>Capra update site</name>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.eclipse.tycho</groupId>
-        <artifactId>tycho-p2-repository-plugin</artifactId>
-        <version>${tycho-version}</version>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/org.eclipse.capra.releng.target/.project b/org.eclipse.capra.releng.target/.project
deleted file mode 100644
index 6133844..0000000
--- a/org.eclipse.capra.releng.target/.project
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.capra.releng.target</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-	</buildSpec>
-	<natures>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target b/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target
deleted file mode 100644
index da01975..0000000
--- a/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Neon" sequenceNumber="26">
-<locations>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.sdk.ide" version="0.0.0"/>
-<repository location="http://download.eclipse.org/eclipse/updates/4.6"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="com.google.guava" version="0.0.0"/>
-<unit id="com.google.guava.source" version="0.0.0"/>
-<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="org.eclipse.xtext.sdk.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn.ide_feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn.git.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn.trac_feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.cdt.sdk.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn.team_feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn_feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn.wikitext_feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.cdt.mylyn.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.emf.sdk.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.emf.emfstore.sdk.feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.zest.sdk.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.mylyn.hudson.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.emf.ecp.emfforms.sdk.feature.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.gef.sdk.feature.group" version="0.0.0"/>
-<unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="0.0.0"/>
-<repository location="http://download.eclipse.org/releases/neon"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.mylyn.github.feature.feature.group" version="0.0.0"/>
-<repository location="http://download.eclipse.org/egit/github/updates/"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="net.sourceforge.plantuml.feature.feature.group" version="0.0.0"/>
-<repository location="http://basar.idi.ntnu.no/svn/tdt4100/anonymous/trunk/updatesite"/>
-</location>
-</locations>
-<launcherArgs>
-</launcherArgs>
-</target>
diff --git a/org.eclipse.capra.releng.target/pom.xml b/org.eclipse.capra.releng.target/pom.xml
deleted file mode 100644
index f98b1cf..0000000
--- a/org.eclipse.capra.releng.target/pom.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <relativePath>../pom.xml</relativePath>
-    <groupId>org.eclipse.capra</groupId>
-    <artifactId>parent</artifactId>
-    <version>0.7.0-SNAPSHOT</version>
-  </parent>
-  <artifactId>org.eclipse.capra.releng.target</artifactId>
-  <packaging>eclipse-target-definition</packaging>
-  <name>Capra</name>
-</project>
diff --git a/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF b/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
deleted file mode 100644
index 4b710ac..0000000
--- a/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,23 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Testsuite
-Bundle-SymbolicName: org.eclipse.capra.testsuite
-Bundle-Version: 0.7.0.qualifier
-Export-Package: org.eclipse.capra.testsuite
-Require-Bundle: org.junit;bundle-version="4.12.0",
- org.eclipse.equinox.registry,
- org.eclipse.core.resources,
- org.eclipse.jdt.core,
- org.eclipse.jdt.launching,
- org.eclipse.emf.ecore,
- org.eclipse.ui.workbench,
- org.eclipse.capra.ui,
- org.eclipse.cdt.core,
- org.eclipse.capra.generic.tracemodels,
- org.eclipse.core.runtime;bundle-version="3.11.1",
- org.eclipse.core.commands;bundle-version="3.7.0",
- org.eclipse.capra.core,
- org.eclipse.capra.ui.plantuml,
- org.eclipse.capra.handler.jdt,
- org.eclipse.capra.handler.cdt
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.capra.testsuite/build.properties b/org.eclipse.capra.testsuite/build.properties
deleted file mode 100644
index a3a98ab..0000000
--- a/org.eclipse.capra.testsuite/build.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-#  Copyright (c) 2016 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 v1.0
-#  which accompanies this distribution, and is available at
-#  http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers|Gothenburg University and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .
diff --git a/org.eclipse.capra.testsuite/pom.xml b/org.eclipse.capra.testsuite/pom.xml
deleted file mode 100644
index f17b9ed..0000000
--- a/org.eclipse.capra.testsuite/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.testsuite</artifactId>
-	<packaging>eclipse-test-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
deleted file mode 100644
index 61f7539..0000000
--- a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2016 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 v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers|Gothenburg University and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.testsuite;
-
-import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
-import static org.eclipse.capra.testsuite.TestHelper.createCDTProject;
-import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
-import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
-import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
-import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
-import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
-import static org.eclipse.capra.testsuite.TestHelper.getProject;
-import static org.eclipse.capra.testsuite.TestHelper.load;
-import static org.eclipse.capra.testsuite.TestHelper.projectExists;
-import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
-import static org.eclipse.capra.testsuite.TestHelper.save;
-import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelPackage;
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jdt.core.IType;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestCreateTrace {
-
-	@Before
-	public void init() throws CoreException {
-		clearWorkspace();
-		resetSelectionView();
-	}
-
-	@Test
-	public void testLinkCreationEClassToEClass() throws CoreException, IOException {
-		// Create a project
-		createSimpleProject("TestProject");
-		assertTrue(projectExists("TestProject"));
-
-		// Create two models and persist them
-		IProject testProject = getProject("TestProject");
-		EPackage a = TestHelper.createEcoreModel("modelA");
-		createEClassInEPackage(a, "A");
-		save(testProject, a);
-
-		EPackage b = createEcoreModel("modelB");
-		createEClassInEPackage(b, "B");
-		save(testProject, b);
-
-		// Load them, choose two elements
-		ResourceSet rs = new ResourceSetImpl();
-
-		EPackage _a = load(testProject, "modelA.ecore", rs);
-		assertEquals(_a.getName(), "modelA");
-		EClass _A = (EClass) _a.getEClassifier("A");
-
-		EPackage _b = load(testProject, "modelB.ecore", rs);
-		assertEquals(_b.getName(), "modelB");
-		EClass _B = (EClass) _b.getEClassifier("B");
-
-		// Add them to the selection view
-		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
-		SelectionView.getOpenedView().dropToSelection(_A);
-		SelectionView.getOpenedView().dropToSelection(_B);
-		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
-
-		// Create a trace via the selection view
-		assertFalse(thereIsATraceBetween(_A, _B));
-		createTraceForCurrentSelectionOfType(GenericTraceMetaModelPackage.eINSTANCE.getRelatedTo());
-
-		// Check if trace has been created
-		assertTrue(thereIsATraceBetween(_A, _B));
-	}
-
-	@Test
-	public void testLinkCreationJavaEltToEClass() throws CoreException, IOException {
-		// Create a project
-		IType javaClass = createJavaProjectWithASingleJavaClass("TestProject");
-		assertTrue(projectExists("TestProject"));
-
-		// Create a model and persist
-		IProject testProject = getProject("TestProject");
-		EPackage a = TestHelper.createEcoreModel("modelA");
-		createEClassInEPackage(a, "A");
-		save(testProject, a);
-
-		// Choose the EClass
-		ResourceSet rs = new ResourceSetImpl();
-
-		EPackage _a = load(testProject, "modelA.ecore", rs);
-		assertEquals(_a.getName(), "modelA");
-		EClass _A = (EClass) _a.getEClassifier("A");
-
-		// Drop the EClass in the selection view
-		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
-		SelectionView.getOpenedView().dropToSelection(_A);
-
-		// Drop the JavaClass in the selection view
-		SelectionView.getOpenedView().dropToSelection(javaClass);
-
-		// Create a trace via the selection view
-		assertFalse(thereIsATraceBetween(_A, javaClass));
-		createTraceForCurrentSelectionOfType(GenericTraceMetaModelPackage.eINSTANCE.getRelatedTo());
-
-		// Check if trace has been created
-		assertTrue(thereIsATraceBetween(_A, javaClass));
-	}
-
-	@Test
-	public void testLinkCreationCElementToEClass() throws OperationCanceledException, CoreException, IOException {
-		// Create a project
-		ICProject cFile = createCDTProject("TestProject");
-		assertTrue(projectExists("TestProject"));
-
-		// Create a model and persist
-		IProject testProject = getProject("TestProject");
-		EPackage a = TestHelper.createEcoreModel("modelA");
-		createEClassInEPackage(a, "A");
-		save(testProject, a);
-
-		// Choose the EClass
-		ResourceSet rs = new ResourceSetImpl();
-
-		EPackage _a = load(testProject, "modelA.ecore", rs);
-		assertEquals(_a.getName(), "modelA");
-		EClass _A = (EClass) _a.getEClassifier("A");
-
-		// Drop the EClass in the selection view
-		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
-		SelectionView.getOpenedView().dropToSelection(_A);
-
-		// Drop the c File in the selection view
-		SelectionView.getOpenedView().dropToSelection(cFile);
-
-		// Create a trace via the selection view
-		assertFalse(thereIsATraceBetween(_A, cFile));
-		createTraceForCurrentSelectionOfType(GenericTraceMetaModelPackage.eINSTANCE.getRelatedTo());
-
-		// Check if trace has been created
-		assertTrue(thereIsATraceBetween(_A, cFile));
-	}
-
-}
diff --git a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java
deleted file mode 100644
index c700071..0000000
--- a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2016 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 v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers|Gothenburg University and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.testsuite;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel;
-import org.eclipse.capra.GenericTraceMetaModel.RelatedTo;
-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.helpers.ExtensionPointHelper;
-import org.eclipse.capra.handler.cdt.CDTHandler;
-import org.eclipse.capra.handler.jdt.JavaElementHandler;
-import org.eclipse.capra.ui.handlers.TraceCreationHandler;
-import org.eclipse.capra.ui.plantuml.DisplayTracesHandler;
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jdt.launching.LibraryLocation;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-
-
-public class TestHelper {
-
-	public static void createSimpleProject(String projectName) throws CoreException {
-		IProject project = getProject(projectName);
-
-		IProgressMonitor progressMonitor = new NullProgressMonitor();
-		project.create(progressMonitor);
-		project.open(progressMonitor);
-	}
-
-	public static IType createJavaProjectWithASingleJavaClass(String projectName) throws CoreException {
-		IProject project = getProject(projectName);
-
-		// Create project
-		IProgressMonitor progressMonitor = new NullProgressMonitor();
-		project.create(progressMonitor);
-		project.open(progressMonitor);
-
-		// Add Java nature
-		IProjectDescription description = project.getDescription();
-		description.setNatureIds(new String[] { JavaCore.NATURE_ID });
-		project.setDescription(description, null);
-
-		// Create as Java project and set up build path etc.
-		IJavaProject javaProject = JavaCore.create(project);
-		IFolder binFolder = project.getFolder("bin");
-		binFolder.create(false, true, null);
-		javaProject.setOutputLocation(binFolder.getFullPath(), null);
-		List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
-		IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
-		LibraryLocation[] locations = JavaRuntime.getLibraryLocations(vmInstall);
-		for (LibraryLocation element : locations)
-			entries.add(JavaCore.newLibraryEntry(element.getSystemLibraryPath(), null, null));
-
-		javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
-
-		// Create a src file
-		IFolder sourceFolder = project.getFolder("src");
-		sourceFolder.create(false, true, null);
-		IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
-		IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
-		IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
-		System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
-		newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
-		javaProject.setRawClasspath(newEntries, null);
-
-		IPackageFragment pack = javaProject.getPackageFragmentRoot(sourceFolder)
-				.createPackageFragment("org.amalthea.test", false, null);
-
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("package " + pack.getElementName() + ";\n");
-		buffer.append("\n");
-		buffer.append("public class TestClass {}");
-
-		ICompilationUnit icu = pack.createCompilationUnit("TestClass.java", buffer.toString(), false, null);
-		return icu.getType("TestClass");
-	}
-
-	public static void clearWorkspace() throws CoreException {
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		for (IProject p : root.getProjects())
-			p.delete(true, new NullProgressMonitor());
-	}
-
-	public static boolean projectExists(String projectName) {
-		return getProject(projectName).exists();
-	}
-
-	public static IProject getProject(String projectName) {
-		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		return root.getProject(projectName);
-	}
-
-	public static EPackage createEcoreModel(String name) {
-		EPackage p = EcoreFactory.eINSTANCE.createEPackage();
-		p.setName(name);
-		return p;
-	}
-
-	public static void createEClassInEPackage(EPackage p, String name) {
-		EClass c = EcoreFactory.eINSTANCE.createEClass();
-		c.setName(name);
-		p.getEClassifiers().add(c);
-	}
-
-	public static void save(IProject project, EPackage pack) throws IOException {
-		ResourceSet rs = new ResourceSetImpl();
-		URI path = URI.createFileURI(project.getLocation().toString() + "/" + pack.getName() + ".ecore");
-		Resource r = rs.createResource(path);
-		r.getContents().add(pack);
-		r.save(null);
-	}
-
-	public static EPackage load(IProject project, String p, ResourceSet rs) throws IOException {
-		URI path = URI.createFileURI(project.getLocation().toString() + "/" + p);
-		return (EPackage) rs.getResource(path, true).getContents().get(0);
-	}
-
-	public static void createTraceForCurrentSelectionOfType(EClass traceType) {
-		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
-		TraceCreationHandler handler = new TraceCreationHandler();
-		handler.createTrace(window, (traceTypes, selection)
-		-> {
-			if (traceTypes.contains(traceType))
-				return Optional.of(traceType);
-			else
-				return Optional.empty();
-		});
-	}
-
-	public static boolean thereIsATraceBetween(EObject a, EObject b) {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		return traceAdapter.isThereATraceBetween(a, b,
-				persistenceAdapter.getTraceModel(a.eResource().getResourceSet()));
-	}
-
-	public static boolean thereIsATraceBetween(EObject a, IType b) {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-
-
-		List<Connection> connected = traceAdapter.getConnectedElements(a,
-				persistenceAdapter.getTraceModel(a.eResource().getResourceSet()));
-		
-		return connected.stream().filter(o -> {
-			List<EObject> objects = o.getTargets();
-			for(EObject obj:objects) {
-				if(obj instanceof ArtifactWrapper) {
-					ArtifactWrapper wrapper = (ArtifactWrapper) obj;
-					if ((wrapper.getArtifactHandler().equals(JavaElementHandler.class.getName()))) {
-						return (wrapper.getUri().equals(b.getHandleIdentifier()));
-					}
-				}
-			}
-
-			return false;
-		}).findAny().isPresent();
-
-	}
-
-	public static boolean thereIsATraceBetween(EObject a, ICProject b) {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-
-		List<Connection> connected = traceAdapter.getConnectedElements(a,
-				persistenceAdapter.getTraceModel(a.eResource().getResourceSet()));
-
-		return connected.stream().filter(o -> {
-			List<EObject> objects = o.getTargets();
-			for(EObject obj:objects) {
-				if(obj instanceof ArtifactWrapper) {
-					ArtifactWrapper wrapper = (ArtifactWrapper) obj;
-					if ((wrapper.getArtifactHandler().equals(CDTHandler.class.getName()))) {
-						return (wrapper.getUri().equals(b.getHandleIdentifier()));
-					}
-				}
-			}
-			return false;
-		}).findAny().isPresent();
-
-	}
-
-	public static boolean thereIsATraceBetween(IResource r1, IResource r2) {
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		
-		EObject tracemodel = persistenceAdapter.getTraceModel(new ResourceSetImpl());
-		GenericTraceModel gtm = (GenericTraceModel) tracemodel;
-		
-		RelatedTo trace = gtm.getTraces().get(0);
-		
-		return trace.getItem().contains(r1) && trace.getItem().contains(r2);
-
-	}
-	
-	public static ICProject createCDTProject(String projectName) throws OperationCanceledException, CoreException {
-		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		IWorkspaceRoot root = workspace.getRoot();
-		IProject project = root.getProject(projectName);
-		IProjectDescription description = workspace.newProjectDescription(projectName);
-		project = CCorePlugin.getDefault().createCDTProject(description, project, new NullProgressMonitor());
-		project.open(null);
-
-		try {
-			Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_REFRESH, null);
-		} catch (Exception e) {
-			// Ignore
-		}
-
-		ICProject tu = CoreModel.getDefault().create(project);
-
-		return tu;
-	}
-
-	public static IResource createEmptyFileInProject(String fileName, String projectName) throws CoreException {
-		IProject project = getProject(projectName);
-		IFile f = project.getFile(fileName);
-		f.create(new ByteArrayInputStream("hello world!".getBytes()), true, new NullProgressMonitor());
-
-		return f;
-	}
-	
-	public static void resetSelectionView(){
-		SelectionView.getOpenedView().clearSelection();
-		DisplayTracesHandler.setTraceViewTransitive(true);
-		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
-	}
-}
diff --git a/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF b/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
deleted file mode 100644
index 7bf6627..0000000
--- a/org.eclipse.capra.ui.notification/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,19 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Dash
-Bundle-SymbolicName: org.eclipse.capra.ui.notification;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.capra.core,
- org.eclipse.core.resources;bundle-version="3.9.1",
- org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.ui;bundle-version="3.106.1",
- org.eclipse.emf.common;bundle-version="2.10.1",
- org.eclipse.ui.ide;bundle-version="3.10.2",
- org.eclipse.emf.ecore,
- org.eclipse.capra.generic.tracemodels
-Import-Package: org.eclipse.capra.ui.helpers,
- org.eclipse.emf.ecore,
- org.eclipse.emf.ecore.resource,
- org.eclipse.emf.ecore.resource.impl,
- org.eclipse.emf.edit.ui.util
diff --git a/org.eclipse.capra.ui.notification/build.properties b/org.eclipse.capra.ui.notification/build.properties
deleted file mode 100644
index 3960f18..0000000
--- a/org.eclipse.capra.ui.notification/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
diff --git a/org.eclipse.capra.ui.notification/plugin.xml b/org.eclipse.capra.ui.notification/plugin.xml
deleted file mode 100644
index d00c903..0000000
--- a/org.eclipse.capra.ui.notification/plugin.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         point="org.eclipse.ui.startup">
-      <startup
-            class="org.eclipse.capra.ui.notification.StartUp">
-      </startup>
-   </extension>
-   <extension
-         point="org.eclipse.ui.ide.markerResolution">
-      <markerResolutionGenerator
-            class="org.eclipse.capra.ui.notification.MarkerResolutionGenerator"
-            markerType="org.eclipse.capra.ui.notification.capraproblemmarker">
-      </markerResolutionGenerator>
-      <markerResolutionGenerator
-            class="org.eclipse.capra.ui.notification.MarkerResolutionGenerator"
-            markerType="org.eclipse.capra.ui.notifcation.capraFileChangedMarker">
-      </markerResolutionGenerator>
-   </extension>
-   <extension
-         id="org.eclipse.capra.ui.notification.capraproblemmarker"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.core.resources.problemmarker">
-      </super>
-      <persistent
-            value="true">
-      </persistent>
-   </extension>
-   <extension
-         id="org.eclipse.capra.ui.notifcation.capraFileChangedMarker"
-         name="fileChangedMarker"
-         point="org.eclipse.core.resources.markers">
-      <persistent
-            value="true">
-      </persistent>
-      <super
-            type="org.eclipse.core.resources.problemmarker">
-      </super>
-   </extension>
-
-</plugin>
diff --git a/org.eclipse.capra.ui.notification/pom.xml b/org.eclipse.capra.ui.notification/pom.xml
deleted file mode 100644
index 69041af..0000000
--- a/org.eclipse.capra.ui.notification/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.ui.notification</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/DeleteQuickFix.java b/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/DeleteQuickFix.java
deleted file mode 100644
index 01f0836..0000000
--- a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/DeleteQuickFix.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-
-package org.eclipse.capra.ui.notification;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceMetaModelFactory;
-import org.eclipse.capra.GenericTraceMetaModel.GenericTraceModel;
-import org.eclipse.capra.GenericTraceMetaModel.RelatedTo;
-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.helpers.ExtensionPointHelper;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.ui.IMarkerResolution;
-
-/**
- * A quick fix to delete a trace link if one of the linked objects is no longer
- * available.
- * 
- * @author Michael Warne
- */
-public class DeleteQuickFix implements IMarkerResolution {
-
-	private URI artifactModelURI;
-	private URI traceModelURI;
-	private TracePersistenceAdapter tracePersistenceAdapter;
-	private ResourceSet resourceSet;
-	private EObject awc;
-	private String label;
-	private Resource resourceForArtifacts;
-	private Resource resourceForTraces;
-	private ArtifactWrapperContainer container;
-	private EObject traceModel;
-	private TraceMetaModelAdapter traceMetamodelAdapter;
-	private List<RelatedTo> toDelete = new ArrayList<>();
-
-	DeleteQuickFix(String label) {
-		this.label = label;
-	}
-
-	@Override
-	public String getLabel() {
-		return label;
-	}
-
-	@Override
-	public void run(IMarker marker) {
-
-		resourceSet = new ResourceSetImpl();
-		tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		traceMetamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		traceModel = tracePersistenceAdapter.getTraceModel(resourceSet);
-		traceModelURI = EcoreUtil.getURI(traceModel);
-		GenericTraceModel newTraceModel = GenericTraceMetaModelFactory.eINSTANCE.createGenericTraceModel();
-		resourceForTraces = resourceSet.createResource(traceModelURI);
-
-		GenericTraceModel simpleTM = (GenericTraceModel) traceModel;
-		List<RelatedTo> traces = simpleTM.getTraces();
-
-		awc = tracePersistenceAdapter.getArtifactWrappers(resourceSet);
-		artifactModelURI = EcoreUtil.getURI(awc);
-
-		resourceForArtifacts = resourceSet.createResource(artifactModelURI);
-		EList<ArtifactWrapper> list = ((ArtifactWrapperContainer) awc).getArtifacts();
-		container = (ArtifactWrapperContainer) awc;
-		int counter = -1;
-		for (ArtifactWrapper aw : list) {
-			counter++;
-			try {
-				if (aw.getName().equals(marker.getAttribute("fileName"))) {
-					List<Connection> connections = traceMetamodelAdapter.getConnectedElements(aw, traceModel);
-					connections.forEach(c -> {
-						for (RelatedTo t : traces) {
-							if (c.getTlink().equals(t)) {
-								toDelete.add(t);
-							}
-						}
-					});
-					traces.removeAll(toDelete);
-					newTraceModel.getTraces().addAll(traces);
-					resourceForTraces.getContents().add(newTraceModel);
-
-					ArtifactWrapper toRemove = container.getArtifacts().get(counter);
-					EcoreUtil.delete(toRemove);
-					resourceForArtifacts.getContents().add(container);
-					try {
-						resourceForTraces.save(null);
-						resourceForArtifacts.save(null);
-					} catch (IOException e) {
-
-						e.printStackTrace();
-					}
-
-					break;
-				}
-			} catch (CoreException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}
-
-		try {
-			marker.delete();
-		} catch (CoreException e) {
-
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/FileChangedQuickFix.java b/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/FileChangedQuickFix.java
deleted file mode 100644
index c3cf95d..0000000
--- a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/FileChangedQuickFix.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2016 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 v1.0
- *  which accompanies this distribution, and is available at
- *  http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers|Gothenburg University and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.notification;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.ui.IMarkerResolution;
-
-/**
- * Removes the marker associated with the trace link if the user decides to keep
- * the tracelink without any modifications
- * 
- * @author Salome Maro
- */
-public class FileChangedQuickFix implements IMarkerResolution {
-
-	private String label;
-
-	public FileChangedQuickFix(String label) {
-		this.label = label;
-	}
-
-	@Override
-	public String getLabel() {
-		return label;
-	}
-
-	@Override
-	public void run(IMarker marker) {
-		try {
-			marker.delete();
-		} catch (CoreException e) {
-
-			e.printStackTrace();
-		}
-	}
-
-}
diff --git a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/MarkerResolutionGenerator.java b/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/MarkerResolutionGenerator.java
deleted file mode 100644
index 6799846..0000000
--- a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/MarkerResolutionGenerator.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.notification;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.ui.IMarkerResolution;
-import org.eclipse.ui.IMarkerResolutionGenerator;
-
-/**
- * Registers the possible quick fix resolutions for consistency issues detected
- * in the traceability model.
- * 
- * @author Michael Warne
- */
-public class MarkerResolutionGenerator implements IMarkerResolutionGenerator {
-
-	@Override
-	public IMarkerResolution[] getResolutions(IMarker marker) {
-		try {
-
-			String problem = (String) marker.getAttribute("issueType");
-			if (problem.equals("Rename")) {
-				return new IMarkerResolution[] { new RenameOrMoveQuickFix("Update the EMF presentation.") };
-			}
-			if (problem.equals("Move")) {
-				return new IMarkerResolution[] { new RenameOrMoveQuickFix("Update the EMF presentation.") };
-			}
-			if (problem.equals("Delete")) {
-				return new IMarkerResolution[] { new DeleteQuickFix("Delete the affected trace link.") };
-			}
-			if (problem.equals("fileChanged")) {
-				return new IMarkerResolution[] { new DeleteQuickFix("Delete the affected trace link."),
-						new FileChangedQuickFix("Do not update existing trace link") };
-			} else
-				return null;
-
-		} catch (CoreException e) {
-			return new IMarkerResolution[0];
-		}
-	}
-
-}
diff --git a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/RenameOrMoveQuickFix.java b/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/RenameOrMoveQuickFix.java
deleted file mode 100644
index 84ad477..0000000
--- a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/RenameOrMoveQuickFix.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.notification;
-
-import java.io.IOException;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer;
-import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.ui.IMarkerResolution;
-
-/**
- * Renames the associated artifact wrapper in the artifact model to reflect
- * changes in the original resource represented by the wrapper. If the original
- * resource has been renamed or moved, the respective wrapper if renamed to
- * reflect the new name/location of file.
- * 
- * @author Michael Warne
- */
-public class RenameOrMoveQuickFix implements IMarkerResolution {
-
-	private String label;
-
-	RenameOrMoveQuickFix(String label) {
-		this.label = label;
-	}
-
-	@Override
-	public String getLabel() {
-		return label;
-	}
-
-	@Override
-	public void run(IMarker marker) {
-		URI uri;
-		TracePersistenceAdapter tracePersistenceAdapter;
-		ResourceSet resourceSet;
-		EObject awc;
-		Resource resourceForArtifacts;
-		ArtifactWrapperContainer container;
-
-		String movedToPath = null;
-		String oldFileName = null;
-		String newFileName = null;
-
-		try {
-			movedToPath = (String) marker.getAttribute("DeltaMovedToPath");
-			oldFileName = (String) marker.getAttribute("oldFileName");
-			newFileName = (String) marker.getAttribute("newFileName");
-		} catch (CoreException e) {
-			e.printStackTrace();
-		}
-
-		resourceSet = new ResourceSetImpl();
-		tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		awc = tracePersistenceAdapter.getArtifactWrappers(resourceSet);
-		uri = EcoreUtil.getURI(awc);
-		resourceForArtifacts = resourceSet.createResource(uri);
-		EList<ArtifactWrapper> list = ((ArtifactWrapperContainer) awc).getArtifacts();
-		container = (ArtifactWrapperContainer) awc;
-		for (ArtifactWrapper aw : list) {
-			if (aw.getName().equals(oldFileName)) {
-				aw.setName(newFileName);
-				aw.setUri(movedToPath);
-			}
-		}
-
-		resourceForArtifacts.getContents().add(container);
-		try {
-			resourceForArtifacts.save(null);
-		} catch (IOException e) {
-
-			e.printStackTrace();
-		}
-		try {
-			marker.delete();
-		} catch (CoreException e) {
-
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/ResourceListener.java b/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/ResourceListener.java
deleted file mode 100644
index 7bebd41..0000000
--- a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/ResourceListener.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.notification;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapper;
-import org.eclipse.capra.GenericArtifactMetaModel.ArtifactWrapperContainer;
-import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.resources.WorkspaceJob;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-
-/**
- * Checks for workspace changes to determine if the changes made to resources
- * affect the trace model. Creates markers on the artifact model if the changes
- * affect artifact wrappers.
- * 
- * @author Michael Warne
- * 
- *
- */
-
-public class ResourceListener implements IResourceChangeListener {
-	// TODO Change into enumeration
-
-	public enum IssueType {
-		ARTIFACT_RENAMED, ARTIFACT_MOVED, ARTIFACT_DELETED, ARTIFACT_CHANGED
-	}
-
-	@Override
-	public void resourceChanged(IResourceChangeEvent event) {
-		URI uri;
-		TracePersistenceAdapter tracePersistenceAdapter;
-		ResourceSet resourceSet = new ResourceSetImpl();
-		EObject awc;
-
-		tracePersistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		awc = tracePersistenceAdapter.getArtifactWrappers(resourceSet);
-		uri = EcoreUtil.getURI(awc);
-		EList<ArtifactWrapper> artifactlist = ((ArtifactWrapperContainer) awc).getArtifacts();
-
-		// check if artifact model contains anything
-
-		if (artifactlist.size() > 0) {
-			uri = EcoreUtil.getURI(awc);
-			IPath path = new Path(uri.toPlatformString(false));
-			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
-
-			IResourceDelta delta = event.getDelta();
-			IResourceDeltaVisitor visitor = new IResourceDeltaVisitor() {
-
-				@Override
-				public boolean visit(IResourceDelta delta) throws CoreException {
-
-					IPath toPath = delta.getMovedToPath();
-
-					if (delta.getKind() == IResourceDelta.REMOVED && toPath != null) {
-
-						if (delta.getFullPath().toFile().getName().equalsIgnoreCase(toPath.toFile().getName()))
-							markupJob(delta, IssueType.ARTIFACT_MOVED, file, awc);
-						else
-							markupJob(delta, IssueType.ARTIFACT_RENAMED, file, awc);
-					}
-					if (delta.getKind() == IResourceDelta.REMOVED && toPath == null) {
-						markupJob(delta, IssueType.ARTIFACT_DELETED, file, awc);
-					}
-
-					if (delta.getKind() == IResourceDelta.CHANGED) {
-						markupJob(delta, IssueType.ARTIFACT_CHANGED, file, awc);
-					}
-					return true;
-				}
-			};
-			try {
-				delta.accept(visitor);
-			} catch (CoreException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	/**
-	 * The job responsible for adding problem markers to the artifact wrapper
-	 * model in case of changes affecting the trace model
-	 * 
-	 * @param delta
-	 *            The changes from the workspace
-	 * 
-	 * @param IssueType
-	 *            Type of change that occurred. Can be file changed, deleted,
-	 *            moved or renamed.
-	 * @param file
-	 *            The file containing the artifact wrapper model
-	 * @param awc
-	 *            The artifact wrapper model
-	 */
-	public void markupJob(IResourceDelta delta, IssueType issue, IFile file, EObject awc) {
-
-		WorkspaceJob job = new WorkspaceJob("CapraNotificationJob") {
-
-			@Override
-			public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
-
-				try {
-					EList<ArtifactWrapper> list = ((ArtifactWrapperContainer) awc).getArtifacts();
-					for (ArtifactWrapper aw : list) {
-
-						if (aw.getName().equals(delta.getResource().getName())) {
-
-							if (issue == IssueType.ARTIFACT_RENAMED) {
-								IMarker marker = file
-										.createMarker("org.eclipse.capra.ui.notification.capraproblemmarker");
-								marker.setAttribute("DeltaFullPath", delta.getFullPath().toString());
-								marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
-
-								marker.setAttribute(IMarker.MESSAGE,
-										delta.getFullPath() + " has been renamed to " + delta.getMovedToPath());
-								marker.setAttribute("DeltaMovedToPath", delta.getMovedToPath().toString());
-								marker.setAttribute("oldFileName", delta.getResource().getName());
-								marker.setAttribute("newFileName", delta.getMovedToPath().toFile().getName());
-								marker.setAttribute("issueType", "Rename");
-							} else if (issue == IssueType.ARTIFACT_MOVED) {
-								IMarker marker = file
-										.createMarker("org.eclipse.capra.ui.notification.capraproblemmarker");
-								marker.setAttribute("DeltaFullPath", delta.getFullPath().toString());
-								marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
-
-								marker.setAttribute(IMarker.MESSAGE,
-										delta.getResource().getName() + " has been moved from " + delta.getFullPath()
-												+ " to " + delta.getMovedToPath());
-								marker.setAttribute("DeltaMovedToPath", delta.getMovedToPath().toString());
-								marker.setAttribute("oldFileName", delta.getResource().getName());
-								marker.setAttribute("newFileName", delta.getMovedToPath().toFile().getName());
-								marker.setAttribute("issueType", "Move");
-							} else if (issue == IssueType.ARTIFACT_DELETED) {
-								IMarker marker = file
-										.createMarker("org.eclipse.capra.ui.notification.capraproblemmarker");
-								marker.setAttribute("DeltaFullPath", delta.getFullPath().toString());
-								marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
-
-								marker.setAttribute(IMarker.MESSAGE, delta.getResource().getName()
-										+ " has been deleted from " + delta.getFullPath());
-								marker.setAttribute("issueType", "Delete");
-								marker.setAttribute("fileName", delta.getResource().getName());
-							} else if (issue == IssueType.ARTIFACT_CHANGED) {
-								addFileChangedMarker(file, delta);
-
-							}
-
-						}
-					}
-				} catch (CoreException e) {
-					e.printStackTrace();
-				}
-				return Status.OK_STATUS;
-			}
-		};
-		job.schedule();
-
-	}
-
-	/**
-	 * Checks if the marker for file changes already exists in the same file.To
-	 * make sure a new marker is not generated every time a change is made.
-	 * 
-	 * @param file
-	 *            The file containing artifact wrappers
-	 *
-	 * @param delta
-	 *            The change that occurred in the workspace
-	 * 
-	 */
-	protected void addFileChangedMarker(IFile file, IResourceDelta delta) throws CoreException {
-
-		IMarker[] markers = file.findMarkers("org.eclipse.capra.ui.notifcation.capraFileChangedMarker", false, 0);
-		List<IMarker> markerList = Arrays.asList(markers);
-		List<String> changedFiles = new ArrayList<>();
-
-		if (!markerList.isEmpty()) {
-
-			markerList.stream().forEach(m -> {
-				changedFiles.add((String) m.getAttribute("fileName", null));
-			});
-
-			String changedFile = delta.getResource().getName();
-			if (!changedFiles.contains(changedFile)) {
-				IMarker fileChangedMarker = file
-						.createMarker("org.eclipse.capra.ui.notifcation.capraFileChangedMarker");
-				fileChangedMarker.setAttribute("DeltaFullPath", delta.getFullPath().toString());
-				fileChangedMarker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
-
-				fileChangedMarker.setAttribute("changedFile", delta.getResource().getName());
-				fileChangedMarker.setAttribute(IMarker.MESSAGE, delta.getResource().getName()
-						+ "has been changed. Please check if associated trace links are still valid");
-				fileChangedMarker.setAttribute("issueType", "fileChanged");
-			}
-		} else {
-			IMarker fileChangedMarker = file.createMarker("org.eclipse.capra.ui.notifcation.capraFileChangedMarker");
-			fileChangedMarker.setAttribute("DeltaFullPath", delta.getFullPath().toString());
-			fileChangedMarker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
-
-			fileChangedMarker.setAttribute("fileName", delta.getResource().getName());
-			fileChangedMarker.setAttribute(IMarker.MESSAGE, delta.getResource().getName()
-					+ "has been changed. Please check if associated trace links are still valid");
-			fileChangedMarker.setAttribute("issueType", "fileChanged");
-		}
-
-	}
-}
diff --git a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/StartUp.java b/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/StartUp.java
deleted file mode 100644
index 99cc6a4..0000000
--- a/org.eclipse.capra.ui.notification/src/org/eclipse/capra/ui/notification/StartUp.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.notification;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.ui.IStartup;
-
-/**
- * Registers the startup extension to get access to resource changes.
- */
-public class StartUp implements IStartup {
-
-	@Override
-	public void earlyStartup() {
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(new ResourceListener());
-	}
-}
diff --git a/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF b/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
deleted file mode 100644
index cbbde6a..0000000
--- a/org.eclipse.capra.ui.plantuml/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Tracemetamodel1
-Bundle-SymbolicName: org.eclipse.capra.ui.plantuml;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Require-Bundle: org.eclipse.ui.workbench,
- org.eclipse.jface,
- org.eclipse.capra.core,
- org.eclipse.emf.ecore.editor,
- com.google.guava,
- org.eclipse.xtext.xbase.lib,
- org.eclipse.xtend.lib,
- org.eclipse.xtend.lib.macro,
- net.sourceforge.plantuml.eclipse,
- org.eclipse.ui,
- org.eclipse.core.resources,
- org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.capra.ui;bundle-version="0.7.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.capra.ui.plantuml
-
diff --git a/org.eclipse.capra.ui.plantuml/build.properties b/org.eclipse.capra.ui.plantuml/build.properties
deleted file mode 100644
index 53302dc..0000000
--- a/org.eclipse.capra.ui.plantuml/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = xtend-gen/,\
-           src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml
-
diff --git a/org.eclipse.capra.ui.plantuml/plugin.xml b/org.eclipse.capra.ui.plantuml/plugin.xml
deleted file mode 100644
index ed270e9..0000000
--- a/org.eclipse.capra.ui.plantuml/plugin.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         point="net.sourceforge.plantuml.eclipse.diagramTextProvider">
-      <diagramTextProvider
-            providerClass="org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler">
-      </diagramTextProvider>
-   </extension>
-   <extension
-         point="org.eclipse.ui.commands">
-     
-      <command
-            id="org.eclipse.capra.ui.plantuml.toggleTransitivity"
-            name="Toggle Transitivity">
-      </command>
-   </extension>
-   <extension
-         point="org.eclipse.ui.handlers">
-      <handler
-            class="org.eclipse.capra.ui.plantuml.DisplayTracesHandler"
-            commandId="org.eclipse.capra.ui.plantuml.toggleTransitivity">
-      </handler>
-   </extension>
-	<extension
-         point="org.eclipse.ui.menus">
-      <menuContribution
-            locationURI="menu:net.sourceforge.plantuml.eclipse.views.PlantUmlView?after=additions">
-         <command
-               commandId="org.eclipse.capra.ui.plantuml.toggleTransitivity"
-               label="Toggle Transitivity"
-               style="push">
-         </command>
-         
-      </menuContribution>
-   </extension>
-   
-   <extension
-         point="org.eclipse.ui.perspectiveExtensions">
-      <perspectiveExtension
-            targetID="org.eclipse.capra.generic.perspective.CapraPerspective">
-         <view
-               id="net.sourceforge.plantuml.eclipse.views.PlantUmlView"
-               minimized="false"
-               ratio="0.25"
-               relationship="right"
-               relative="org.eclipse.capra.generic.views.SelectionView">
-         </view>
-      </perspectiveExtension>
-   </extension>
-</plugin>
diff --git a/org.eclipse.capra.ui.plantuml/pom.xml b/org.eclipse.capra.ui.plantuml/pom.xml
deleted file mode 100644
index 5f56d2f..0000000
--- a/org.eclipse.capra.ui.plantuml/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.ui.plantuml</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/Connections.java b/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/Connections.java
deleted file mode 100644
index 1eab0cc..0000000
--- a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/Connections.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.plantuml;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.capra.core.adapters.Connection;
-import org.eclipse.capra.ui.helpers.EMFHelper;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Helper class for generating PlantUML diagrams from a collection of
- * {@link Connection}
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class Connections {
-
-	private List<Connection> connections;
-	private EObject origin;
-
-	private Set<EObject> allObjects;
-	private Map<EObject, String> object2Id;
-	private Map<String, String> id2Label;
-
-	Connections(List<Connection> connections, EObject selectedObject) {
-		this.connections = connections;
-		origin = selectedObject;
-
-		allObjects = new LinkedHashSet<>();
-		allObjects.add(origin);
-		connections.forEach(c -> allObjects.addAll(c.getTargets()));
-
-		object2Id = new LinkedHashMap<>();
-		int i = 0;
-		for (EObject o : allObjects) {
-			object2Id.put(o, "o" + i++);
-		}
-
-		id2Label = new LinkedHashMap<>();
-		allObjects.forEach(o -> {
-			String id = object2Id.get(o);
-			String label = EMFHelper.getIdentifier(o);
-			id2Label.put(id, label);
-		});
-	}
-
-	public String originLabel() {
-		return id2Label.get(object2Id.get(origin));
-	}
-
-	public String originId() {
-		return object2Id.get(origin);
-	}
-
-	public Collection<String> objectIdsWithoutOrigin() {
-		Collection<String> all = new ArrayList<>();
-		all.addAll(object2Id.values());
-		all.remove(originId());
-		return all;
-	}
-
-	public String label(String id) {
-		return id2Label.get(id);
-	}
-
-	public List<String> arrows() {
-		List<String> arrows = new ArrayList<>();
-
-		connections.forEach(c -> {
-			c.getTargets().forEach(trg -> {
-				if (!trg.equals(c.getOrigin())) {
-					arrows.add(object2Id.get(c.getOrigin()) + "--" + object2Id.get(trg) + ":"
-							+ EMFHelper.getIdentifier(c.getTlink()));
-				}
-			});
-		});
-
-		return arrows;
-	}
-}
diff --git a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java b/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java
deleted file mode 100644
index d2d6d4b..0000000
--- a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DiagramTextProviderHandler.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.plantuml;
-
-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.adapters.TracePersistenceAdapter;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.ui.helpers.EMFHelper;
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
-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.viewers.ISelection;
-import org.eclipse.ui.IEditorPart;
-
-import net.sourceforge.plantuml.eclipse.utils.DiagramTextProvider;
-
-/**
- * Provides PlantUML with a string representation of elements connected by trace
- * links.
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class DiagramTextProviderHandler implements DiagramTextProvider {
-	private TraceMetaModelAdapter metamodelAdapter;
-	private List<Connection> traces = new ArrayList<>();
-
-	@Override
-	public String getDiagramText(IEditorPart editor, ISelection input) {
-		List<Object> selectedModels = TraceCreationHelper
-				.extractSelectedElements(editor.getSite().getSelectionProvider().getSelection());
-
-		return getDiagramText(selectedModels);
-	}
-
-	/**
-	 * Creates the {@code String} representation PlantUML uses to render the
-	 * graphics. Based on the selected models, the relevant trace links are
-	 * extracted and a decision is made whether a matrix of a tree view has to
-	 * be displayed.
-	 * 
-	 * @param selectedModels
-	 *            the models whose trace links should be displayed
-	 * @return a string representation of the visualisation that can be rendered
-	 *         by PlantUML
-	 */
-	public String getDiagramText(List<Object> selectedModels) {
-		List<EObject> firstModelElements = null;
-		List<EObject> secondModelElements = null;
-
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-		metamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-
-		ResourceSet resourceSet = new ResourceSetImpl();
-		if (selectedModels.size() > 0 && selectedModels.get(0) instanceof EObject)
-			resourceSet = ((EObject) selectedModels.get(0)).eResource().getResourceSet();
-
-		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
-
-		if (selectedModels.size() == 1 && selectedModels.get(0) instanceof EObject) {
-			EObject selectedEObject = (EObject) selectedModels.get(0);
-			if (DisplayTracesHandler.isTraceViewTransitive()) {
-				traces = metamodelAdapter.getTransitivelyConnectedElements(selectedEObject, traceModel);
-			} else {
-				traces = metamodelAdapter.getConnectedElements(selectedEObject, traceModel);
-			}
-
-			return VisualizationHelper.createNeighboursView(traces, selectedEObject);
-		} else if (selectedModels.size() == 2) {
-			firstModelElements = EMFHelper.linearize(selectedModels.get(0));
-			secondModelElements = EMFHelper.linearize(selectedModels.get(1));
-		} else {
-			firstModelElements = selectedModels.stream().flatMap(r -> EMFHelper.linearize(r).stream())
-					.collect(Collectors.toList());
-
-			secondModelElements = firstModelElements;
-		}
-
-		String umlString = VisualizationHelper.createMatrix(traceModel, firstModelElements, secondModelElements);
-
-		return umlString;
-	}
-
-	@Override
-	public boolean supportsEditor(IEditorPart editor) {
-		return true;
-	}
-
-	@Override
-	public boolean supportsSelection(ISelection selection) {
-		return true;
-	}
-}
diff --git a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DisplayTracesHandler.java b/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DisplayTracesHandler.java
deleted file mode 100644
index 0987b99..0000000
--- a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/DisplayTracesHandler.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.plantuml;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * Toggles between showing transitive and direct links
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class DisplayTracesHandler extends AbstractHandler {
-
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		if (isTraceViewTransitive())
-			setTraceViewTransitive(false);
-		else
-			setTraceViewTransitive(true);
-
-		return null;
-	}
-
-	/**
-	 * Checks whether the trace view is set to show transitive traces.
-	 * 
-	 * @return {@code true} if transitive traces are enabled, {@code false}
-	 *         otherwise
-	 */
-	public static boolean isTraceViewTransitive() {
-		Preferences transitivity = getPreference();
-
-		return transitivity.get("option", "direct").equals("transitive");
-	}
-
-	private static Preferences getPreference() {
-		Preferences preferences = InstanceScope.INSTANCE.getNode("org.eclipse.capra.ui.plantuml.toggleTransitivity");
-		Preferences transitivity = preferences.node("transitivity");
-		return transitivity;
-	}
-
-	/**
-	 * Sets whether the trace view is set to show transitive traces.
-	 * 
-	 * @param value
-	 *            indicates whether transitive traces should be shown
-	 */
-	public static void setTraceViewTransitive(boolean value) {
-		Preferences transitivity = getPreference();
-
-		transitivity.put("option", value ? "transitive" : "direct");
-
-		try {
-			// forces the application to save the preferences
-			transitivity.flush();
-		} catch (BackingStoreException e) {
-			e.printStackTrace();
-		}
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend b/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend
deleted file mode 100644
index 592605d..0000000
--- a/org.eclipse.capra.ui.plantuml/src/org/eclipse/capra/ui/plantuml/VisualizationHelper.xtend
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.eclipse.capra.ui.plantuml
-
-import java.util.Collection
-import java.util.List
-import org.eclipse.capra.core.adapters.Connection
-import org.eclipse.capra.core.helpers.ExtensionPointHelper
-import org.eclipse.capra.ui.helpers.EMFHelper
-import org.eclipse.emf.ecore.EObject
-
-class VisualizationHelper {
-	def static String createMatrix(EObject traceModel, Collection<EObject> firstElements, Collection<EObject> secondElements){
-	val traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get()
-	'''
-	@startuml
-	salt
-	{#
-	«IF firstElements != null»
-	.«FOR e : secondElements»|«EMFHelper.getIdentifier(e)»«ENDFOR»
-	«FOR first : firstElements»
-	«EMFHelper.getIdentifier(first)» «FOR second : secondElements»|«IF traceAdapter.isThereATraceBetween(first, second, traceModel)»X«ELSE».«ENDIF»«ENDFOR»
-	«ENDFOR»
-	«ELSE»
-	Choose two containers to show a traceability matrix of their contents.
-	«ENDIF»
-	}
-	
-	@enduml
-	'''
-	} 
-	
-	def static String createNeighboursView(List<Connection> connections, EObject selectedObject){
-	var helper = new Connections(connections, selectedObject);
-	'''
-	@startuml
-	object "«helper.originLabel()»" as «helper.originId()» #pink
-	«FOR id:helper.objectIdsWithoutOrigin()»
-	object "«helper.label(id)»" as «id»
-	«ENDFOR»
-	«FOR a:helper.arrows()» 
-	«a»
-	«ENDFOR» 
-	@enduml
-	''' 
-	} 
-} 
-  
-
- 
\ No newline at end of file
diff --git a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
deleted file mode 100644
index bb33b88..0000000
--- a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.gitignore b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.gitignore
deleted file mode 100644
index 6b4eb14..0000000
--- a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.VisualizationHelper.java._trace
diff --git a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java
deleted file mode 100644
index 5f05224..0000000
--- a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/VisualizationHelper.java
+++ /dev/null
@@ -1,116 +0,0 @@
-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.ExtensionPointHelper;
-import org.eclipse.capra.ui.helpers.EMFHelper;
-import org.eclipse.capra.ui.plantuml.Connections;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtend2.lib.StringConcatenation;
-
-@SuppressWarnings("all")
-public class VisualizationHelper {
-  public static String createMatrix(final EObject traceModel, final Collection<EObject> firstElements, final Collection<EObject> secondElements) {
-    String _xblockexpression = null;
-    {
-      Optional<TraceMetaModelAdapter> _traceMetamodelAdapter = ExtensionPointHelper.getTraceMetamodelAdapter();
-      final TraceMetaModelAdapter traceAdapter = _traceMetamodelAdapter.get();
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append("@startuml");
-      _builder.newLine();
-      _builder.append("salt");
-      _builder.newLine();
-      _builder.append("{#");
-      _builder.newLine();
-      {
-        boolean _notEquals = (!Objects.equal(firstElements, null));
-        if (_notEquals) {
-          _builder.append(".");
-          {
-            for(final EObject e : secondElements) {
-              _builder.append("|");
-              String _identifier = EMFHelper.getIdentifier(e);
-              _builder.append(_identifier, "");
-            }
-          }
-          _builder.newLineIfNotEmpty();
-          {
-            for(final EObject first : firstElements) {
-              String _identifier_1 = EMFHelper.getIdentifier(first);
-              _builder.append(_identifier_1, "");
-              _builder.append(" ");
-              {
-                for(final EObject second : secondElements) {
-                  _builder.append("|");
-                  {
-                    boolean _isThereATraceBetween = traceAdapter.isThereATraceBetween(first, second, traceModel);
-                    if (_isThereATraceBetween) {
-                      _builder.append("X");
-                    } else {
-                      _builder.append(".");
-                    }
-                  }
-                }
-              }
-              _builder.newLineIfNotEmpty();
-            }
-          }
-        } else {
-          _builder.append("Choose two containers to show a traceability matrix of their contents.");
-          _builder.newLine();
-        }
-      }
-      _builder.append("}");
-      _builder.newLine();
-      _builder.newLine();
-      _builder.append("@enduml");
-      _builder.newLine();
-      _xblockexpression = _builder.toString();
-    }
-    return _xblockexpression;
-  }
-  
-  public static String createNeighboursView(final List<Connection> connections, final EObject selectedObject) {
-    String _xblockexpression = null;
-    {
-      Connections helper = new Connections(connections, selectedObject);
-      StringConcatenation _builder = new StringConcatenation();
-      _builder.append("@startuml");
-      _builder.newLine();
-      _builder.append("object \"");
-      String _originLabel = helper.originLabel();
-      _builder.append(_originLabel, "");
-      _builder.append("\" as ");
-      String _originId = helper.originId();
-      _builder.append(_originId, "");
-      _builder.append(" #pink");
-      _builder.newLineIfNotEmpty();
-      {
-        Collection<String> _objectIdsWithoutOrigin = helper.objectIdsWithoutOrigin();
-        for(final String id : _objectIdsWithoutOrigin) {
-          _builder.append("object \"");
-          String _label = helper.label(id);
-          _builder.append(_label, "");
-          _builder.append("\" as ");
-          _builder.append(id, "");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      {
-        List<String> _arrows = helper.arrows();
-        for(final String a : _arrows) {
-          _builder.append(a, "");
-          _builder.newLineIfNotEmpty();
-        }
-      }
-      _builder.append("@enduml");
-      _builder.newLine();
-      _xblockexpression = _builder.toString();
-    }
-    return _xblockexpression;
-  }
-}
diff --git a/org.eclipse.capra.ui/META-INF/MANIFEST.MF b/org.eclipse.capra.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index e7065ac..0000000
--- a/org.eclipse.capra.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,30 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Capra:  Traceability Management
-Bundle-SymbolicName: org.eclipse.capra.ui;singleton:=true
-Bundle-Version: 0.7.0.qualifier
-Bundle-ClassPath: .
-Bundle-Vendor: Chalmers Institute of Technology
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: org.eclipse.equinox.registry,
- com.google.guava,
- org.eclipse.xtext.xbase.lib,
- org.eclipse.emf.ecore.xcore.lib,
- org.eclipse.xtend.lib,
- org.eclipse.xtend.lib.macro,
- org.eclipse.swt,
- org.eclipse.jface,
- org.eclipse.core.runtime;bundle-version="3.10.0",
- org.eclipse.emf.ecore;visibility:=reexport,
- org.eclipse.emf;bundle-version="2.6.0",
- org.eclipse.emf.edit.ui;bundle-version="2.10.2",
- org.eclipse.ui.ide;bundle-version="3.10.2",
- org.eclipse.ui,
- org.eclipse.core.resources,
- org.eclipse.capra.core
-Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.capra.ui.handlers,
- org.eclipse.capra.ui.helpers,
- org.eclipse.capra.ui.views
-
diff --git a/org.eclipse.capra.ui/build.properties b/org.eclipse.capra.ui/build.properties
deleted file mode 100644
index c28ac15..0000000
--- a/org.eclipse.capra.ui/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-source.. = src/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               plugin.properties
diff --git a/org.eclipse.capra.ui/contexts.xml b/org.eclipse.capra.ui/contexts.xml
deleted file mode 100644
index aa75860..0000000
--- a/org.eclipse.capra.ui/contexts.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<contexts>
-	<context id="viewer" title="Sample View">
-		<description>This is the context help for the sample view with a table viewer. It was generated by a PDE template.</description>
-		<topic href="/PLUGINS_ROOT/org.eclipse.platform.doc.isv/guide/ua_help_context.htm" label="Context-sensitive help">
-			<enablement>
-				<with variable="platform">
-	            	<test property="org.eclipse.core.runtime.isBundleInstalled" args="org.eclipse.platform.doc.isv"/>
-	     		</with>
-			</enablement>
-		</topic>
-	</context>
-</contexts>
diff --git a/org.eclipse.capra.ui/plugin.properties b/org.eclipse.capra.ui/plugin.properties
deleted file mode 100644
index c854581..0000000
--- a/org.eclipse.capra.ui/plugin.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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 v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#  
-#   Contributors:
-#      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-###############################################################################
-#
-
-pluginName = Tracecreation Model
-providerName = www.example.org
diff --git a/org.eclipse.capra.ui/plugin.xml b/org.eclipse.capra.ui/plugin.xml
deleted file mode 100644
index 874525a..0000000
--- a/org.eclipse.capra.ui/plugin.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<plugin>
-   <extension
-         point="org.eclipse.ui.commands">
-      <command
-            id="org.eclipse.capra.generic.tracecreation.commands.createTrace"
-            name="Create Trace">
-      </command>
-      <command
-            helpContextId="Remove currently selected item from the  list of selection"
-            id="org.eclipse.capra.generic.tracecreation.commands.removefromselection"
-            name="Remove from Selection">
-      </command>
-      <command
-            id="org.eclipse.capra.generic.tracecreation.clearselection"
-            name="Clear Selection">
-      </command>
-      <command
-            id="org.eclipse.capra.generic.addtoselection"
-            name="Add to Selection">
-      </command>
-   </extension>
-   <extension
-         point="org.eclipse.ui.handlers">
-      <handler
-            class="org.eclipse.capra.ui.handlers.TraceCreationHandler"
-            commandId="org.eclipse.capra.generic.tracecreation.commands.createTrace">
-      </handler>
-      <handler
-            class="org.eclipse.capra.ui.handlers.selection.RemoveSelectionHandler"
-            commandId="org.eclipse.capra.generic.tracecreation.commands.removefromselection">
-      </handler>
-      <handler
-            class="org.eclipse.capra.ui.handlers.selection.ClearSelectionHandler"
-            commandId="org.eclipse.capra.generic.tracecreation.clearselection">
-      </handler>
-      <handler
-            class="org.eclipse.capra.ui.handlers.selection.AddtoSelection"
-            commandId="org.eclipse.capra.generic.addtoselection">
-      </handler>
-   </extension>
-   <extension
-         point="org.eclipse.ui.menus">
-      <menuContribution
-            locationURI="popup:org.eclipse.capra.generic.views.SelectionView?after=additions">
-         <separator
-               name="org.eclipse.capra.tracecreation.separator2"
-               visible="true">
-         </separator>
-         <command
-               commandId="org.eclipse.capra.generic.tracecreation.commands.createTrace"
-               id="org.eclipse.capra.tracecreation.menus.createTrace"
-               label="Create Trace"
-               mnemonic="S"
-               tooltip="Gives you a list of available trace types">
-         </command>
-         <command
-               commandId="org.eclipse.capra.generic.tracecreation.commands.removefromselection"
-               label="Remove from Selection"
-               style="push"
-               tooltip="Remove the selected item from the current selection">
-         </command>
-         <command
-               commandId="org.eclipse.capra.generic.tracecreation.clearselection"
-               label="Clear Selection"
-               style="push"
-               tooltip="Clears the current selection of elements">
-         </command>
-         <separator
-               name="org.eclipse.capra.generic.tracecreation.separator1"
-               visible="true">
-         </separator>
-      </menuContribution>
-      <menuContribution
-            allPopups="false"
-            locationURI="popup:org.eclipse.ui.popup.any?after=additions">
-         <separator
-               name="org.eclipse.capra.generic.separator2">
-         </separator>
-         <menu
-               label="Capra">
-            <command
-                  commandId="org.eclipse.capra.generic.addtoselection"
-                  label="Add to Selection"
-                  style="push"
-                  tooltip="Add selected item(s) to selection view">
-            </command>
-         </menu>
-         <separator
-               name="org.eclipse.capra.generic.separator1">
-         </separator>
-      </menuContribution>
-   </extension>
-   <extension
-         point="org.eclipse.ui.views">
-      <category
-            id="org.eclipse.capra.generic.views"
-            name="Capra Views">
-      </category>
-      <view
-            category="org.eclipse.capra.generic.views"
-            class="org.eclipse.capra.ui.views.SelectionView"
-            icon="icons/selectionView.png"
-            id="org.eclipse.capra.generic.views.SelectionView"
-            name="Selection View">
-      </view>
-   </extension>
-   <extension
-         point="org.eclipse.ui.perspectives">
-      <perspective
-            class="org.eclipse.capra.ui.perspective.CapraPerspective"
-            icon="icons/capra.png"
-            id="org.eclipse.capra.generic.perspective.CapraPerspective"
-            name="Capra">
-      </perspective>
-   </extension>
-
-
-</plugin>
diff --git a/org.eclipse.capra.ui/pom.xml b/org.eclipse.capra.ui/pom.xml
deleted file mode 100644
index cd419f0..0000000
--- a/org.eclipse.capra.ui/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
-     
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- -->
-
-<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.7.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>org.eclipse.capra.ui</artifactId>
-	<packaging>eclipse-plugin</packaging>
-
-</project>
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
deleted file mode 100644
index 83bb544..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/TraceCreationHandler.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.handlers;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import java.util.function.BiFunction;
-import java.util.stream.Collectors;
-
-import org.eclipse.capra.core.adapters.TraceMetaModelAdapter;
-import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.handlers.PriorityHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.ui.helpers.EMFHelper;
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.emf.ecore.EClass;
-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.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-public class TraceCreationHandler extends AbstractHandler {
-
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
-		createTrace(window, (traceTypes, selection) -> getTraceTypeToCreate(window, traceTypes, selection));
-		return null;
-	}
-
-	public void createTrace(IWorkbenchWindow window,
-			BiFunction<Collection<EClass>, List<EObject>, Optional<EClass>> chooseTraceType) {
-		List<Object> selection = SelectionView.getOpenedView().getSelection();
-
-		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
-
-		ResourceSet resourceSet = new ResourceSetImpl();
-		// add trace model to resource set
-		EObject traceModel = persistenceAdapter.getTraceModel(resourceSet);
-		// add artifact model to resource set
-		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
-
-		Collection<ArtifactHandler> artifactHandlers = ExtensionPointHelper.getArtifactHandlers();
-
-		List<EObject> selectionAsEObjects = mapSelectionToEObjects(window, artifactModel, artifactHandlers, selection);
-
-		Collection<EClass> traceTypes = traceAdapter.getAvailableTraceTypes(selectionAsEObjects);
-		Optional<EClass> chosenType = chooseTraceType.apply(traceTypes, selectionAsEObjects);
-
-		if (chosenType.isPresent()) {
-			EObject root = traceAdapter.createTrace(chosenType.get(), traceModel, selectionAsEObjects);
-			persistenceAdapter.saveTracesAndArtifacts(root, artifactModel);
-		}
-	}
-
-	private List<EObject> mapSelectionToEObjects(IWorkbenchWindow window, EObject artifactModel,
-			Collection<ArtifactHandler> artifactHandlers, List<Object> selection) {
-		return selection.stream().map(sel -> convertToEObject(window, sel, artifactHandlers, artifactModel))
-				.filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
-	}
-
-	private Optional<EObject> convertToEObject(IWorkbenchWindow window, Object sel,
-			Collection<ArtifactHandler> artifactHandlers, EObject artifactModel) {
-		List<ArtifactHandler> availableHandlers = artifactHandlers.stream()
-				.filter(handler -> handler.canHandleSelection(sel)).collect(Collectors.toList());
-		Optional<PriorityHandler> priorityHandler = ExtensionPointHelper.getPriorityHandler();
-
-		if (availableHandlers.size() == 1) {
-			return Optional.of(availableHandlers.get(0).getEObjectForSelection(sel, artifactModel));
-		} else if (availableHandlers.size() > 1 && priorityHandler.isPresent()) {
-			ArtifactHandler selectedHandler = priorityHandler.get().getSelectedHandler(availableHandlers, sel);
-			return Optional.of(selectedHandler.getEObjectForSelection(sel, artifactModel));
-		} else {
-			MessageDialog.openWarning(window.getShell(), "No handler for selected item",
-					"There is no handler for " + sel + " so it will be ignored.");
-			return Optional.empty();
-		}
-
-	}
-
-	private Optional<EClass> getTraceTypeToCreate(IWorkbenchWindow window, Collection<EClass> traceTypes,
-			List<EObject> selectionAsEObjects) {
-		ElementListSelectionDialog dialog = new ElementListSelectionDialog(window.getShell(), new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				EClass eclass = (EClass) element;
-				return eclass.getName();
-			}
-		});
-		dialog.setTitle("Select the trace type you want to create");
-		dialog.setElements(traceTypes.toArray());
-		dialog.setMessage("Selection: "
-				+ selectionAsEObjects.stream().map(EMFHelper::getIdentifier).collect(Collectors.toList()));
-
-		if (dialog.open() == Window.OK) {
-			return Optional.of((EClass) dialog.getFirstResult());
-		}
-
-		return Optional.empty();
-	}
-}
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java
deleted file mode 100644
index 3485ddb..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/AddtoSelection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.handlers.selection;
-
-import java.util.List;
-
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-
-/**
- * Action to add an object to the selection view.
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class AddtoSelection extends AbstractHandler {
-
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
-		SelectionView.getOpenedView().dropToSelection(selection);
-		return null;
-	}
-
-}
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/ClearSelectionHandler.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/ClearSelectionHandler.java
deleted file mode 100644
index ec9d047..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/ClearSelectionHandler.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.handlers.selection;
-
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-
-/**
- * Action to remove all objects from the selection view.
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class ClearSelectionHandler extends AbstractHandler {
-
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		SelectionView.getOpenedView().clearSelection();
-		return null;
-	}
-}
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
deleted file mode 100644
index e2974af..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/handlers/selection/RemoveSelectionHandler.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.handlers.selection;
-
-import java.util.List;
-
-import org.eclipse.capra.ui.helpers.TraceCreationHelper;
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-
-/**
- * Action to remove a single object from the selection view.
- * 
- * @author Anthony Anjorin, Salome Maro
- */
-public class RemoveSelectionHandler extends AbstractHandler {
-
-	@Override
-	public Object execute(ExecutionEvent event) throws ExecutionException {
-		List<Object> selection = TraceCreationHelper.extractSelectedElements(event);
-		SelectionView.getOpenedView().removeFromSelection(selection);
-		return null;
-	}
-}
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/EMFHelper.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/EMFHelper.java
deleted file mode 100644
index e498b8e..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/EMFHelper.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.helpers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Contains methods to work with {@link EObject} instances encountered when
- * handling EMF models.
- */
-public class EMFHelper {
-
-	/**
-	 * 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 called 'name' of the EObject, if it has such an
-	 * attribute</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.
-	 */
-	public static String getIdentifier(final EObject eObject) {
-		if (eObject == null)
-			return "<null>";
-		if (eObject.eClass() == null)
-			return eObject.toString();
-
-		boolean success = false;
-
-		List<EAttribute> attributes = eObject.eClass().getEAllAttributes();
-		StringBuilder identifier = new StringBuilder();
-
-		success = tryGetSingleAttribute(eObject, attributes, identifier);
-
-		if (!success)
-			success = tryGetNameAttribute(eObject, attributes, identifier);
-
-		if (!success)
-			success = tryGetAnyAttribute(eObject, attributes, identifier);
-
-		if (success)
-			identifier.append(" : ");
-
-		identifier.append(eObject.eClass().getName());
-
-		return identifier.toString();
-	}
-
-	/**
-	 * @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.
-	 */
-	public static boolean tryGetSingleAttribute(final EObject eObject, final List<EAttribute> attributes,
-			final StringBuilder name) {
-		boolean success = false;
-		if (attributes.size() == 1) {
-			Object obj = eObject.eGet(attributes.get(0));
-			if (obj != null) {
-				name.append(obj.toString());
-				success = true;
-			}
-		}
-		return success;
-	}
-
-	/**
-	 * @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.
-	 */
-	public static boolean tryGetNameAttribute(final EObject eObject, final List<EAttribute> attributes,
-			final StringBuilder name) {
-		boolean success = false;
-		for (EAttribute feature : attributes) {
-			if (feature.getName().equals("name")) {
-				Object obj = eObject.eGet(feature);
-				if (obj != null) {
-					name.append(obj.toString());
-					success = true;
-					break;
-				}
-			}
-		}
-		return success;
-	}
-
-	/**
-	 * @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.
-	 */
-	public static boolean tryGetAnyAttribute(final EObject eObject, final List<EAttribute> attributes,
-			final StringBuilder name) {
-		boolean success = false;
-		String nonStringName = null;
-		String stringName = null;
-		for (EAttribute feature : attributes) {
-			Object obj = eObject.eGet(feature);
-			if (obj == null)
-				continue;
-			if (obj instanceof String) {
-				stringName = (String) obj;
-				break;
-			} else {
-				nonStringName = obj.toString();
-			}
-		}
-		if (stringName != null && !stringName.equals("null")) {
-			name.append(stringName);
-			success = true;
-		} else if (nonStringName != null && !nonStringName.equals("null")) {
-			name.append(nonStringName);
-			success = true;
-		}
-		return success;
-	}
-
-	/**
-	 * 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}
-	 */
-	public static List<EObject> linearize(Object object) {
-		ArrayList<EObject> elementList = new ArrayList<EObject>();
-		if (object instanceof EObject) {
-			EObject root = (EObject) object;
-			root.eAllContents().forEachRemaining(element -> elementList.add(element));
-			elementList.add(root);
-		}
-		return elementList;
-	}
-
-}
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java
deleted file mode 100644
index 6f7cdc7..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/TraceCreationHelper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-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/org.eclipse.capra.ui/src/org/eclipse/capra/ui/perspective/CapraPerspective.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/perspective/CapraPerspective.java
deleted file mode 100644
index 34e691d..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/perspective/CapraPerspective.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.perspective;
-
-import org.eclipse.capra.ui.views.SelectionView;
-import org.eclipse.ui.IFolderLayout;
-import org.eclipse.ui.IPageLayout;
-import org.eclipse.ui.IPerspectiveFactory;
-
-/**
- * Defines the Eclipse perspective for Capra, in particular the initial views
- * that will be shown when the perspective is chosen.
- */
-public class CapraPerspective implements IPerspectiveFactory {
-
-	private IPageLayout factory;
-
-	public void createInitialLayout(IPageLayout factory) {
-		this.factory = factory;
-		addViews();
-	}
-
-	private void addViews() {
-		IFolderLayout bottom = factory.createFolder("bottomRight", IPageLayout.BOTTOM, 0.6f, factory.getEditorArea());
-		bottom.addView(SelectionView.ID);
-
-		IFolderLayout topLeft = factory.createFolder("topLeft", IPageLayout.LEFT, 0.25f, factory.getEditorArea());
-		topLeft.addView(IPageLayout.ID_PROJECT_EXPLORER);
-
-		IFolderLayout topRight = factory.createFolder("topRight", IPageLayout.RIGHT, 0.75f, factory.getEditorArea());
-		topRight.addView(IPageLayout.ID_OUTLINE);
-	}
-}
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java b/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
deleted file mode 100644
index 7620066..0000000
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/views/SelectionView.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2016 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 v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *  
- *   Contributors:
- *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-package org.eclipse.capra.ui.views;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.eclipse.capra.core.handlers.ArtifactHandler;
-import org.eclipse.capra.core.handlers.PriorityHandler;
-import org.eclipse.capra.core.helpers.ExtensionPointHelper;
-import org.eclipse.capra.ui.helpers.EMFHelper;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerDropAdapter;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.ViewPart;
-
-public class SelectionView extends ViewPart {
-
-	/** The ID of the view as specified by the extension. */
-	public static final String ID = "org.eclipse.capra.generic.views.SelectionView";
-
-	/** The actual table containing selected elements */
-	public TableViewer viewer;
-
-	/** The maintained selection of EObjects */
-	private Set<Object> selection = new LinkedHashSet<>();
-
-	class ViewContentProvider implements IStructuredContentProvider {
-		@Override
-		public void inputChanged(Viewer v, Object oldInput, Object newInput) {
-		}
-
-		@Override
-		public void dispose() {
-		}
-
-		@Override
-		public Object[] getElements(Object parent) {
-			return selection.toArray();
-		}
-	}
-
-	class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
-
-		@Override
-		public String getText(Object element) {
-			if (element instanceof EObject) {
-				return EMFHelper.getIdentifier((EObject) element);
-			} else
-				return element.toString();
-
-		};
-
-		@Override
-		public String getColumnText(Object obj, int index) {
-			return getText(obj);
-		}
-
-		@Override
-		public Image getColumnImage(Object obj, int index) {
-			return getImage(obj);
-		}
-
-		@Override
-		public Image getImage(Object obj) {
-			return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
-		}
-	}
-
-	class NameSorter extends ViewerSorter {
-		@Override
-		public void sort(Viewer viewer, Object[] elements) {
-			// Retain order in which the user dragged in the elements
-		}
-	}
-
-	class SelectionDropAdapter extends ViewerDropAdapter {
-		TableViewer view;
-
-		public SelectionDropAdapter(TableViewer viewer) {
-			super(viewer);
-			this.view = viewer;
-		}
-
-		@Override
-		public boolean performDrop(Object data) {
-			dropToSelection(data);
-			return true;
-		}
-
-		@Override
-		public boolean validateDrop(Object target, int operation, TransferData transferType) {
-			return true;
-		}
-
-	}
-
-	public void createPartControl(Composite parent) {
-		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
-		viewer.setContentProvider(new ViewContentProvider());
-		viewer.setLabelProvider(new ViewLabelProvider());
-		viewer.setSorter(new NameSorter());
-		viewer.setInput(getViewSite());
-
-		getSite().setSelectionProvider(viewer);
-		hookContextMenu();
-
-		int ops = DND.DROP_COPY | DND.DROP_MOVE;
-		Transfer[] transfers = new Transfer[] { org.eclipse.ui.part.ResourceTransfer.getInstance(),
-				org.eclipse.ui.part.EditorInputTransfer.getInstance(), org.eclipse.swt.dnd.FileTransfer.getInstance(),
-				org.eclipse.swt.dnd.RTFTransfer.getInstance(), org.eclipse.swt.dnd.TextTransfer.getInstance(),
-				org.eclipse.swt.dnd.URLTransfer.getInstance(),
-				org.eclipse.jface.util.LocalSelectionTransfer.getTransfer(),
-				org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance() };
-
-		viewer.addDropSupport(ops, transfers, new SelectionDropAdapter(viewer));
-	}
-
-	private void hookContextMenu() {
-		MenuManager menuMgr = new MenuManager("#PopupMenu");
-		menuMgr.setRemoveAllWhenShown(true);
-		menuMgr.addMenuListener(new IMenuListener() {
-			public void menuAboutToShow(IMenuManager manager) {
-
-			}
-		});
-		Menu menu = menuMgr.createContextMenu(viewer.getControl());
-		viewer.getControl().setMenu(menu);
-		getSite().registerContextMenu(menuMgr, viewer);
-	}
-
-	public void setFocus() {
-		viewer.getControl().setFocus();
-	}
-
-	@SuppressWarnings("unchecked")
-	public void dropToSelection(Object data) {
-
-		if (data instanceof TreeSelection) {
-			TreeSelection tree = (TreeSelection) data;
-			if (tree.toList().stream().allMatch(this::validateSelection))
-				selection.addAll(tree.toList());
-		} else if (data instanceof Collection<?>) {
-			Collection<Object> arrayselection = (Collection<Object>) data;
-			if (arrayselection.stream().allMatch(this::validateSelection))
-				selection.addAll(arrayselection);
-		} else if (validateSelection(data))
-			selection.add(data);
-
-		viewer.refresh();
-	}
-
-	private boolean validateSelection(Object target) {
-		Collection<ArtifactHandler> artifactHandlers = ExtensionPointHelper.getArtifactHandlers();
-		List<ArtifactHandler> availableHandlers = artifactHandlers.stream()
-				.filter(handler -> handler.canHandleSelection(target)).collect(Collectors.toList());
-		Optional<PriorityHandler> priorityHandler = ExtensionPointHelper.getPriorityHandler();
-		if (availableHandlers.size() == 0) {
-			MessageDialog.openWarning(getSite().getShell(), "No handler for selected item",
-					"There is no handler for " + target + " so it will be ignored.");
-		} else if (availableHandlers.size() > 1 && !priorityHandler.isPresent()) {
-			MessageDialog.openWarning(getSite().getShell(), "Multiple handlers for selected item",
-					"There are multiple handlers for " + target + " so it will be ignored.");
-		} else if (availableHandlers.size() > 1 && !priorityHandler.isPresent()) {
-			// TODO check if the priority handler can give exactly one artifact
-			// handler, if not flag for multiple selections
-		} else
-			return true;
-
-		return false;
-	}
-
-	public List<Object> getSelection() {
-		return new ArrayList<Object>(selection);
-	}
-
-	public void clearSelection() {
-		selection.clear();
-		viewer.refresh();
-	}
-
-	public static SelectionView getOpenedView() {
-		try {
-			return (SelectionView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ID);
-		} catch (PartInitException e) {
-			e.printStackTrace();
-		}
-
-		return null;
-	}
-
-	public void removeFromSelection(List<Object> currentselection) {
-		selection.removeAll(currentselection);
-		viewer.refresh();
-	}
-}
diff --git a/pom.xml b/pom.xml
index 9a2eba0..906c6b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,125 +1,200 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (c) 2016 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 v1.0
-    which accompanies this distribution, and is available at
-    http://www.eclipse.org/legal/epl-v10.html
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+	Copyright (c) 2016 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 v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
 
-      Contributors:
-         Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
-         -->
+	Contributors:
+		Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+--><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>
 
-<project
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-  <modelVersion>4.0.0</modelVersion>
+	<groupId>org.eclipse.capra</groupId>
+	<artifactId>parent</artifactId>
+	<version>0.7.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+    <name>Capra</name>
 
-  <groupId>org.eclipse.capra</groupId>
-  <artifactId>parent</artifactId>
-  <version>0.7.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
+	<modules>
+		<module>bundles/org.eclipse.capra.core</module>
+		<module>bundles/org.eclipse.capra.documentation</module>
+		<module>bundles/org.eclipse.capra.generic.persistence</module>
+		<module>bundles/org.eclipse.capra.generic.priority</module>
+		<module>bundles/org.eclipse.capra.generic.tracemodels</module>
+		<module>bundles/org.eclipse.capra.generic.artifactmodel</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>
+		<module>bundles/org.eclipse.capra.handler.gef</module>
+		<module>bundles/org.eclipse.capra.handler.jdt</module>
+		<module>bundles/org.eclipse.capra.handler.hudson</module>
+		<module>bundles/org.eclipse.capra.handler.office</module>
+		<module>bundles/org.eclipse.capra.handler.reqIf</module>
+		<module>bundles/org.eclipse.capra.handler.marker</module>
+		<module>bundles/org.eclipse.capra.handler.mylyn</module>
+		<module>bundles/org.eclipse.capra.handler.papyrus</module>
+		<module>bundles/org.eclipse.capra.handler.php</module>
+		<module>bundles/org.eclipse.capra.handler.uml</module>
+		<module>bundles/org.eclipse.capra.ui</module>
+		<module>bundles/org.eclipse.capra.ui.notification</module>
+		<module>bundles/org.eclipse.capra.ui.plantuml</module>
+		<module>bundles/org.eclipse.capra.ui.cdt</module>
+		<module>bundles/org.eclipse.capra.ui.jdt</module>
+		<module>bundles/org.eclipse.capra.ui.office</module>
+		<module>bundles/org.eclipse.capra.ui.drive</module>
+		<module>bundles/org.eclipse.capra.ui.zest</module>
+		<module>bundles/org.eclipse.capra.ui.reqif</module>
+		
+		<!-- Tests -->
+		<module>tests/org.eclipse.capra.testsuite</module>
+		<module>tests/org.eclipse.capra.handler.cdt.tests</module>
+		<module>tests/org.eclipse.capra.handler.jdt.tests</module>
+		<module>tests/org.eclipse.capra.handler.uml.tests</module>
+        
+		
+		<!-- Features -->
+		<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.cdt.feature</module>
+		<module>features/org.eclipse.capra.handler.hudson.feature</module>
+		<module>features/org.eclipse.capra.handler.office.feature</module>
+		<module>features/org.eclipse.capra.handler.jdt.feature</module>
+		<module>features/org.eclipse.capra.handler.reqIf.feature</module>
+		<module>features/org.eclipse.capra.handler.papyrus.feature</module>
+		<module>features/org.eclipse.capra.handler.php.feature</module>
+		<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>
+		
+		<!-- Releng -->
+		<module>releng/org.eclipse.capra.releng.target</module>
+		<module>releng/org.eclipse.capra.releng.p2</module>
+		
+	</modules>
 
-  <modules>
-    <module>org.eclipse.capra.core</module>
-    <module>org.eclipse.capra.documentation</module>
-    <module>org.eclipse.capra.feature</module>
-    <module>org.eclipse.capra.generic.persistence</module>
-    <module>org.eclipse.capra.generic.priority</module>
-    <module>org.eclipse.capra.generic.tracemodels</module>
-    <module>org.eclipse.capra.handler.cdt</module>
-    <module>org.eclipse.capra.handler.emf</module>
-    <module>org.eclipse.capra.handler.file</module>
-    <module>org.eclipse.capra.handler.gef</module>
-    <module>org.eclipse.capra.handler.hudson</module>
-    <module>org.eclipse.capra.handler.jdt</module>
-    <module>org.eclipse.capra.handler.mylyn</module>
-    <module>org.eclipse.capra.handler.papyrus</module>
-    <module>org.eclipse.capra.testsuite</module>
-    <module>org.eclipse.capra.ui</module>
-    <module>org.eclipse.capra.ui.notification</module>
-    <module>org.eclipse.capra.ui.plantuml</module>
-    <module>org.eclipse.capra.releng.target</module>
-    <module>org.eclipse.capra.releng.p2</module>
-  </modules>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<tycho-version>1.3.0</tycho-version>
+		<org.jboss.tools.tycho-plugins.version>1.3.0</org.jboss.tools.tycho-plugins.version>
+	</properties>
 
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <tycho-version>0.24.0</tycho-version>
-  </properties>
+	<profiles>
+		<profile>
+			<id>macosx-jvm-flags</id>
+			<activation>
+				<os>
+					<family>mac</family>
+				</os>
+			</activation>
+			<properties>
+				<os-jvm-flags>-XstartOnFirstThread</os-jvm-flags>
+			</properties>
+		</profile>
+	</profiles>
 
-  <profiles>
-  </profiles>
+	<repositories>
+		<repository>
+			<id>license-feature</id>
+			<url>http://download.eclipse.org/cbi/updates/license/</url>
+			<layout>p2</layout>
+		</repository>
+		<repository>
+			<id>jboss</id>
+			<url>https://repository.jboss.org/nexus/content/repositories/public/</url>
+			<layout>default</layout>
+		</repository>
+	</repositories>
+	
+	 <scm>
+       <connection>scm:git:https://git.eclipse.org/r/capra/org.eclipse.capra.git</connection>
+       <developerConnection>scm:git:https://git.eclipse.org/r/capra/org.eclipse.capra.git</developerConnection>
+       <tag>0.7.0</tag>
+   </scm>
 
-  <repositories>
-    <repository>
-      <id>license-feature</id>
-      <url>http://download.eclipse.org/cbi/updates/license/</url>
-      <layout>p2</layout>
-    </repository>
-  </repositories>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-maven-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<extensions>true</extensions>
+			</plugin>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.eclipse.tycho</groupId>
-        <artifactId>tycho-maven-plugin</artifactId>
-        <version>${tycho-version}</version>
-        <extensions>true</extensions>
-      </plugin>
+			<!-- Only required if tests need UI -->
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-surefire-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<configuration>
+					<useUIHarness>true</useUIHarness>
+					<useUIThread>true</useUIThread>
+					<argLine>${os-jvm-flags}</argLine>
+					<dependencies>
+						<dependency>
+							<type>eclipse-plugin</type>
+							<artifactId>org.eclipse.equinox.event</artifactId>
+							<version>0.0.0</version>
+						</dependency>
+					</dependencies>
+				</configuration>
+			</plugin>
 
-      <!-- Only required if tests need UI -->
-      <plugin>
-        <groupId>org.eclipse.tycho</groupId>
-        <artifactId>tycho-surefire-plugin</artifactId>
-        <version>${tycho-version}</version>
-        <configuration>
-          <useUIHarness>true</useUIHarness>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.eclipse.tycho</groupId>
-        <artifactId>target-platform-configuration</artifactId>
-        <version>${tycho-version}</version>
-        <configuration>
-          <target>
-            <artifact>
-              <groupId>org.eclipse.capra</groupId>
-              <artifactId>org.eclipse.capra.releng.target</artifactId>
-              <version>0.7.0-SNAPSHOT</version>
-            </artifact>
-          </target>
-          <environments>
-            <environment>
-              <os>win32</os>
-              <ws>win32</ws>
-              <arch>x86</arch>
-            </environment>
-            <environment>
-              <os>win32</os>
-              <ws>win32</ws>
-              <arch>x86_64</arch>
-            </environment>
-            <environment>
-              <os>linux</os>
-              <ws>gtk</ws>
-              <arch>x86</arch>
-            </environment>
-            <environment>
-              <os>linux</os>
-              <ws>gtk</ws>
-              <arch>x86_64</arch>
-            </environment>
-            <environment>
-              <os>macosx</os>
-              <ws>cocoa</ws>
-              <arch>x86_64</arch>
-            </environment>
-          </environments>
-        </configuration>
-      </plugin>
-
-    </plugins>
-  </build>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>target-platform-configuration</artifactId>
+				<version>${tycho-version}</version>
+				<configuration>
+					<target>
+						<artifact>
+							<groupId>org.eclipse.capra</groupId>
+							<artifactId>org.eclipse.capra.releng.target</artifactId>
+							<version>0.7.1-SNAPSHOT</version>
+						</artifact>
+					</target>
+					<environments>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86</arch>
+						</environment>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86_64</arch>
+						</environment>
+						<environment>
+							<os>linux</os>
+							<ws>gtk</ws>
+							<arch>x86</arch>
+						</environment>
+						<environment>
+							<os>linux</os>
+							<ws>gtk</ws>
+							<arch>x86_64</arch>
+						</environment>
+						<environment>
+							<os>macosx</os>
+							<ws>cocoa</ws>
+							<arch>x86_64</arch>
+						</environment>
+					</environments>
+				</configuration>
+			</plugin>
+			
+			<plugin>
+				<groupId>com.itemis.maven.plugins</groupId>
+				<artifactId>unleash-maven-plugin</artifactId>
+				<version>2.9.3</version>
+				<dependencies>
+					<dependency>
+						<groupId>com.itemis.maven.plugins</groupId>
+						<artifactId>unleash-scm-provider-git</artifactId>
+						<version>2.2.0</version>
+					</dependency>
+				</dependencies>
+			</plugin>
+		</plugins>
+	</build>
 </project>
diff --git a/releng/org.eclipse.capra.oomph/.project b/releng/org.eclipse.capra.oomph/.project
new file mode 100644
index 0000000..b2ea22e
--- /dev/null
+++ b/releng/org.eclipse.capra.oomph/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.oomph</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/releng/org.eclipse.capra.oomph/EclipseCapra.setup b/releng/org.eclipse.capra.oomph/EclipseCapra.setup
new file mode 100644
index 0000000..9d39909
--- /dev/null
+++ b/releng/org.eclipse.capra.oomph/EclipseCapra.setup
@@ -0,0 +1,717 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<setup:Project
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:git="http://www.eclipse.org/oomph/setup/git/1.0"
+    xmlns:jdt="http://www.eclipse.org/oomph/setup/jdt/1.0"
+    xmlns:mylyn="http://www.eclipse.org/oomph/setup/mylyn/1.0"
+    xmlns:pde="http://www.eclipse.org/oomph/setup/pde/1.0"
+    xmlns:predicates="http://www.eclipse.org/oomph/predicates/1.0"
+    xmlns:projects="http://www.eclipse.org/oomph/setup/projects/1.0"
+    xmlns:setup="http://www.eclipse.org/oomph/setup/1.0"
+    xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0"
+    xmlns:setup.workingsets="http://www.eclipse.org/oomph/setup/workingsets/1.0"
+    xsi:schemaLocation="http://www.eclipse.org/oomph/setup/git/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Git.ecore http://www.eclipse.org/oomph/setup/jdt/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/JDT.ecore http://www.eclipse.org/oomph/setup/mylyn/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Mylyn.ecore http://www.eclipse.org/oomph/setup/pde/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/PDE.ecore http://www.eclipse.org/oomph/predicates/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Predicates.ecore http://www.eclipse.org/oomph/setup/projects/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Projects.ecore http://www.eclipse.org/oomph/setup/workingsets/1.0 index:/models/SetupWorkingSets.ecore"
+    name="capra"
+    label="Eclipse Capra">
+  <setupTask
+      xsi:type="setup:CompoundTask"
+      name="User Preferences">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/UserPreferences">
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.convert_functional_interfaces">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_parameters_final">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_methods">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_members">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_method_access_only_if_necessary">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_this_for_non_static_method_access">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces_all">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.never_use_blocks">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_default_serial_version_id">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.correct_indentation">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_field_accesses_with_declaring_class">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.never_use_parentheses_in_expressions">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_parentheses_in_expressions">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.insert_inferred_type_arguments">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_parentheses_in_expressions">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_this_for_non_static_field_access">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_methods">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_member_accesses_with_declaring_class">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_redundant_semicolons">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_variable_declarations_final">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_override_annotations_interface_methods">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.pde.ui/Preferences.MainPage.overwriteBuildFilesOnExport">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_method_accesses_with_declaring_class">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.format_source_code_changes_only">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_blocks">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_blocks_only_for_return_and_throw">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_lambda">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_override_annotations">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unnecessary_nls_tags">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_types">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.format_source_code">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces_ignore_empty">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_private_constructors">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_local_variable_final">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_type_abstract_if_missing_method">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.organize_imports">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_private_fields_final">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_field_access">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.sort_members">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_redundant_modifiers">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.on_save_use_additional_actions">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_anonymous_class_creation">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.convert_to_enhanced_for_loop">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_local_variables">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_deprecated_annotations">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_method_access">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_redundant_type_arguments">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.sort_members_all">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_generated_serial_version_id">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_nls_tags">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_serial_version_id">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_imports">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unnecessary_casts">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_blocks">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_fields">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_field_access_only_if_necessary">
+        <value>record</value>
+      </detail>
+      <detail
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_annotations">
+        <value>record</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup:CompoundTask"
+        name="org.eclipse.jdt.ui">
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_default_serial_version_id"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_generated_serial_version_id"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_annotations"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_deprecated_annotations"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_methods"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_nls_tags"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_override_annotations"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_missing_override_annotations_interface_methods"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.add_serial_version_id"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_blocks"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_parentheses_in_expressions"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_this_for_non_static_field_access"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.always_use_this_for_non_static_method_access"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.convert_functional_interfaces"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.convert_to_enhanced_for_loop"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.correct_indentation"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.format_source_code"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.format_source_code_changes_only"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.insert_inferred_type_arguments"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_local_variable_final"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_parameters_final"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_private_fields_final"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_type_abstract_if_missing_method"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.make_variable_declarations_final"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.never_use_blocks"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.never_use_parentheses_in_expressions"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.on_save_use_additional_actions"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.organize_imports"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_field_accesses_with_declaring_class"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_member_accesses_with_declaring_class"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.qualify_static_method_accesses_with_declaring_class"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_private_constructors"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_redundant_modifiers"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_redundant_semicolons"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_redundant_type_arguments"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces_all"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_trailing_whitespaces_ignore_empty"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unnecessary_casts"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unnecessary_nls_tags"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_imports"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_local_variables"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_fields"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_members"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_methods"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.remove_unused_private_types"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.sort_members"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.sort_members_all"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_anonymous_class_creation"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_blocks"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_blocks_only_for_return_and_throw"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_lambda"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_parentheses_in_expressions"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_field_access"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_field_access_only_if_necessary"
+          value="true"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_method_access"
+          value="false"/>
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.jdt.ui/sp_cleanup.use_this_for_non_static_method_access_only_if_necessary"
+          value="true"/>
+    </setupTask>
+    <setupTask
+        xsi:type="setup:CompoundTask"
+        name="org.eclipse.pde.ui">
+      <setupTask
+          xsi:type="setup:PreferenceTask"
+          key="/instance/org.eclipse.pde.ui/Preferences.MainPage.overwriteBuildFilesOnExport"
+          value="prompt"/>
+    </setupTask>
+  </setupTask>
+  <setupTask
+      xsi:type="setup:EclipseIniTask"
+      option="-Xmx"
+      value="2048m"
+      vm="true">
+    <description>Set the heap space needed to work with the projects of ${scope.project.label}</description>
+  </setupTask>
+  <setupTask
+      xsi:type="setup:EclipseIniTask"
+      option="-Doomph.redirection.capra"
+      value="=https://git.eclipse.org/c/capra/org.eclipse.capra.git/plain/releng/org.eclipse.capra.oomph/EclipseCapra.setup?h=develop->${git.clone.capra.location|uri}/.../Users/EclipseCapra.setup"
+      vm="true">
+    <description>
+      Set an Oomph redirection system property to redirect the logical location of this setup to its physical location in the Git clone.
+      Before enabling this task, replace '...' with the repository path of this setup's containing project.
+    </description>
+  </setupTask>
+  <setupTask
+      xsi:type="setup:ResourceCreationTask"
+      excludedTriggers="STARTUP MANUAL"
+      content="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>&#xD;&#xA;&lt;section name=&quot;Workbench&quot;>&#xD;&#xA;&#x9;&lt;section name=&quot;org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart&quot;>&#xD;&#xA;&#x9;&#x9;&lt;item value=&quot;true&quot; key=&quot;group_libraries&quot;/>&#xD;&#xA;&#x9;&#x9;&lt;item value=&quot;false&quot; key=&quot;linkWithEditor&quot;/>&#xD;&#xA;&#x9;&#x9;&lt;item value=&quot;2&quot; key=&quot;layout&quot;/>&#xD;&#xA;&#x9;&#x9;&lt;item value=&quot;2&quot; key=&quot;rootMode&quot;/>&#xD;&#xA;&#x9;&#x9;&lt;item value=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;packageExplorer configured=&amp;quot;true&amp;quot; group_libraries=&amp;quot;1&amp;quot; layout=&amp;quot;2&amp;quot; linkWithEditor=&amp;quot;0&amp;quot; rootMode=&amp;quot;2&amp;quot; sortWorkingSets=&amp;quot;false&amp;quot; workingSetName=&amp;quot;&amp;quot;&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;localWorkingSetManager&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;workingSet editPageId=&amp;quot;org.eclipse.jdt.internal.ui.OthersWorkingSet&amp;quot; factoryID=&amp;quot;org.eclipse.ui.internal.WorkingSetFactory&amp;quot; id=&amp;quot;1382792884467_1&amp;quot; label=&amp;quot;Other Projects&amp;quot; name=&amp;quot;Other Projects&amp;quot;/&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;/localWorkingSetManager&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;activeWorkingSet workingSetName=&amp;quot;Other Projects&amp;quot;/&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;allWorkingSets workingSetName=&amp;quot;Other Projects&amp;quot;/&amp;gt;&amp;#x0D;&amp;#x0A;&amp;lt;/packageExplorer&amp;gt;&quot; key=&quot;memento&quot;/>&#xD;&#xA;&#x9;&lt;/section>&#xD;&#xA;&lt;/section>&#xD;&#xA;"
+      targetURL="${workspace.location|uri}/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml"
+      encoding="UTF-8">
+    <description>Initialize JDT's package explorer to show working sets as its root objects</description>
+  </setupTask>
+  <setupTask
+      xsi:type="setup:VariableTask"
+      name="eclipse.target.platform"
+      defaultValue="eclipse-capra-e4.11"
+      storageURI="scope://Workspace"
+      label="Target Platform">
+    <choice
+        value="eclipse-capra-e4.6"
+        label="Capra for Eclipse Neon - 4.6"/>
+    <choice
+        value="eclipse-capra-e4.7"
+        label="Capra for Eclipse Oxygen - 4.7"/>
+    <choice
+        value="eclipse-capra-e4.8"
+        label="Capra for Eclipse Photon - 4.8"/>
+    <choice
+        value="eclipse-capra-e4.9"
+        label="Capra for Eclipse 2018-09 - 4.9"/>
+    <choice
+        value="eclipse-capra-e4.10"
+        label="Capra for Eclipse 2018-12 - 4.10"/>
+    <choice
+        value="eclipse-capra-e4.11"
+        label="Capra for Eclipse 2019-03 - 4.11"/>
+    <description>Choose the compatibility level of the target platform</description>
+  </setupTask>
+  <setupTask
+      xsi:type="setup.p2:P2Task">
+    <requirement
+        name="org.eclipse.pde.feature.group"/>
+    <requirement
+        name="org.eclipse.cbi.targetplatform-feature.feature.group"
+        optional="true"
+        filter=""/>
+    <requirement
+        name="org.eclipse.jdt.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.hudson.feature.group"/>
+    <requirement
+        name="org.eclipse.cdt.mylyn.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.ide_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.java_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.pde_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.gerrit.feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.context_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.trac_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.git.feature.group"/>
+    <requirement
+        name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+    <requirement
+        name="org.eclipse.emf.sdk.feature.group"/>
+    <requirement
+        name="org.eclipse.emf.ecore.xcore.sdk.feature.group"/>
+    <requirement
+        name="org.eclipse.xtend.sdk.feature.group"/>
+    <repository
+        url="https://download.eclipse.org/cbi/tpd/3.0.0-SNAPSHOT/"/>
+    <description>Install the tools needed in the IDE to work with the source code for ${scope.project.label}</description>
+  </setupTask>
+  <stream name="develop"
+      label="Developer">
+    <setupTask
+        xsi:type="jdt:JRETask"
+        version="JavaSE-1.8"
+        location="${jre.location-1.8}">
+      <description>Define the JRE needed to compile and run the Java projects of ${scope.project.label}</description>
+    </setupTask>
+    <setupTask
+        xsi:type="git:GitCloneTask"
+        id="git.clone.capra"
+        remoteURI="capra/org.eclipse.capra">
+      <annotation
+          source="http://www.eclipse.org/oomph/setup/InducedChoices">
+        <detail
+            key="inherit">
+          <value>eclipse.git.remoteURIs</value>
+        </detail>
+        <detail
+            key="label">
+          <value>${scope.project.label} Git repository</value>
+        </detail>
+        <detail
+            key="target">
+          <value>remoteURI</value>
+        </detail>
+      </annotation>
+      <configSections
+          name="user">
+        <properties
+            key="email"
+            value="${git.author.email}"/>
+      </configSections>
+      <description>${scope.project.label}</description>
+    </setupTask>
+    <setupTask
+        xsi:type="projects:ProjectsImportTask">
+      <sourceLocator
+          rootFolder="${git.clone.capra.location}"
+          locateNestedProjects="true"/>
+    </setupTask>
+    <setupTask
+        xsi:type="pde:TargetPlatformTask"
+        id="eclipse-capra-target"
+        name="${eclipse.target.platform}"/>
+    <setupTask
+        xsi:type="mylyn:MylynQueriesTask"
+        repositoryURL="https://bugs.eclipse.org/bugs"
+        userID="${bugzilla.id}"
+        password="${eclipse.user.password}">
+      <query
+          summary="Open Eclipse Capra Bugs"
+          url="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;list_id=18641821&amp;product=Capra&amp;query_format=advanced"/>
+    </setupTask>
+    <setupTask
+        xsi:type="mylyn:MylynQueriesTask"
+        connectorKind="org.eclipse.mylyn.gerrit"
+        repositoryURL="https://git.eclipse.org/r"
+        userID="${bugzilla.id}"
+        password="${eclipse.user.password}">
+      <query
+          summary="Open Capra Reviews">
+        <attribute
+            key="gerrit query type"
+            value="custom"/>
+        <attribute
+            key="gerrit query project"
+            value="capra/org.eclipse.capra"/>
+        <attribute
+            key="gerrit query string"
+            value="project:capra/org.eclipse.capra status:open"/>
+      </query>
+    </setupTask>
+    <setupTask
+        xsi:type="mylyn:MylynBuildsTask"
+        serverURL="https://ci.eclipse.org/capra"
+        userID="${bugzilla.id}"
+        password="${eclipse.user.password}">
+      <buildPlan
+          name="build-src-develop-nightly"/>
+      <buildPlan
+          name="build-gerrit-trigger"/>
+    </setupTask>
+    <setupTask
+        xsi:type="setup.workingsets:WorkingSetTask">
+      <workingSet
+          name="${scope.project.label}">
+        <predicate
+            xsi:type="predicates:AndPredicate">
+          <operand
+              xsi:type="predicates:RepositoryPredicate"
+              project="org.eclipse.capra.oomph"/>
+        </predicate>
+      </workingSet>
+      <description>The dynamic working sets for ${scope.project.label}</description>
+    </setupTask>
+  </stream>
+  <logicalProjectContainer
+      xsi:type="setup:ProjectCatalog"
+      href="index:/org.eclipse.setup#//@projectCatalogs[name='org.eclipse']"/>
+  <description>Eclipse Capra is an extensible traceability management tool</description>
+</setup:Project>
diff --git a/org.eclipse.capra.releng.p2/.project b/releng/org.eclipse.capra.releng.p2/.project
similarity index 100%
rename from org.eclipse.capra.releng.p2/.project
rename to releng/org.eclipse.capra.releng.p2/.project
diff --git a/releng/org.eclipse.capra.releng.p2/category.xml b/releng/org.eclipse.capra.releng.p2/category.xml
new file mode 100644
index 0000000..7dea1bc
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.p2/category.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <feature url="features/org.eclipse.capra.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.cdt.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.cdt.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.hudson.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.hudson.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.jdt.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.jdt.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.papyrus.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.papyrus.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.reqif.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.reqif.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.office.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.office.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.ui.plantuml.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.ui.plantuml.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.ui"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.ui.zest.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.ui.zest.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.ui"/>
+   </feature>
+   <feature url="features/org.eclipse.capra.handler.php.feature_0.7.1.qualifier.jar" id="org.eclipse.capra.handler.php.feature" version="0.7.1.qualifier">
+      <category name="org.eclipse.capra.handler"/>
+   </feature>
+   <category-def name="org.eclipse.capra" label="Eclipse Capra Traceability">
+      <description>
+         Eclipse Capra is an extensible traceability management tool.
+      </description>
+   </category-def>
+   <category-def name="org.eclipse.capra.handler" label="Capra Traceability Handlers">
+      <description>
+         Traceability handlers provide functionality to interface with different types of artifacts.
+      </description>
+   </category-def>
+   <category-def name="org.eclipse.capra.ui" label="Eclipse Capra Traceability Visualisation"/>
+</site>
diff --git a/releng/org.eclipse.capra.releng.p2/pom.xml b/releng/org.eclipse.capra.releng.p2/pom.xml
new file mode 100644
index 0000000..f04f6f5
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.p2/pom.xml
@@ -0,0 +1,80 @@
+<?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.7.1-SNAPSHOT</version>
+  </parent>
+  <groupId>org.eclipse.capra</groupId>
+  <artifactId>org.eclipse.capra.p2</artifactId>
+  <version>0.7.1-SNAPSHOT</version>
+  <packaging>eclipse-repository</packaging>
+  <name>Capra update site</name>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>jboss-public-repository-group</id>
+      <name>JBoss Public Repository Group</name>
+      <url>http://repository.jboss.org/nexus/content/groups/public/</url>
+    </pluginRepository>
+
+    <pluginRepository>
+      <id>jboss-snapshots-repository</id>
+      <name>JBoss Snapshots Repository</name>
+      <url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.eclipse.tycho</groupId>
+        <artifactId>tycho-p2-repository-plugin</artifactId>
+        <version>${tycho-version}</version>
+      </plugin>
+
+      <!-- Generate HTML version of update site -->
+      <!-- Also add additional repositories. Note that this
+           information could be entered in category.xml but Tycho
+           ignores it currently. See
+           https://bugs.eclipse.org/bugs/show_bug.cgi?id=453708 -->
+      <plugin>
+        <groupId>org.jboss.tools.tycho-plugins</groupId>
+        <artifactId>repository-utils</artifactId>
+        <version>${org.jboss.tools.tycho-plugins.version}</version>
+
+        <executions>
+          <execution>
+            <id>generate-facade</id>
+            <phase>package</phase>
+
+            <goals>
+              <goal>generate-repository-facade</goal>
+            </goals>
+
+            <configuration>
+              <siteTemplateFolder>siteTemplate</siteTemplateFolder>
+
+              <symbols>
+                <update.site.name>${project.parent.name}</update.site.name>
+              </symbols>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/releng/org.eclipse.capra.releng.p2/siteTemplate/index.html b/releng/org.eclipse.capra.releng.p2/siteTemplate/index.html
new file mode 100644
index 0000000..37b7456
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.p2/siteTemplate/index.html
@@ -0,0 +1,25 @@
+<html>
+	<head>
+		<title>${update.site.name} Update Site</title>
+	</head>
+
+	<body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0">
+		
+		<h2 class="title">${update.site.name} - Use this URL in Eclipse to install ${update.site.name}</h2>
+	
+		<p>This is the Update Site for ${update.site.name}.
+			<ol>
+				<li>To install ${update.site.name} from this site, start up Eclipse, then do:
+					<ul><code><strong>Help > Install New Software... ></strong></code></ul>
+				</li>
+				<li>Copy this site's URL into Eclipse, and hit Enter.</li>
+				<li>When the site loads, select the features to install, or click the <code><strong>Select All</strong></code> button.</li>
+				<li>To properly resolve all dependencies, check 
+					<ul><code><strong>[x] Contact all update sites during install to find required software</strong></code></ul>
+				<li>Click <code><strong>Next</strong></code>, agree to the license terms, and install.</li>
+			</ol>
+		</p>
+
+		<p>${site.contents}</p>
+	</body>
+</html>
diff --git a/releng/org.eclipse.capra.releng.target/.project b/releng/org.eclipse.capra.releng.target/.project
new file mode 100644
index 0000000..859b58f
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.releng.target</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
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
new file mode 100644
index 0000000..04ceb5b
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.target
@@ -0,0 +1,70 @@
+<?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="1556805884">
+  <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"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.6.0.201811241055"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.5.201812111422"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.8.0.v20181203-0948"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.16.0.v20181206-1055"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.2.0.201812120922"/>
+      <unit id="org.eclipse.php.feature.group" version="6.2.0.201812112302"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.16.0.v20181203-1555"/>
+      <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.16.0.v20181203-1555"/>
+      <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">
+      <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="21.0.0.v20170206-1425"/>
+      <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-2018-09" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/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.8.1.201409171422"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.8.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.23"/>
+      <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.4.201902190522"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </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
new file mode 100644
index 0000000..937c898
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.10.tpd
@@ -0,0 +1,64 @@
+target "eclipse-capra-e4.10" with source requirements
+
+location "http://download.eclipse.org/releases/2018-12/" eclipse-2018-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
+}
+
+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/R20181128170323/repository" eclipse-orbit-2018-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.8.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
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 1.1.23
+}
\ 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
new file mode 100644
index 0000000..8d63c0f
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.target
@@ -0,0 +1,70 @@
+<?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="1556805884">
+  <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"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.7.0.201902260903"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.6.201903050300"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.9.0.v20190312-0929"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.17.0.v20190301-1325"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.3.0.201903131008"/>
+      <unit id="org.eclipse.php.feature.group" version="6.2.0.201812112302"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.17.0.v20190304-1445"/>
+      <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.17.0.v20190304-1445"/>
+      <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">
+      <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="21.0.0.v20170206-1425"/>
+      <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-2018-09" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20190226160451/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.8.1.201409171422"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.8.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.23"/>
+      <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.4.201902190522"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </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
new file mode 100644
index 0000000..c44aa3f
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.11.tpd
@@ -0,0 +1,64 @@
+target "eclipse-capra-e4.11" with source requirements
+
+location "http://download.eclipse.org/releases/2019-03/" eclipse-2019-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
+}
+
+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/R20190226160451/repository" eclipse-orbit-2018-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.8.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
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 1.1.23
+}
\ 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
new file mode 100644
index 0000000..fcc5cc5
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.target
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="Neon" sequenceNumber="60">
+<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"/>
+<unit id="org.eclipse.gef4.geometry.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.fx.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.mvc.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.mvc.examples.source.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.layout.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.graph.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.zest.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.zest.examples.source.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.dot.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.cloudio.sdk.feature.group" version="0.0.0"/>
+<repository location="http://download.eclipse.org/tools/gef/gef4/updates/releases"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" 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 location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" 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 includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.php.feature.group" version="4.2.0.201611142355"/>
+<repository location="http://download.eclipse.org/releases/neon"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.4.0.v20160526-0606"/>
+<unit id="org.eclipse.mylyn.ide_feature.feature.group" version="3.21.0.v20160912-1820"/>
+<unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
+<unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.2.0.201612061315"/>
+<unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="2.0.2.201612071107"/>
+<unit id="org.eclipse.cdt.sdk.feature.group" version="9.2.0.201612061315"/>
+<unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.2.1.201608311750"/>
+<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"/>
+<repository location="http://download.eclipse.org/releases/neon"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.0.201804061108"/>
+<repository location="http://featureide.cs.ovgu.de/update/v3/"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.apache.poi.ooxml" version="3.9.0.v201405241905"/>
+<unit id="org.slf4j.api" version="1.7.2.v20121108-1250"/>
+<unit id="org.apache.xmlbeans" version="2.3.0.v201605172150"/>
+<unit id="com.google.guava" version="15.0.0.v201403281430"/>
+<unit id="com.google.guava.source" version="15.0.0.v201403281430"/>
+<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="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"/>
+<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"/>
+<repository location="http://hallvard.github.io/plantuml/"/>
+</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
new file mode 100644
index 0000000..d2a852c
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.6.tpd
@@ -0,0 +1,60 @@
+target "eclipse-capra-e4.6" with source requirements
+
+location "http://download.eclipse.org/releases/neon/" eclipse-neon {
+	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
+}
+
+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/R20170307180635/repository" eclipse-orbit-neon.3 {
+	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/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.23
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group
+}
\ 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
new file mode 100644
index 0000000..0e27dbf
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.target
@@ -0,0 +1,70 @@
+<?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="1556805888">
+  <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"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.4.3.201802261533"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.2.201709090201"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.5.0.v20170613-0242"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.13.0.v20170609-0928"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="3.3.0.201803070847"/>
+      <unit id="org.eclipse.php.feature.group" version="5.3.0.201803070838"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.12.0.v20170519-1412"/>
+      <unit id="org.eclipse.mylyn.gerrit.feature.feature.group" version="2.14.0.v20170411-2108"/>
+      <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"/>
+      <repository id="eclipse-oxygen" location="http://download.eclipse.org/releases/oxygen/"/>
+    </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="21.0.0.v20170206-1425"/>
+      <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.6.2.v20161117-2150"/>
+      <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-oxygen3a" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20180330011457/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.8.1.201409171422"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.8.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.23"/>
+      <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.4.201902190522"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </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
new file mode 100644
index 0000000..cf64e97
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.7.tpd
@@ -0,0 +1,64 @@
+target "eclipse-capra-e4.7" with source requirements
+
+location "http://download.eclipse.org/releases/oxygen/" eclipse-oxygen {
+	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
+}
+
+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/R20180330011457/repository" eclipse-orbit-oxygen3a {
+	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.8.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.23
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group
+}
\ 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
new file mode 100644
index 0000000..b1c1701
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.target
@@ -0,0 +1,70 @@
+<?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="1556805884">
+  <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"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.5.0.201806170908"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.3.201805161152"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.6.0.v20180527-1213"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.14.0.v20180529-1157"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.0.0.201806130934"/>
+      <unit id="org.eclipse.php.feature.group" version="6.0.0.201806122250"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.14.0.v20180523-0937"/>
+      <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.14.0.v20180523-0937"/>
+      <repository id="eclipse-photon" location="http://download.eclipse.org/releases/photon/"/>
+    </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="21.0.0.v20170206-1425"/>
+      <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-oxygen3a" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20180606145124/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.8.1.201409171422"/>
+      <repository location="http://download.eclipse.org/sphinx/releases/0.8.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.23"/>
+      <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.4.201902190522"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </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
new file mode 100644
index 0000000..0029991
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.8.tpd
@@ -0,0 +1,64 @@
+target "eclipse-capra-e4.8" with source requirements
+
+location "http://download.eclipse.org/releases/photon/" eclipse-photon {
+	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
+}
+
+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/R20180606145124/repository" eclipse-orbit-oxygen3a {
+	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.8.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.23
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group
+}
\ 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
new file mode 100644
index 0000000..a437874
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.target
@@ -0,0 +1,67 @@
+<?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="1556804546">
+  <locations>
+    <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+      <unit id="org.eclipse.cdt.sdk.feature.group" version="9.5.3.201809121146"/>
+      <unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.5.3.201809121146"/>
+      <unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.3.4.201806221350"/>
+      <unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.7.0.v20180711-0440"/>
+      <unit id="org.eclipse.emf.sdk.feature.group" version="2.15.0.v20180905-1732"/>
+      <unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="4.1.0.201809120950"/>
+      <unit id="org.eclipse.php.feature.group" version="6.1.0.201808281524"/>
+      <unit id="org.eclipse.xtext.sdk.feature.group" version="2.15.0.v20180916-1232"/>
+      <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.15.0.v20180916-1232"/>
+      <repository id="eclipse-2018-09" location="http://download.eclipse.org/releases/2018-09/"/>
+    </location>
+    <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" 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 includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" 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="21.0.0.v20170206-1425"/>
+      <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-2018-09" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20180905201904/repository"/>
+    </location>
+    <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" 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 includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+      <unit id="net.sourceforge.plantuml.feature.feature.group" version="1.1.23"/>
+      <repository id="plantuml" location="http://hallvard.github.io/plantuml/"/>
+    </location>
+    <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+      <unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.4.201902190522"/>
+      <repository id="feature-ide" location="http://featureide.cs.ovgu.de/update/v3/"/>
+    </location>
+	  <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+		  <unit id="org.eclipse.rmf.reqif10.pror.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+		  <unit id="org.eclipse.rmf.reqif10.sdk.feature.feature.group" version="0.13.0.201509161042"/>
+		  <repository location="http://download.eclipse.org/rmf/updates/releases"/>
+	  </location>
+	  <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" 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"/>
+	  </location>
+  </locations>
+</target>
\ No newline at end of file
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
new file mode 100644
index 0000000..44f6678
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/eclipse-capra-e4.9.tpd
@@ -0,0 +1,64 @@
+target "eclipse-capra-e4.9" with source requirements
+
+location "http://download.eclipse.org/releases/2018-09/" eclipse-2018-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
+}
+
+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/R20180905201904/repository" eclipse-orbit-2018-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.8.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
+}
+
+location "http://featureide.cs.ovgu.de/update/v3/" feature-ide {
+	de.ovgu.featureide.featuremodeling.feature.group 1.1.23
+}
\ 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
new file mode 100644
index 0000000..fcc5cc5
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/org.eclipse.capra.releng.target.target
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.8"?><target name="Neon" sequenceNumber="60">
+<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"/>
+<unit id="org.eclipse.gef4.geometry.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.fx.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.mvc.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.mvc.examples.source.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.layout.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.graph.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.zest.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.zest.examples.source.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.dot.sdk.feature.group" version="0.0.0"/>
+<unit id="org.eclipse.gef4.cloudio.sdk.feature.group" version="0.0.0"/>
+<repository location="http://download.eclipse.org/tools/gef/gef4/updates/releases"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" 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 location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" 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 includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.php.feature.group" version="4.2.0.201611142355"/>
+<repository location="http://download.eclipse.org/releases/neon"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.emf.ecore.xcore.sdk.feature.group" version="1.4.0.v20160526-0606"/>
+<unit id="org.eclipse.mylyn.ide_feature.feature.group" version="3.21.0.v20160912-1820"/>
+<unit id="org.eclipse.gef.sdk.feature.group" version="3.11.0.201606061308"/>
+<unit id="org.eclipse.cdt.testsrunner.feature.feature.group" version="9.2.0.201612061315"/>
+<unit id="org.eclipse.papyrus.sdk.feature.feature.group" version="2.0.2.201612071107"/>
+<unit id="org.eclipse.cdt.sdk.feature.group" version="9.2.0.201612061315"/>
+<unit id="org.eclipse.emf.compare.ide.ui.feature.group" version="3.2.1.201608311750"/>
+<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"/>
+<repository location="http://download.eclipse.org/releases/neon"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="de.ovgu.featureide.featuremodeling.feature.group" version="3.5.0.201804061108"/>
+<repository location="http://featureide.cs.ovgu.de/update/v3/"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.apache.poi.ooxml" version="3.9.0.v201405241905"/>
+<unit id="org.slf4j.api" version="1.7.2.v20121108-1250"/>
+<unit id="org.apache.xmlbeans" version="2.3.0.v201605172150"/>
+<unit id="com.google.guava" version="15.0.0.v201403281430"/>
+<unit id="com.google.guava.source" version="15.0.0.v201403281430"/>
+<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="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"/>
+<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"/>
+<repository location="http://hallvard.github.io/plantuml/"/>
+</location>
+</locations>
+</target>
diff --git a/releng/org.eclipse.capra.releng.target/pom.xml b/releng/org.eclipse.capra.releng.target/pom.xml
new file mode 100644
index 0000000..89df632
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/pom.xml
@@ -0,0 +1,26 @@
+<?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.7.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.1-SNAPSHOT</version>
+</project>
diff --git a/releng/org.eclipse.capra.releng.target/readme.md b/releng/org.eclipse.capra.releng.target/readme.md
new file mode 100644
index 0000000..bfca789
--- /dev/null
+++ b/releng/org.eclipse.capra.releng.target/readme.md
@@ -0,0 +1,20 @@
+# Defining Target Platforms
+
+We are using the TPD editor for target platforms which can be found at <https://github.com/eclipse-cbi/targetplatform-dsl>. It currently only works in Eclipse versions >= 2018.09, but can generate target definitions for any Eclipse platform.
+
+It allows defining target definitions with a DSL and generating `.target` files from them automatically. During the generation, the latest versions of the selected features are selected and added to the definitions.
+
+We are following a scheme that is used by some other Eclipse projects, e.g., [EASE](https://git.eclipse.org/c/ease/org.eclipse.ease.core.git/tree/releng/org.eclipse.ease.releng.target).
+
+# Building and developing
+	
+Tycho will use the file `org.eclipse.capra.releng.target.target` for builds. This file has to be manually overridden when a new target platform has been created.
+
+When developing, any of the target platforms can be used by first generating a target definition and then setting it as the current target platform. This allows developers to check compatibility in different Eclipse versions.
+
+# Available targets
+
+ * Neon.tpd - original platform for which Capra was developed
+ * Oxygen.tpd
+ * 2018-09.tpd - latest build platform
+	
\ No newline at end of file
diff --git a/org.eclipse.capra.core/.classpath b/tests/org.eclipse.capra.handler.cdt.tests/.classpath
similarity index 100%
copy from org.eclipse.capra.core/.classpath
copy to tests/org.eclipse.capra.handler.cdt.tests/.classpath
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/.project b/tests/org.eclipse.capra.handler.cdt.tests/.project
new file mode 100644
index 0000000..7d37cc6
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.cdt.tests</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/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.capra.handler.cdt.tests/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
copy to tests/org.eclipse.capra.handler.cdt.tests/.settings/org.eclipse.jdt.core.prefs
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
new file mode 100644
index 0000000..b0ac853
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CDT Handler tests
+Bundle-SymbolicName: org.eclipse.capra.handler.cdt.tests
+Bundle-Version: 0.7.1.qualifier
+Fragment-Host: org.eclipse.capra.handler.cdt
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.core.resources,
+ org.junit,
+ org.eclipse.cdt.managedbuilder.core,
+ org.eclipse.cdt.core,
+ org.eclipse.capra.generic.tracemodels,
+ org.eclipse.capra.generic.persistence,
+ org.eclipse.capra.generic.artifactmodel,
+ org.eclipse.cdt.managedbuilder.gnu.ui
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/build.properties b/tests/org.eclipse.capra.handler.cdt.tests/build.properties
new file mode 100644
index 0000000..d75096d
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/build.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
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/pom.xml b/tests/org.eclipse.capra.handler.cdt.tests/pom.xml
new file mode 100644
index 0000000..01ae458
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/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.7.1-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>org.eclipse.capra.handler.cdt.tests</artifactId>
+	<packaging>eclipse-test-plugin</packaging>
+
+</project>
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/CDTAnnotateTest.java b/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/CDTAnnotateTest.java
new file mode 100644
index 0000000..0fcfdce
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/CDTAnnotateTest.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.capra.handler.cdt.preferences.CDTPreferences;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EObject;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests the annotate capability of the CDTHandler. 
+ */
+public class CDTAnnotateTest {
+
+	private static final String NL = "\n";
+
+	private static ICProject project;
+	private CDTHandler handler = new CDTHandler();
+	private EObject artifactModel = TestUtil.setupModel();
+
+	@Before
+	public void setupTestProject() throws CoreException, BuildException {
+		System.out.println("Setting up test project");
+		project = TestUtil.setupTestProject("cdt");
+		CDTPreferences.getPreferences().putBoolean(CDTPreferences.ANNOTATE_CDT, true);
+		CDTPreferences.getPreferences().put(CDTPreferences.ANNOTATE_CDT_TAG, "req");
+		CDTPreferences.getPreferences().put(CDTPreferences.ANNOTATE_CDT_TAG_PREFIX, "@");
+		System.out.println("Done setting up test project");
+	}
+
+	@After
+	public void deleteTestProject() throws CoreException {
+		TestUtil.deleteTestProject(project);
+	}
+
+	/**
+	 * An annotation appears on a function without a previous comment. 
+	 */
+	@Test
+	public void shouldAnnotateMethod() throws Exception {
+		String source = "" +
+				"int foo() { return 0; }" + NL +
+				"";
+
+		ITranslationUnit tu = TestUtil.createTranslationUnit(project.getProject(), "bar.c", source);
+
+		// Annotate method foo()
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=cdt/{bar.c[foo#74", "foo");
+		handler.annotateArtifact(wrapper, "annotation");
+		String actual = tu.getBuffer().getContents();
+
+		String expected = "" +
+				"/**" + NL +
+				" * @req annotation" + NL +
+				" */" + NL +
+				"int foo() { return 0; }" + NL +
+				"";
+
+		assertEquals(expected, actual);
+	}
+	
+	@Test
+	public void shouldReplaceAnnotation() throws Exception {
+		String source = "" +
+			"/**" + NL +
+			" * @req annotation1" + NL +
+			" */" + NL +
+			"int foo() { return 0; }" + NL +
+			"";
+
+		ITranslationUnit tu = TestUtil.createTranslationUnit(project.getProject(), "bar2.c", source);
+
+		// Annotate method foo()
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=cdt/{bar2.c[foo#74", "foo");
+		handler.annotateArtifact(wrapper, "annotation2");
+		String actual = tu.getBuffer().getContents();
+
+		String expected = "" +
+				"/**" + NL +
+				" * @req annotation2" + NL +
+				" */" + NL +
+				"int foo() { return 0; }" + NL +
+				"";
+
+		// Will fail, doesn't replace annotation
+		assertEquals(expected, actual);
+	}
+
+	@Test
+	public void shouldPreserveComments() throws Exception {
+		String source = "" +
+				"/**" + NL +
+				" * Comment" + NL +
+				" */" + NL +
+				"int foo() { return 0; }" + NL +
+				"";
+
+		ITranslationUnit tu = TestUtil.createTranslationUnit(project.getProject(), "bar3.c", source);
+
+		// Annotate method foo()
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=cdt/{bar3.c[foo#74", "foo");
+		handler.annotateArtifact(wrapper, "annotation");
+		String actual = tu.getBuffer().getContents();
+
+		String expected = "" +
+				"/**" + NL +
+				" * Comment" + NL +
+				" * @req annotation" + NL +
+				" */" + NL +
+				"int foo() { return 0; }" + NL +
+				"";
+
+		assertEquals(expected, actual);
+	}
+}
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/CDTCommentUpdateTest.java b/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/CDTCommentUpdateTest.java
new file mode 100644
index 0000000..4796acd
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/CDTCommentUpdateTest.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Optional;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * A non-plugin test for the trickiest parts of the comment updating. 
+ */
+public class CDTCommentUpdateTest {
+	// Line separator that we tell the comment updater that the analysed file is using
+	private static final String NL = "\n";
+
+	@Test
+	public void normalCommentNoTag() {
+		String input = ""
+			+ "/**\n"
+			+ " * Comment\n"
+			+ " */\n";
+
+		String expected = ""
+			+ "/**\n"
+			+ " * Comment\n"
+			+ " * @tag annotation\n"
+			+ " */";
+
+		String result = CDTAnnotate.createNewCommentString(Optional.of(input), "annotation", "@tag", NL, false);
+
+		assertEquals(expected, result);
+	}
+
+	@Test
+	public void noComment() {
+		String expected = ""
+			+ "/**\n"
+			+ " * @tag annotation\n"
+			+ " */\n";
+
+		String result = CDTAnnotate.createNewCommentString(Optional.empty(), "annotation", "@tag", NL, false);
+
+		assertEquals(expected, result);
+	}
+	
+	@Test
+	@Ignore("Empty comments are not handled. Should they be")
+	public void emptyComment() {
+		@SuppressWarnings("unused")
+		String result = CDTAnnotate.createNewCommentString(Optional.of("  "), "annotation", "@tag", NL, false);
+	}
+	
+	@Test
+	public void commentEndOnSameLineNoTag() {
+		String input = "/** Comment */\n";
+
+		String expected = ""
+			+ "/** Comment\n"
+			+ " * @tag annotation\n"
+			+ " */";
+
+		String result = CDTAnnotate.createNewCommentString(Optional.of(input), "annotation", "@tag", NL, false);
+		assertEquals(expected, result);
+	}
+	
+	
+	@Test
+	public void normalCommentReplaceTag() {
+		String input = ""
+			+ "/**\n"
+			+ " * Comment\n"
+			+ " * @tag old_annotation\n"
+			+ " */\n";
+
+		String expected = ""
+			+ "/**\n"
+			+ " * Comment\n"
+			+ " * @tag annotation\n"
+			+ " */\n";
+
+		String result = CDTAnnotate.createNewCommentString(Optional.of(input), "annotation", "@tag", NL, false);
+
+		assertEquals(expected, result);
+	}
+	
+	@Test
+	public void commentReplaceTagAfterEmptyLine() {
+		String input = ""
+			+ "/**\n"
+			+ " * Comment\n"
+			+ " *\n"
+			+ " * @tag old_annotation\n"
+			+ " */\n";
+
+		String expected = ""
+			+ "/**\n"
+			+ " * Comment\n"
+			+ " *\n"
+			+ " * @tag annotation\n"
+			+ " */\n";
+
+		String result = CDTAnnotate.createNewCommentString(Optional.of(input), "annotation", "@tag", NL, false);
+
+		assertEquals(expected, result);
+	}
+
+	@Test
+	public void commentReplaceTagSameLine() {
+		String input = "/** Comment @tag old_annotation */\n";
+		String expected = "/** Comment @tag annotation */\n";
+
+		String result = CDTAnnotate.createNewCommentString(Optional.of(input), "annotation", "@tag", NL, false);
+
+		System.out.println(result);
+		assertEquals(expected, result);
+	}
+	
+	@Test
+	public void isFileTag() {
+		String input = ""
+			+ "/**\n"
+			+ " * \\file\n"
+			+ " */\n";
+
+		assertTrue(CDTAnnotate.isDoxygenFileComment(input));
+		assertTrue(CDTAnnotate.isDoxygenFileComment("/**@file */\n"));
+		assertFalse(CDTAnnotate.isDoxygenFileComment("/**file */\n"));
+		assertFalse(CDTAnnotate.isDoxygenFileComment("/**\\filed */\n"));
+		assertFalse(CDTAnnotate.isDoxygenFileComment("/**\n TEXT \\file */\n"));
+	}
+}
diff --git a/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/TestUtil.java b/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/TestUtil.java
new file mode 100644
index 0000000..c2d46de
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.cdt.tests/src/org/eclipse/capra/handler/cdt/TestUtil.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * 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.cdt;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.CProjectNature;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.core.settings.model.ICProjectDescription;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+public class TestUtil {
+
+	@SuppressWarnings("restriction")
+	public static ICProject setupTestProject(String name) throws CoreException, BuildException {
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		IWorkspaceRoot root = workspace.getRoot();
+		IProject project = root.getProject(name);
+
+		IProjectDescription prjDescription = workspace.newProjectDescription(project.getName());
+		project = CCorePlugin.getDefault().createCDTProject(prjDescription, project,
+				new NullProgressMonitor());
+
+		// Create build info and managed project
+		ICProjectDescription cProjectDescription = CoreModel.getDefault().createProjectDescription(project, false);
+		ManagedBuildManager.createBuildInfo(project);
+
+		Configuration config = new Configuration(new ManagedProject(cProjectDescription), null, "myId", "myName");
+		config.getEditableBuilder().setManagedBuildOn(false);
+		cProjectDescription.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID,
+				config.getConfigurationData());
+
+		CProjectNature.addCNature(project, new NullProgressMonitor());
+
+		CoreModel.getDefault().setProjectDescription(project, cProjectDescription);
+		return CoreModel.getDefault().create(project);
+	}
+
+	public static void deleteTestProject(ICProject project) throws CoreException {
+		project.getProject().delete(true, null);
+	}
+
+	public static EObject setupModel() {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		return artifactModel;
+	}
+
+	public static IFile createFile(IFile file, String contents) throws CoreException {
+		if (contents == null) {
+			contents = "";
+		}
+
+		System.out.println("Creating file: " + file.getName());
+		
+		InputStream inputStream = new ByteArrayInputStream(contents.getBytes());
+		file.create(inputStream, true, null);
+
+		System.out.println("Created file: " + file.getName());
+		return file;
+	}
+
+	public static ITranslationUnit createTranslationUnit(IProject project, String name, String source)
+			throws CoreException {
+		IFile file = project.getFile(name);
+		createFile(file, source);
+		return (ITranslationUnit) CoreModel.getDefault().create(file);
+	}
+
+	public static EObject createWrapper(EObject artifactModel, String uri, String name) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		return adapter.createArtifact(artifactModel, "org.eclipse.capra.handler.cdt.CDTHandler", uri, name, uri);
+	}
+
+}
diff --git a/org.eclipse.capra.core/.classpath b/tests/org.eclipse.capra.handler.jdt.tests/.classpath
similarity index 100%
copy from org.eclipse.capra.core/.classpath
copy to tests/org.eclipse.capra.handler.jdt.tests/.classpath
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/.project b/tests/org.eclipse.capra.handler.jdt.tests/.project
new file mode 100644
index 0000000..be03059
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.jdt.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.jdt.tests</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/org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.capra.handler.jdt.tests/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.core/.settings/org.eclipse.jdt.core.prefs
copy to tests/org.eclipse.capra.handler.jdt.tests/.settings/org.eclipse.jdt.core.prefs
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
new file mode 100644
index 0000000..395f6de
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.jdt.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tests for the Capra Handler for Java Elements
+Bundle-Vendor: Capra Development Team
+Bundle-SymbolicName: org.eclipse.capra.handler.jdt.tests
+Bundle-Version: 0.7.1.qualifier
+Fragment-Host: org.eclipse.capra.handler.jdt
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.junit,
+ org.eclipse.core.resources,
+ org.eclipse.jdt.launching,
+ org.eclipse.jdt.core,
+ org.eclipse.capra.generic.persistence,
+ org.eclipse.capra.generic.tracemodels,
+ org.eclipse.capra.generic.artifactmodel
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/build.properties b/tests/org.eclipse.capra.handler.jdt.tests/build.properties
new file mode 100644
index 0000000..d75096d
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.jdt.tests/build.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
+###############################################################################
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/pom.xml b/tests/org.eclipse.capra.handler.jdt.tests/pom.xml
new file mode 100644
index 0000000..543235c
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.jdt.tests/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.7.1-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>org.eclipse.capra.handler.jdt.tests</artifactId>
+	<packaging>eclipse-test-plugin</packaging>
+
+</project>
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/src/org/eclipse/capra/handler/jdt/JDTAnnotateTest.java b/tests/org.eclipse.capra.handler.jdt.tests/src/org/eclipse/capra/handler/jdt/JDTAnnotateTest.java
new file mode 100644
index 0000000..ff40ae2
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.jdt.tests/src/org/eclipse/capra/handler/jdt/JDTAnnotateTest.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * 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.jdt;
+
+import static org.junit.Assert.*;
+
+import org.eclipse.capra.handler.jdt.preferences.JDTPreferences;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class JDTAnnotateTest {
+
+	private JavaElementHandler handler = new JavaElementHandler();
+	private EObject artifactModel = TestUtil.setupModel();
+	private IProject project;
+
+	@Before
+	public void createTestProject() throws CoreException {
+		project = TestUtil.createTestProject("jdt");
+		JDTPreferences.getPreferences().putBoolean(JDTPreferences.ANNOTATE_JDT, true);
+		JDTPreferences.getPreferences().put(JDTPreferences.ANNOTATE_JDT_TAG, "req");
+	}
+
+	@After
+	public void deleteTestProject() throws CoreException {
+		TestUtil.deleteTestProject(project);
+	}
+
+	@Test
+	public void shouldAnnotateClass() throws Exception {
+		String source = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"};\n";
+
+		ICompilationUnit cu = TestUtil.createCompilationUnit(project, "bar.java", source);
+
+		// Annotate class bar
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=jdt/src<jdt{bar.java[bar", "bar");
+		handler.annotateArtifact(wrapper, "annotation");
+		String actual = cu.getSource();
+
+		String expected = "" +
+				"package jdt\n" +
+				"/**\n" +
+				" * @req annotation\n" +
+				" */\n" +
+				"public class bar {\n" +
+				"};\n";
+
+		assertEquals(expected, actual);
+	}
+
+	@Test
+	public void shouldAnnotateMethod() throws Exception {
+		String source = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"int foo() { return 0; }\n" +
+				"};\n";
+
+		ICompilationUnit cu = TestUtil.createCompilationUnit(project, "bar.java", source);
+
+		// Annotate method foo()
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=jdt/src<jdt{bar.java[bar~foo", "foo");
+		handler.annotateArtifact(wrapper, "annotation");
+		String actual = cu.getSource();
+
+		String expected = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"/**\n" +
+				" * @req annotation\n" +
+				" */\n" +
+				"int foo() { return 0; }\n" +
+				"};\n";
+
+		assertEquals(expected, actual);
+	}
+
+	@Test
+	public void shouldReplaceAnnotation() throws Exception {
+		String source = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"/**\n" +
+				" * @req annotation1\n" +
+				" */\n" +
+				"int foo() { return 0; }\n" +
+				"};\n";
+
+		ICompilationUnit cu = TestUtil.createCompilationUnit(project, "bar.java", source);
+
+		// Annotate method foo()
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=jdt/src<jdt{bar.java[bar~foo", "foo");
+		handler.annotateArtifact(wrapper, "annotation2");
+		String actual = cu.getSource();
+
+		String expected = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"/**\n" +
+				" * @req annotation2\n" +
+				" */\n" +
+				"int foo() { return 0; }\n" +
+				"};\n";
+
+		assertEquals(expected, actual);
+	}
+
+	@Test
+	public void shouldPreserveComments() throws Exception {
+		String source = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"/**\n" +
+				" * Comment\n" +
+				" */\n" +
+				"int foo() { return 0; }\n" +
+				"};\n";
+
+		ICompilationUnit cu = TestUtil.createCompilationUnit(project, "bar.java", source);
+
+		// Annotate method foo()
+		EObject wrapper = TestUtil.createWrapper(artifactModel, "=jdt/src<jdt{bar.java[bar~foo", "foo");
+		handler.annotateArtifact(wrapper, "annotation");
+		String actual = cu.getSource();
+
+		String expected = "" +
+				"package jdt\n" +
+				"public class bar {\n" +
+				"/**\n" +
+				" * Comment\n" +
+				" * @req annotation\n" +
+				" */\n" +
+				"int foo() { return 0; }\n" +
+				"};\n";
+
+		assertEquals(expected, actual);
+	}
+
+}
diff --git a/tests/org.eclipse.capra.handler.jdt.tests/src/org/eclipse/capra/handler/jdt/TestUtil.java b/tests/org.eclipse.capra.handler.jdt.tests/src/org/eclipse/capra/handler/jdt/TestUtil.java
new file mode 100644
index 0000000..625ebcb
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.jdt.tests/src/org/eclipse/capra/handler/jdt/TestUtil.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * 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.jdt;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.eclipse.capra.core.adapters.ArtifactMetaModelAdapter;
+import org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.launching.StandardVMType;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstallType;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.LibraryLocation;
+import org.eclipse.jdt.launching.VMStandin;
+import org.junit.Before;
+
+public class TestUtil {
+
+	private static final String SRC_FOLDER = "src";
+
+	public static IProject createTestProject(String name) throws CoreException {
+		// Create the test project
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IProject project = root.getProject(name);
+		project.create(null);
+		project.open(null);
+
+		// Add Java nature
+		IProjectDescription description = project.getDescription();
+		description.setNatureIds(new String[] { JavaCore.NATURE_ID });
+		project.setDescription(description, null);
+
+		// Create Java project
+		IJavaProject javaProject = JavaCore.create(project);
+
+		// Add output folder
+		IFolder binFolder = project.getFolder("bin");
+		javaProject.setOutputLocation(binFolder.getFullPath(), null);
+
+		// Manually set Java Runtime Environment to make sure it is not null
+		// even for Mac OS where the default is not set
+		@SuppressWarnings("restriction")
+		final IVMInstallType vmInstallType = JavaRuntime.getVMInstallType(StandardVMType.ID_STANDARD_VM_TYPE);
+		String id = UUID.randomUUID().toString();
+		VMStandin newVm = new VMStandin(vmInstallType, id);
+		newVm.setName("Default-VM");
+		String javaHome = System.getProperty("java.home");
+		File installLocation = new File(javaHome);
+		newVm.setInstallLocation(installLocation);
+		IVMInstall realVm = newVm.convertToRealVM();
+		JavaRuntime.setDefaultVMInstall(realVm, new NullProgressMonitor());
+
+		List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
+		// add libs to project class path
+		IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
+		LibraryLocation[] locations = JavaRuntime.getLibraryLocations(vmInstall);
+		for (LibraryLocation element : locations) {
+			entries.add(JavaCore.newLibraryEntry(element.getSystemLibraryPath(), null, null));
+		}
+		// Set classpath
+		javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
+
+		// Create source folder
+		IFolder sourceFolder = project.getFolder(SRC_FOLDER);
+		sourceFolder.create(false, true, null);
+
+		// Add source folder to classpath entries
+		IPackageFragmentRoot srcRoot = javaProject.getPackageFragmentRoot(sourceFolder);
+		IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
+		IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
+		System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
+		newEntries[oldEntries.length] = JavaCore.newSourceEntry(srcRoot.getPath());
+		javaProject.setRawClasspath(newEntries, null);
+
+		// Create default package
+		javaProject.getPackageFragmentRoot(sourceFolder).createPackageFragment(name, false, null);
+		return project;
+	}
+
+	public static void deleteTestProject(IProject project) throws CoreException {
+		project.delete(true, null);
+	}
+
+	@Before
+	public static EObject setupModel() {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(resourceSet);
+		return artifactModel;
+	}
+
+	public static ICompilationUnit createCompilationUnit(IProject project, String name, String source)
+			throws JavaModelException {
+		IFolder sourceFolder = project.getFolder(SRC_FOLDER);
+		IJavaProject javaProject = JavaCore.create(project);
+		IPackageFragment pack = javaProject.getPackageFragmentRoot(sourceFolder).getPackageFragment(project.getName());
+		return pack.createCompilationUnit(name, source, false, null);
+	}
+
+	public static ICompilationUnit createCompilationUnit(IProject project, String name, StringBuffer source)
+			throws JavaModelException {
+		return createCompilationUnit(project, name, source.toString());
+	}
+
+	public static EObject createWrapper(EObject artifactModel, String uri, String name) {
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		return adapter.createArtifact(artifactModel, "org.eclipse.capra.handler.jdt.JavaElementHandler", uri, name,uri);
+	}
+
+}
diff --git a/org.eclipse.capra.documentation/.classpath b/tests/org.eclipse.capra.handler.uml.tests/.classpath
similarity index 100%
copy from org.eclipse.capra.documentation/.classpath
copy to tests/org.eclipse.capra.handler.uml.tests/.classpath
diff --git a/tests/org.eclipse.capra.handler.uml.tests/.project b/tests/org.eclipse.capra.handler.uml.tests/.project
new file mode 100644
index 0000000..69e9978
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.uml.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.capra.handler.uml.tests</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/org.eclipse.capra.generic.persistence/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.capra.handler.uml.tests/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from org.eclipse.capra.generic.persistence/.settings/org.eclipse.jdt.core.prefs
copy to tests/org.eclipse.capra.handler.uml.tests/.settings/org.eclipse.jdt.core.prefs
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
new file mode 100644
index 0000000..17529b9
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.uml.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tests for the Capra Handler for UML Models
+Bundle-SymbolicName: org.eclipse.capra.handler.uml.tests
+Bundle-Version: 0.7.1.qualifier
+Require-Bundle: 
+ org.eclipse.capra.core,
+ org.eclipse.capra.generic.tracemodels,
+ org.eclipse.capra.handler.uml,
+ org.eclipse.capra.ui,
+ org.eclipse.capra.ui.plantuml,
+ org.eclipse.capra.testsuite,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.ui,
+ org.eclipse.uml2.uml,
+ org.junit
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/tests/org.eclipse.capra.handler.uml.tests/build.properties b/tests/org.eclipse.capra.handler.uml.tests/build.properties
new file mode 100644
index 0000000..b107977
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.uml.tests/build.properties
@@ -0,0 +1,3 @@
+source.. = src/
+bin.includes = META-INF/,\
+               .
diff --git a/tests/org.eclipse.capra.handler.uml.tests/pom.xml b/tests/org.eclipse.capra.handler.uml.tests/pom.xml
new file mode 100644
index 0000000..7a63362
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.uml.tests/pom.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+	Copyright (c) 2016 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 v1.0
+	which accompanies this distribution, and is available at
+	http://www.eclipse.org/legal/epl-v10.html
+
+	Contributors:
+		Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+--><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.7.1-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>org.eclipse.capra.handler.uml.tests</artifactId>
+	<packaging>eclipse-test-plugin</packaging>
+
+
+</project>
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
new file mode 100644
index 0000000..9e1ec77
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUMLInternalLinks.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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 v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ *   Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.capra.handler.uml.tests;
+
+import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+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.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.ui.plantuml.DiagramTextProviderHandler;
+import org.eclipse.capra.ui.plantuml.DisplayInternalLinksHandler;
+import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.resources.IProject;
+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.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Model;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestUMLInternalLinks {
+
+	private static final String CLASS_A_NAME = "A";
+	private static final String CLASS_B_NAME = "B";
+	private static final String CLASS_C_NAME = "C";
+
+	private static final String MODEL_A_UML_FILENAME = "modelA.uml";
+
+	private static final String MODEL_A_NAME = "modelA";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+
+	private static final String EXPECTED_TEXT_FOR_INTERNAL_LINKS = "@startuml\n" + "object \"A : Class\" as o0 #pink\n"
+			+ "object \"B : Class\" as o1\n" + "object \"C : Class\" as o2\n"
+			+ "o0--o1: A : Class B : Class : RelatedTo\n" + "o1--o2:true : Generalization\n" + "@enduml\n";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Test
+	public void TestInternalLinks() throws CoreException, IOException {
+		// Create a project
+		TestHelper.createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(TestHelper.projectExists(TEST_PROJECT_NAME));
+		IProject testProject = TestHelper.getProject(TEST_PROJECT_NAME);
+
+		// Create a UML model and three classes
+		Model umlModel = TestUtil.createUMLModel(MODEL_A_NAME);
+		TestUtil.createClassInUMLModel(umlModel, CLASS_A_NAME);
+		TestUtil.createClassInUMLModel(umlModel, CLASS_B_NAME);
+		TestUtil.createClassInUMLModel(umlModel, CLASS_C_NAME);
+
+		// Save model
+		TestUtil.save(testProject, umlModel);
+
+		// Load them and choose the three classes
+		ResourceSet rs = new ResourceSetImpl();
+
+		Model _a = TestUtil.loadUMLModel(testProject, MODEL_A_UML_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		Class _A = (Class) _a.getOwnedMember(CLASS_A_NAME);
+		Class _B = (Class) _a.getOwnedMember(CLASS_B_NAME);
+		Class _C = (Class) _a.getOwnedMember(CLASS_C_NAME);
+
+		// create generalization between class B and C
+		TestUtil.createGeneralizationBetweenClasses(_B, _C);
+
+		// save model
+		TestUtil.save(testProject, umlModel);
+
+		// Add A and B to the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+		SelectionView.getOpenedView().dropToSelection(_B);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Create a trace via the selection view
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		EObject traceModel = persistenceAdapter.getTraceModel(_A.eResource().getResourceSet());
+		assertFalse(traceAdapter.isThereATraceBetween(_A, _B, traceModel));
+
+		TestHelper.createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		EObject upDatedTraceModel = persistenceAdapter.getTraceModel(_A.eResource().getResourceSet());
+		assertTrue(traceAdapter.isThereATraceBetween(_A, _B, upDatedTraceModel));
+
+		// Clear selection view
+		SelectionView.getOpenedView().clearSelection();
+
+		// create a selection with class A
+		List<Object> selection = new ArrayList<>();
+		selection.add(_A);
+
+		// test that internal links show for direct elements
+		ToggleTransitivityHandler.setTraceViewTransitive(false);
+		DisplayInternalLinksHandler.showInternalLinks(true);
+		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
+		String directlyConnectedElements = provider.getDiagramText(selection);
+		assertTrue(directlyConnectedElements.equals(EXPECTED_TEXT_FOR_INTERNAL_LINKS));
+
+	}
+}
diff --git a/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUtil.java b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUtil.java
new file mode 100644
index 0000000..0f6d484
--- /dev/null
+++ b/tests/org.eclipse.capra.handler.uml.tests/src/org/eclipse/capra/handler/uml/tests/TestUtil.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2016 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 v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ *   Contributors:
+ *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.capra.handler.uml.tests;
+
+import java.io.IOException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.UMLFactory;
+
+public class TestUtil {
+
+	/**
+	 * Creates an empty UML model.
+	 *
+	 * @param name
+	 *            the name of the model
+	 * @return
+	 */
+	public static Model createUMLModel(String name) {
+		Model model = UMLFactory.eINSTANCE.createModel();
+		model.setName(name);
+		return model;
+	}
+
+	/**
+	 * Creates an EClass entity in the provided model.
+	 *
+	 * @param model
+	 *            UML model
+	 * @param name
+	 *            the name of the created EClass entity
+	 */
+	public static void createClassInUMLModel(Model model, String name) {
+		org.eclipse.uml2.uml.Class c = UMLFactory.eINSTANCE.createClass();
+		c.setName(name);
+		model.getPackagedElements().add(c);
+	}
+
+	/**
+	 * Creates a generalization relationship between two classes
+	 * 
+	 * @param A
+	 *            First class i.e the super class
+	 * @param B
+	 *            Second class
+	 */
+	public static void createGeneralizationBetweenClasses(org.eclipse.uml2.uml.Class A, org.eclipse.uml2.uml.Class B) {
+		A.createGeneralization(B);
+	}
+
+	/**
+	 * Returns an UML model entity from the specified project.
+	 *
+	 * @param project
+	 *            the project containing the model
+	 * @param p
+	 *            the name of the model
+	 * @param rs
+	 *            the provided ResourceSet instance
+	 * @return a UML model entity
+	 * @throws IOException
+	 */
+	public static Model loadUMLModel(IProject project, String p, ResourceSet rs) throws IOException {
+		URI path = URI.createFileURI(project.getLocation().toString() + "/" + p);
+		return (Model) rs.getResource(path, true).getContents().get(0);
+	}
+
+	/**
+	 * Persists (saves) the provided UML model in the specified project.
+	 *
+	 * @param project
+	 *            a handle to the project in which the model is to be persisted
+	 * @param model
+	 *            the UML model to be persisted
+	 * @throws IOException
+	 */
+	public static void save(IProject project, Model model) throws IOException {
+		ResourceSet rs = new ResourceSetImpl();
+		URI path = URI.createFileURI(project.getLocation().toString() + "/" + model.getName() + ".uml");
+		Resource r = rs.createResource(path);
+		r.getContents().add(model);
+		r.save(null);
+	}
+
+}
diff --git a/org.eclipse.capra.testsuite/.classpath b/tests/org.eclipse.capra.testsuite/.classpath
similarity index 100%
rename from org.eclipse.capra.testsuite/.classpath
rename to tests/org.eclipse.capra.testsuite/.classpath
diff --git a/org.eclipse.capra.testsuite/.gitignore b/tests/org.eclipse.capra.testsuite/.gitignore
similarity index 100%
rename from org.eclipse.capra.testsuite/.gitignore
rename to tests/org.eclipse.capra.testsuite/.gitignore
diff --git a/org.eclipse.capra.testsuite/.project b/tests/org.eclipse.capra.testsuite/.project
similarity index 100%
rename from org.eclipse.capra.testsuite/.project
rename to tests/org.eclipse.capra.testsuite/.project
diff --git a/org.eclipse.capra.testsuite/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.capra.testsuite/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from org.eclipse.capra.testsuite/.settings/org.eclipse.jdt.core.prefs
rename to tests/org.eclipse.capra.testsuite/.settings/org.eclipse.jdt.core.prefs
diff --git a/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF b/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..abd3969
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
@@ -0,0 +1,43 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Capra Testsuite
+Bundle-SymbolicName: org.eclipse.capra.testsuite;singleton:=true
+Bundle-Version: 0.7.1.qualifier
+Export-Package: org.eclipse.capra.testsuite
+Require-Bundle: org.junit,
+ org.eclipse.equinox.registry,
+ org.eclipse.core.resources,
+ org.eclipse.core.runtime,
+ org.eclipse.core.commands,
+ org.eclipse.core.filesystem,
+ org.eclipse.emf.edit,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.editor,
+ org.eclipse.ui.workbench,
+ org.eclipse.ui.ide,
+ org.eclipse.cdt.core,
+ org.eclipse.cdt.managedbuilder.core,
+ org.eclipse.jdt.core,
+ org.eclipse.jdt.launching,
+ org.eclipse.jface,
+ org.eclipse.osgi,
+ org.eclipse.swt,
+ org.eclipse.capra.generic.artifactmodel,
+ org.eclipse.capra.generic.tracemodels,
+ org.eclipse.capra.generic.priority,
+ org.eclipse.capra.core,
+ org.eclipse.capra.ui.plantuml,
+ org.eclipse.capra.handler.jdt,
+ org.eclipse.capra.handler.cdt,
+ org.eclipse.capra.handler.hudson,
+ org.eclipse.capra.handler.emf,
+ org.eclipse.capra.generic.persistence,
+ org.eclipse.capra.handler.file,
+ org.eclipse.capra.ui,
+ org.eclipse.capra.ui.notification,
+ ch.qos.logback.classic,
+ ch.qos.logback.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.eclipse.swt.dnd,
+ org.slf4j
+Bundle-Vendor: Capra Development Team
diff --git a/tests/org.eclipse.capra.testsuite/build.properties b/tests/org.eclipse.capra.testsuite/build.properties
new file mode 100644
index 0000000..50645f3
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/build.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
+###############################################################################
+source.. = src/
+bin.includes = META-INF/,\
+			   .,\
+               plugin.xml
diff --git a/tests/org.eclipse.capra.testsuite/plugin.xml b/tests/org.eclipse.capra.testsuite/plugin.xml
new file mode 100644
index 0000000..aeaf4a8
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/plugin.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+    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
+ -->
+
+<plugin>
+   <extension
+         point="org.eclipse.capra.ui.transfers">
+      <transfer
+            class="org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy">
+      </transfer>
+   </extension>
+
+</plugin>
diff --git a/tests/org.eclipse.capra.testsuite/pom.xml b/tests/org.eclipse.capra.testsuite/pom.xml
new file mode 100644
index 0000000..9ffb79c
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/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.7.1-SNAPSHOT</version>
+	</parent>
+	
+	<artifactId>org.eclipse.capra.testsuite</artifactId>
+	<packaging>eclipse-test-plugin</packaging>
+
+</project>
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
new file mode 100644
index 0000000..55e57a3
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestCreateTrace.java
@@ -0,0 +1,207 @@
+/*******************************************************************************
+ * 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.createCDTProject;
+import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.load;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jdt.core.IType;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestCreateTrace {
+
+	private static final String CLASS_A_NAME = "A";
+	private static final String CLASS_B_NAME = "B";
+
+	private static final String MODEL_A_FILENAME = "modelA.ecore";
+	private static final String MODEL_B_FILENAME = "modelB.ecore";
+
+	private static final String MODEL_A_NAME = "modelA";
+	private static final String MODEL_B_NAME = "modelB";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+	private static final String TEST_PROJECT_NAME_JAVA = "TestProject_java";
+	private static final String TEST_PROJECT_NAME_C = "TestProject_C";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Test
+	public void testLinkCreationEClassToEClass() throws CoreException, IOException {
+		// Create a project
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create two models and persist them
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+
+		EPackage b = createEcoreModel(MODEL_B_NAME);
+		createEClassInEPackage(b, CLASS_B_NAME);
+		save(testProject, b);
+
+		// Load them, choose two elements
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		EClass _A = (EClass) _a.getEClassifier(CLASS_A_NAME);
+
+		EPackage _b = load(testProject, MODEL_B_FILENAME, rs);
+		assertEquals(_b.getName(), MODEL_B_NAME);
+		EClass _B = (EClass) _b.getEClassifier(CLASS_B_NAME);
+
+		// Add them to the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+		SelectionView.getOpenedView().dropToSelection(_B);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(_A, _B));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(_A, _B));
+
+	}
+
+	@Test
+	public void testLinkCreationJavaEltToEClass() throws CoreException, IOException {
+		// Create a project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+
+		// Choose the EClass
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		EClass _A = (EClass) _a.getEClassifier(CLASS_A_NAME);
+
+		// Drop the EClass in the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+
+		// Drop the JavaClass in the selection view
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(_A, javaClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(_A, javaClass));
+	}
+
+	@Test
+	public void testLinkCreationCElementToEClass() throws OperationCanceledException, CoreException, IOException, BuildException {
+		// Create a project
+		ICProject cFile = createCDTProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+
+		// Choose the EClass
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		EClass _A = (EClass) _a.getEClassifier(CLASS_A_NAME);
+
+		// Drop the EClass in the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+
+		// Drop the c File in the selection view
+		SelectionView.getOpenedView().dropToSelection(cFile);
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(_A, cFile));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(_A, cFile));
+	}
+
+	@Test
+	public void testLinkCreationJavaClassToJavaClass() throws CoreException, BuildException
+	{
+		// Create a java project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME_JAVA);
+		assertTrue(projectExists(TEST_PROJECT_NAME_JAVA));
+
+		// Create a C project
+		ICProject cFile = createCDTProject(TEST_PROJECT_NAME_C);
+		assertTrue(projectExists(TEST_PROJECT_NAME_C));
+
+		// Drop the JavaClass in the selection view
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		// Drop the c File in the selection view
+		SelectionView.getOpenedView().dropToSelection(cFile);
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(javaClass, cFile));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(javaClass, cFile));
+
+	}
+
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDefaultPriorityHandler.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDefaultPriorityHandler.java
new file mode 100644
index 0000000..980a94b
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDefaultPriorityHandler.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * 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 java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.capra.core.handlers.IArtifactHandler;
+import org.eclipse.capra.core.handlers.PriorityHandler;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestDefaultPriorityHandler {
+
+	private IArtifactHandler<?> emfHandler;
+	private IArtifactHandler<?> buildElementHandler;
+	private IArtifactHandler<?> testElementHandler;
+
+	private PriorityHandler priorityHandler;
+
+	@Before
+	public void setup() {
+		priorityHandler = ExtensionPointHelper.getPriorityHandler().get();
+		emfHandler = ExtensionPointHelper.getArtifactHandler("org.eclipse.capra.handler.emf.EMFHandler").get();
+		testElementHandler = ExtensionPointHelper
+				.getArtifactHandler("org.eclipse.capra.handler.hudson.TestElementHandler").get();
+		buildElementHandler = ExtensionPointHelper
+				.getArtifactHandler("org.eclipse.capra.handler.hudson.BuildElementHandler").get();
+	}
+
+	@Test
+	public void testPrioritiesOrder() {
+		Collection<IArtifactHandler<?>> handlers = new ArrayList<>();
+		handlers.add(emfHandler);
+		handlers.add(buildElementHandler);
+
+		Assert.assertEquals(buildElementHandler, priorityHandler.getSelectedHandler(handlers, null));
+
+		// Turn order around
+		handlers.clear();
+		handlers.add(buildElementHandler);
+		handlers.add(emfHandler);
+		Assert.assertEquals(buildElementHandler, priorityHandler.getSelectedHandler(handlers, null));
+	}
+
+	@Test
+	public void testPrioritiesConflict() {
+		Collection<IArtifactHandler<?>> handlers = new ArrayList<>();
+		handlers.add(testElementHandler);
+		handlers.add(buildElementHandler);
+		// PriorityHandler should choose first element in list in case of a
+		// conflict
+		Assert.assertEquals(testElementHandler, priorityHandler.getSelectedHandler(handlers, null));
+	}
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java
new file mode 100644
index 0000000..adb5b47
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestDuplicateLinks.java
@@ -0,0 +1,227 @@
+/*******************************************************************************
+ * 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.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.load;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.ArrayList;
+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.RelatedTo;
+import org.eclipse.capra.generic.tracemodel.TracemodelFactory;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestDuplicateLinks {
+	private static final String CLASS_A_NAME = "A";
+	private static final String CLASS_B_NAME = "B";
+
+	private static final String MODEL_A_FILENAME = "modelA.ecore";
+	private static final String MODEL_B_FILENAME = "modelB.ecore";
+	private static final String MODEL_A_NAME = "modelA";
+	private static final String MODEL_B_NAME = "modelB";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+	private static final String T_LINK_NAME_A = "tlinkA";
+	private static final String CLASS_C_NAME = "C";
+	private static final String TRACE_MODEL_NAME = "traceModel";
+	private static final String TRACE_MODEL_FILENAME = "traceModel.ecore";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Test
+	public void testConnectionEqualsMethod() throws CoreException, IOException {
+		// Create a project
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create an Ecore model with five three classes
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		createEClassInEPackage(a, CLASS_B_NAME);
+		createEClassInEPackage(a, CLASS_C_NAME);
+
+		// create a mock trace model with one trace type
+		EPackage tm = TestHelper.createEcoreModel(TRACE_MODEL_NAME);
+		createEClassInEPackage(tm, T_LINK_NAME_A);
+		save(testProject, a);
+		save(testProject, tm);
+
+		// get existing trace type from trace model
+		RelatedTo tlinkB = TracemodelFactory.eINSTANCE.createRelatedTo();
+
+		// Load the models and select the classes
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+
+		EPackage _tm = load(testProject, TRACE_MODEL_FILENAME, rs);
+		assertEquals(_tm.getName(), TRACE_MODEL_NAME);
+
+		EClass classA = (EClass) _a.getEClassifier(CLASS_A_NAME);
+
+		EClass classB = (EClass) _a.getEClassifier(CLASS_B_NAME);
+
+		EClass classC = (EClass) _a.getEClassifier(CLASS_C_NAME);
+
+		EClass tlinkA = (EClass) _tm.getEClassifier(T_LINK_NAME_A);
+
+		List<EObject> targets = new ArrayList<EObject>();
+		targets.add(classB);
+
+		// create a connection
+		Connection con1 = new Connection(classA, targets, tlinkA);
+
+		// create a second connection with the same content
+		Connection con2 = new Connection(classA, targets, tlinkA);
+
+		// check if the connections are equal
+		assertTrue(con1.equals(con2));
+
+		// change the order of artifacts
+		List<EObject> newTarget = new ArrayList<>();
+		newTarget.add(classA);
+
+		// create the connections again
+		Connection con3 = new Connection(classB, newTarget, tlinkA);
+
+		// check if the connections are equal
+		assertTrue(con1.equals(con2) && con1.equals(con3) && con2.equals(con3));
+
+		// create a new connection with the second trace type
+		Connection con4 = new Connection(classB, newTarget, tlinkB);
+
+		// check that the connections are not equal
+		assertFalse(con3.equals(con4));
+
+		// create a connection with differesnt artifact
+		Connection con5 = new Connection(classC, targets, tlinkA);
+
+		// check that the conenctions are not equal
+		assertFalse(con5.equals(con1));
+		assertFalse(con5.equals(con2));
+		assertFalse(con5.equals(con3));
+		assertFalse(con5.equals(con4));
+
+	}
+
+	@Test
+	public void testTraceExistsMethod() throws CoreException, IOException {
+		// Create a project
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create two models and persist them
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+
+		EPackage b = createEcoreModel(MODEL_B_NAME);
+		createEClassInEPackage(b, CLASS_B_NAME);
+		createEClassInEPackage(b, CLASS_C_NAME);
+		save(testProject, b);
+
+		// Load them, choose two elements
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		EClass _A = (EClass) _a.getEClassifier(CLASS_A_NAME);
+
+		EPackage _b = load(testProject, MODEL_B_FILENAME, rs);
+		assertEquals(_b.getName(), MODEL_B_NAME);
+		EClass _B = (EClass) _b.getEClassifier(CLASS_B_NAME);
+		EClass _C = (EClass) _b.getEClassifier(CLASS_C_NAME);
+
+		// Add them to the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+		SelectionView.getOpenedView().dropToSelection(_B);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Test the trace exists method
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject traceModel = persistenceAdapter.getTraceModel(_A.eResource().getResourceSet());
+		TraceHelper traceHelper = new TraceHelper(traceModel);
+		EObject artifactModel = persistenceAdapter.getArtifactWrappers(_A.eResource().getResourceSet());
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		EClass traceType = TracemodelPackage.eINSTANCE.getRelatedTo();
+		List<EObject> selection = artifactHelper.createWrappers(SelectionView.getOpenedView().getSelection());
+
+		assertFalse(traceHelper.traceExists(selection, traceType,
+				persistenceAdapter.getTraceModel(_A.eResource().getResourceSet())));
+
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		assertTrue(traceHelper.traceExists(selection, traceType,
+				persistenceAdapter.getTraceModel(_A.eResource().getResourceSet())));
+
+		// Change the order of the selection in the selection view
+		SelectionView.getOpenedView().clearSelection();
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_B);
+		SelectionView.getOpenedView().dropToSelection(_A);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Check that the trace exists
+		selection = artifactHelper.createWrappers(SelectionView.getOpenedView().getSelection());
+		assertTrue(traceHelper.traceExists(selection, traceType,
+				persistenceAdapter.getTraceModel(_A.eResource().getResourceSet())));
+
+		// Add another class to the selection view
+		SelectionView.getOpenedView().dropToSelection(_C);
+
+		// Check that the trace does not exist
+		selection = artifactHelper.createWrappers(SelectionView.getOpenedView().getSelection());
+		assertFalse(traceHelper.traceExists(selection, traceType,
+				persistenceAdapter.getTraceModel(_A.eResource().getResourceSet())));
+
+
+	}
+
+}
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
new file mode 100644
index 0000000..6fc4109
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestGraphicalVisualization.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * 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.createCDTProject;
+import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.load;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+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.ToggleTransitivityHandler;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jdt.core.IType;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestGraphicalVisualization {
+
+	private static final String CLASS_A_NAME = "A";
+	private static final String CLASS_B_NAME = "B";
+	private static final String CLASS_C_NAME = "C";
+
+	private static final String MODEL_A_FILENAME = "modelA.ecore";
+	private static final String MODEL_B_FILENAME = "modelB.ecore";
+
+	private static final String MODEL_A_NAME = "modelA";
+	private static final String MODEL_B_NAME = "modelB";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+	private static final String TEST_PROJECT_NAME_JAVA = "TestProject_java";
+	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 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";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Test
+	public void testPlantUMLGraphView() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create two models each with two classes and persist them
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+
+		EPackage b = createEcoreModel(MODEL_B_NAME);
+		createEClassInEPackage(b, CLASS_B_NAME);
+		createEClassInEPackage(b, CLASS_C_NAME);
+		save(testProject, b);
+
+		// Load them and choose the four classes
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		EClass _A = (EClass) _a.getEClassifier(CLASS_A_NAME);
+
+		EPackage _b = load(testProject, MODEL_B_FILENAME, rs);
+		assertEquals(_b.getName(), MODEL_B_NAME);
+		EClass _B = (EClass) _b.getEClassifier(CLASS_B_NAME);
+		EClass _C = (EClass) _b.getEClassifier(CLASS_C_NAME);
+
+		// Add A and B to the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+		SelectionView.getOpenedView().dropToSelection(_B);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(_A, _B));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(_A, _B));
+
+		// Clear selection view
+		SelectionView.getOpenedView().clearSelection();
+
+		// Add B and C to selection view
+		SelectionView.getOpenedView().dropToSelection(_B);
+		SelectionView.getOpenedView().dropToSelection(_C);
+
+		// Create a traceLink between B and C
+		assertFalse(thereIsATraceBetween(_B, _C));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		// Remove trace model from resource set to make sure the trace model is
+		// re-loaded to capture the second trace link
+		removeTraceModel(rs);
+		assertTrue(thereIsATraceBetween(_B, _C));
+
+		// create a selection with class A
+		List<Object> selection = new ArrayList<>();
+		selection.add(_A);
+
+		// Test directly connected Elements
+		ToggleTransitivityHandler.setTraceViewTransitive(false);
+		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
+		String DirectlyConnectedElements = provider.getDiagramText(selection);
+		assertTrue(DirectlyConnectedElements.equals(EXPECTED_TEXT_FOR_DIRECT_CONNECTIONS));
+
+		// Test transitively connected Elements
+		ToggleTransitivityHandler.setTraceViewTransitive(true);
+		String transitivelysConnectedElements = provider.getDiagramText(selection);
+		assertTrue(transitivelysConnectedElements.equals(EXPECTED_TEXT_FOR_TRANSITIVE_CONNECTIONS));
+
+	}
+
+	@Test
+	public void testGoToLink() throws CoreException, BuildException {
+		// Create a java project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME_JAVA);
+		assertTrue(projectExists(TEST_PROJECT_NAME_JAVA));
+
+		// Create a C project
+		ICProject cProject = createCDTProject(TEST_PROJECT_NAME_C);
+		assertTrue(projectExists(TEST_PROJECT_NAME_C));
+
+		// create a C class in the CProject
+		ITranslationUnit cFile = TestHelper.createCSourceFileInProject(TEST_C_CLASS, cProject);
+
+		// Drop the JavaClass in the selection view
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		// Drop the c File in the selection view
+		SelectionView.getOpenedView().dropToSelection(cFile);
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(javaClass, cFile));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(javaClass, cFile));
+
+		// create a selection with the java class
+		List<Object> selection = new ArrayList<>();
+		selection.add(javaClass);
+
+		// Test directly connected Elements
+		ToggleTransitivityHandler.setTraceViewTransitive(false);
+		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
+		String directlyConnectedElements = provider.getDiagramText(selection);
+		assertTrue(directlyConnectedElements.equals(EXPECTED_TEXT_FOR_GOTO_LINKS));
+
+	}
+
+	private void removeTraceModel(ResourceSet rs) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject tm = persistenceAdapter.getTraceModel(rs);
+		rs.getResources().remove(tm.eResource());
+	}
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java
new file mode 100644
index 0000000..c68ca18
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestHelper.java
@@ -0,0 +1,412 @@
+/*******************************************************************************
+ * 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.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+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;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.ui.handlers.TraceCreationHandler;
+import org.eclipse.capra.ui.plantuml.ToggleTransitivityHandler;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.CProjectNature;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ISourceRoot;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.core.settings.model.ICProjectDescription;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * A helper class for writing JUnit tests for the Capra tool.
+ */
+@SuppressWarnings("restriction")
+public class TestHelper {
+
+	private TestHelper() {
+		// Deliberately do nothing
+	}
+
+	/**
+	 * ID of Capra custom marker for reporting a generic problem.
+	 */
+	public static final String CAPRA_PROBLEM_MARKER_ID = "org.eclipse.capra.ui.notification.capraProblemMarker";
+
+	/**
+	 * Creates an empty project
+	 *
+	 * @param projectName
+	 *            the name of the project
+	 * @throws CoreException
+	 */
+	public static IProject createSimpleProject(String projectName) throws CoreException {
+		IProject project = getProject(projectName);
+
+		IProgressMonitor progressMonitor = new NullProgressMonitor();
+		project.create(progressMonitor);
+		project.open(progressMonitor);
+		return project;
+	}
+
+	/**
+	 * Creates a Java project and a Java class declaration inside it.
+	 *
+	 * @param projectName
+	 *            the name of the project
+	 * @return the created Java class
+	 * @throws CoreException
+	 */
+	public static IType createJavaProjectWithASingleJavaClass(String projectName) throws CoreException {
+		IProject project = getProject(projectName);
+
+		// Create project
+		IProgressMonitor progressMonitor = new NullProgressMonitor();
+		project.create(progressMonitor);
+		project.open(progressMonitor);
+
+		// Add Java nature
+		IProjectDescription description = project.getDescription();
+		description.setNatureIds(new String[] { JavaCore.NATURE_ID });
+		project.setDescription(description, null);
+
+		// Create as Java project and set up build path etc.
+		IJavaProject javaProject = JavaCore.create(project);
+		IFolder binFolder = project.getFolder("bin");
+		binFolder.create(false, true, null);
+		javaProject.setOutputLocation(binFolder.getFullPath(), null);
+		List<IClasspathEntry> entries = new ArrayList<IClasspathEntry>();
+
+		javaProject.setRawClasspath(entries.toArray(new IClasspathEntry[entries.size()]), null);
+
+		// Create a src file
+		IFolder sourceFolder = project.getFolder("src");
+		sourceFolder.create(false, true, null);
+		IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(sourceFolder);
+		IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
+		IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
+		System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
+		newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath());
+		javaProject.setRawClasspath(newEntries, null);
+
+		IPackageFragment pack = javaProject.getPackageFragmentRoot(sourceFolder)
+				.createPackageFragment("org.eclipse.capra.test", false, null);
+
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("package " + pack.getElementName() + ";\n");
+		buffer.append("\n");
+		buffer.append("public class TestClass { public void doNothing(){ } }");
+
+		ICompilationUnit icu = pack.createCompilationUnit("TestClass.java", buffer.toString(), false, null);
+		return icu.getType("TestClass");
+	}
+
+	/**
+	 * Clears the active workspace by deleting all the contents.
+	 *
+	 * @throws CoreException
+	 */
+	public static void clearWorkspace() throws CoreException {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		for (IProject p : root.getProjects()) {
+			p.delete(true, new NullProgressMonitor());
+		}
+	}
+
+	/**
+	 * Checks if the project with the provided name exists.
+	 *
+	 * @param projectName
+	 *            the name of the project
+	 * @return true if the project exists in the active workspace, false
+	 *         otherwise
+	 */
+	public static boolean projectExists(String projectName) {
+		return getProject(projectName).exists();
+	}
+
+	/**
+	 * Returns a handle to the project resource with the given name.
+	 *
+	 * @param projectName
+	 *            the name of the project
+	 * @return a handle to the project resource
+	 */
+	public static IProject getProject(String projectName) {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		return root.getProject(projectName);
+	}
+
+	/**
+	 * Creates an empty Ecore model.
+	 *
+	 * @param name
+	 *            the name of the model
+	 * @return
+	 */
+	public static EPackage createEcoreModel(String name) {
+		EPackage p = EcoreFactory.eINSTANCE.createEPackage();
+		p.setName(name);
+		return p;
+	}
+
+	/**
+	 * Creates an EClass entity in the provided model.
+	 *
+	 * @param p
+	 *            an Ecore model
+	 * @param name
+	 *            the name of the created EClass entity
+	 */
+	public static void createEClassInEPackage(EPackage p, String name) {
+		EClass c = EcoreFactory.eINSTANCE.createEClass();
+		c.setName(name);
+		p.getEClassifiers().add(c);
+	}
+
+	/**
+	 * Nests a new EPackage inside the provided EPackage.
+	 *
+	 * @param p
+	 *            a new EPackage
+	 * @param name
+	 *            the name of the created EPackage
+	 */
+	public static void createEPackageInEPackage(EPackage p, String name) {
+		EPackage pkg = EcoreFactory.eINSTANCE.createEPackage();
+		pkg.setName(name);
+		p.getESubpackages().add(pkg);
+	}
+
+	/**
+	 * Persists (saves) the provided Ecore model in the specified project.
+	 *
+	 * @param project
+	 *            a handle to the project in which the model is to be persisted
+	 * @param pack
+	 *            the Ecore model to be persisted
+	 * @throws IOException
+	 */
+	public static void save(IProject project, EPackage pack) throws IOException {
+		ResourceSet rs = new ResourceSetImpl();
+		URI path = URI.createFileURI(project.getLocation().toString() + "/" + pack.getName() + ".ecore");
+		Resource r = rs.createResource(path);
+		r.getContents().add(pack);
+		r.save(null);
+	}
+
+	/**
+	 * Returns an Ecore model entity from the specified project.
+	 *
+	 * @param project
+	 *            the project containing the model
+	 * @param p
+	 *            the name of the model
+	 * @param rs
+	 *            the provided ResourceSet instance
+	 * @return an Ecore model entity
+	 * @throws IOException
+	 */
+	public static EPackage load(IProject project, String p, ResourceSet rs) throws IOException {
+		URI path = URI.createFileURI(project.getLocation().toString() + "/" + p);
+		return (EPackage) rs.getResource(path, true).getContents().get(0);
+	}
+
+	/**
+	 * Creates a trace between the objects that are in the Selection view.
+	 *
+	 * @param traceType
+	 *            the type of the trace that is to connect the objects
+	 */
+	public static void createTraceForCurrentSelectionOfType(EClass traceType) {
+		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		TraceCreationHandler handler = new TraceCreationHandler();
+		handler.createTrace(window, (traceTypes, selection) -> {
+			if (traceTypes.contains(traceType)) {
+				return Optional.of(traceType);
+			} else {
+				return Optional.empty();
+			}
+		});
+	}
+
+	/**
+	 * Checks if there is a trace between the provided Objects.
+	 *
+	 * @param a
+	 *            first EObject
+	 * @param b
+	 *            second EObject
+	 * @return true if a trace exists between the two objects, false otherwise
+	 */
+	public static boolean thereIsATraceBetween(Object firstObject, Object secondObject) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		TraceMetaModelAdapter traceAdapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		if (firstObject instanceof EObject && secondObject instanceof EObject) {
+			EObject traceModel = persistenceAdapter.getTraceModel(((EObject) firstObject).eResource().getResourceSet());
+			if (traceModel != null) {
+				return traceAdapter.isThereATraceBetween((EObject) firstObject, (EObject) secondObject, traceModel);
+			}
+		}
+		if (firstObject instanceof EObject && !(secondObject instanceof EObject)) {
+			ResourceSet resource = ((EObject) firstObject).eResource().getResourceSet();
+			ArtifactHelper artifactHelper = new ArtifactHelper(persistenceAdapter.getArtifactWrappers(resource));
+			EObject wrapper_b = artifactHelper.createWrapper(secondObject);
+			EObject traceModel = persistenceAdapter.getTraceModel(resource);
+			if (traceModel != null) {
+				return traceAdapter.isThereATraceBetween((EObject) firstObject, wrapper_b, traceModel);
+			}
+		}
+		if (!(firstObject instanceof EObject) && secondObject instanceof EObject) {
+			ResourceSet resource = ((EObject) secondObject).eResource().getResourceSet();
+			ArtifactHelper artifactHelper = new ArtifactHelper(persistenceAdapter.getArtifactWrappers(resource));
+			EObject wrapper_a = artifactHelper.createWrapper(firstObject);
+			EObject traceModel = persistenceAdapter.getTraceModel(resource);
+			if (traceModel != null) {
+				return traceAdapter.isThereATraceBetween(wrapper_a, (EObject) secondObject, traceModel);
+			}
+		}
+		if (!(firstObject instanceof EObject) && !(secondObject instanceof EObject)) {
+			ResourceSet resource = new ResourceSetImpl();
+			ArtifactHelper artifactHelper = new ArtifactHelper(persistenceAdapter.getArtifactWrappers(resource));
+			EObject wrapper_a = artifactHelper.createWrapper(firstObject);
+			EObject wrapper_b = artifactHelper.createWrapper(secondObject);
+			EObject traceModel = persistenceAdapter.getTraceModel(resource);
+			if (traceModel != null) {
+				return traceAdapter.isThereATraceBetween(wrapper_a, wrapper_b, traceModel);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Creates an empty C or C++ project.
+	 *
+	 * @param projectName
+	 *            the name of the project to be created
+	 * @return a handle to the created project
+	 * @throws CoreException
+	 * @throws BuildException
+	 */
+	public static ICProject createCDTProject(String projectName) throws CoreException, BuildException {
+		IProject project = getProject(projectName);
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		IProjectDescription description = workspace.newProjectDescription(projectName);
+		project = CCorePlugin.getDefault().createCDTProject(description, project, new NullProgressMonitor());
+
+		// Create build info and managed project
+		ICProjectDescription cProjectDescription = CoreModel.getDefault().createProjectDescription(project, false);
+		ManagedBuildManager.createBuildInfo(project);
+		Configuration config = new Configuration(new ManagedProject(cProjectDescription), null, "myId", "myName");
+		config.getEditableBuilder().setManagedBuildOn(false);
+		cProjectDescription.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID,
+				config.getConfigurationData());
+
+		CoreModel.getDefault().setProjectDescription(project, cProjectDescription);
+		CProjectNature.addCNature(project, new NullProgressMonitor());
+
+		return CoreModel.getDefault().create(project);
+	}
+
+	/**
+	 * Creates a C source file in the provided C project.
+	 *
+	 * @param fileName
+	 *            the name of the C source file to be created in the project
+	 * @param cProject
+	 *            the project in which the file is to be created
+	 * @return the created TranslationUnit
+	 * @throws CoreException
+	 */
+	public static ITranslationUnit createCSourceFileInProject(String fileName, ICProject cProject)
+			throws CoreException {
+
+		StringBuffer buffer = new StringBuffer();
+		buffer.append("#include <stdio.h>\n");
+		buffer.append("\n");
+		buffer.append("int main() {\n");
+		buffer.append("\tprintf(\"Hello, World!\");\n");
+		buffer.append("\treturn 0;\n");
+		buffer.append("}\n");
+		IFile cSourceFile = cProject.getProject().getFile(fileName);
+		cSourceFile.create(new ByteArrayInputStream(buffer.toString().getBytes()), true, new NullProgressMonitor());
+
+		return ((ISourceRoot) (cProject.getChildren()[0])).getTranslationUnits()[0];
+	}
+
+	/**
+	 * Creates an empty file in the project with the provided name.
+	 *
+	 * @param fileName
+	 *            the name of the created file
+	 * @param projectName
+	 *            the name of the project in which the file is to be created
+	 * @return a handle to the created file
+	 * @throws CoreException
+	 */
+	public static IFile createEmptyFileInProject(String fileName, String projectName) throws CoreException {
+		IProject project = getProject(projectName);
+		IFile f = project.getFile(fileName);
+		f.create(new ByteArrayInputStream("hello world!".getBytes()), true, new NullProgressMonitor());
+
+		return f;
+	}
+
+	/**
+	 * Resets the selection view by emptying it.
+	 */
+	public static void resetSelectionView() {
+		SelectionView.getOpenedView().clearSelection();
+		ToggleTransitivityHandler.setTraceViewTransitive(true);
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+	}
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestRetry.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestRetry.java
new file mode 100644
index 0000000..628c00d
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestRetry.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * 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 org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A JUnit rule that allows the JUnit tests to re-run for a specified amount of
+ * times in case of failure.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class TestRetry implements TestRule {
+
+	private static final Logger LOG = LoggerFactory.getLogger(TestRetry.class);
+
+	
+	private int retryCount;
+
+	/**
+	 * A constructor that specifies the amount of times that a JUnit test is
+	 * re-run in case of failure.
+	 *
+	 * @param retryCount
+	 *            the amount of retries
+	 */
+	public TestRetry(int retryCount) {
+		this.retryCount = retryCount;
+	}
+
+	@Override
+	public Statement apply(Statement base, Description description) {
+		return modifyStatement(base, description);
+	}
+
+	private Statement modifyStatement(Statement base, Description description) {
+		return new Statement() {
+
+			@Override
+			public void evaluate() throws Throwable {
+				Throwable caughtThrowable = null;
+
+				for (int i = 0; i < retryCount; i++) {
+					try {
+						base.evaluate();
+						return;
+					} catch (Throwable t) {
+						caughtThrowable = t;
+						LOG.error("{}: run {} failed", description.getDisplayName(), (i + 1));
+					}
+				}
+				LOG.error("{}: giving up after {} failures", description.getDisplayName(), retryCount);
+				throw caughtThrowable;
+			}
+		};
+	}
+}
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
new file mode 100644
index 0000000..903f252
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestTraceabiltyMatrix.java
@@ -0,0 +1,195 @@
+/*******************************************************************************
+ * 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.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.load;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+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.ToggleTransitivityHandler;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestTraceabiltyMatrix {
+
+	private static final String CLASS_A_NAME = "A";
+	private static final String CLASS_AA_NAME = "AA";
+	private static final String CLASS_B_NAME = "B";
+	private static final String CLASS_BB_NAME = "BB";
+
+	private static final String MODEL_A_FILENAME = "modelA.ecore";
+	private static final String MODEL_B_FILENAME = "modelB.ecore";
+
+	private static final String MODEL_A_NAME = "modelA";
+	private static final String MODEL_B_NAME = "modelB";
+
+	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 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_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";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Test
+	public void testMatrix() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create two models each with two classes and persist them
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		createEClassInEPackage(a, CLASS_AA_NAME);
+		save(testProject, a);
+
+		EPackage b = createEcoreModel(MODEL_B_NAME);
+		createEClassInEPackage(b, CLASS_B_NAME);
+		createEClassInEPackage(b, CLASS_BB_NAME);
+		save(testProject, b);
+
+		// Load them and choose the four classes
+		ResourceSet rs = new ResourceSetImpl();
+
+		EPackage _a = load(testProject, MODEL_A_FILENAME, rs);
+		assertEquals(_a.getName(), MODEL_A_NAME);
+		EClass _A = (EClass) _a.getEClassifier(CLASS_A_NAME);
+		EClass _AA = (EClass) _a.getEClassifier(CLASS_AA_NAME);
+
+		EPackage _b = load(testProject, MODEL_B_FILENAME, rs);
+		assertEquals(_b.getName(), MODEL_B_NAME);
+		EClass _B = (EClass) _b.getEClassifier(CLASS_B_NAME);
+		EClass _BB = (EClass) _b.getEClassifier(CLASS_BB_NAME);
+
+		// Add A and B to the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(_A);
+		SelectionView.getOpenedView().dropToSelection(_B);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(_A, _B));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(_A, _B));
+
+		// Clear the selection view
+		SelectionView.getOpenedView().clearSelection();
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Add AA and BB to selection view
+		SelectionView.getOpenedView().dropToSelection(_AA);
+		SelectionView.getOpenedView().dropToSelection(_BB);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Create a trace between AA and BB
+		assertFalse(thereIsATraceBetween(_AA, _BB));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Remove trace model from resource set to make sure the trace model is
+		// re-loaded to capture the second trace link
+		removeTraceModel(rs);
+		assertTrue(thereIsATraceBetween(_AA, _BB));
+
+		// create trace link between package A and B
+		// clear selection
+		SelectionView.getOpenedView().clearSelection();
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Add Package A and B to selection view
+		SelectionView.getOpenedView().dropToSelection(_a);
+		SelectionView.getOpenedView().dropToSelection(_b);
+		assertFalse(SelectionView.getOpenedView().getSelection().isEmpty());
+
+		// Create a trace between Package A and B
+		assertFalse(thereIsATraceBetween(_a, _b));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Remove trace model from resource set to make sure the trace model is
+		// re-loaded to capture the third trace link
+		removeTraceModel(rs);
+		assertTrue(thereIsATraceBetween(_a, _b));
+
+		// create a selection with Package A and B
+		List<Object> selectedPackages = new ArrayList<>();
+		selectedPackages.add(_a);
+		selectedPackages.add(_b);
+
+		// Test directly connected Elements
+		ToggleTransitivityHandler.setTraceViewTransitive(false);
+		DiagramTextProviderHandler provider = new DiagramTextProviderHandler();
+		String plantUMLTextForSelectedPackages_Direct = provider.getDiagramText(selectedPackages);
+		assertTrue(plantUMLTextForSelectedPackages_Direct.equals(EXPECTED_TEXT_FOR_SELECTED_PACKAGES_DIRECT));
+
+		// Test transitively connected Elements
+		ToggleTransitivityHandler.setTraceViewTransitive(true);
+		String plantUMLTextForSelectedPackages_Transitive = provider.getDiagramText(selectedPackages);
+		assertTrue(plantUMLTextForSelectedPackages_Transitive.equals(EXPECTED_TEXT_FOR_SELECTED_PACKAGES_TRANSITIVE));
+
+		// test multiple classes selected
+		List<Object> selectedClasses = new ArrayList<>();
+		selectedClasses.add(_A);
+		selectedClasses.add(_B);
+		selectedClasses.add(_AA);
+		selectedClasses.add(_BB);
+
+		String plantUMLTextForSelectedClasses = provider.getDiagramText(selectedClasses);
+		assertTrue(plantUMLTextForSelectedClasses.equals(EXPECTED_TEXT_FOR_SELECTED_CLASSES));
+	}
+
+	private void removeTraceModel(ResourceSet rs) {
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		EObject tm = persistenceAdapter.getTraceModel(rs);
+		rs.getResources().remove(tm.eResource());
+	}
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
new file mode 100644
index 0000000..e682569
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * 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 java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy;
+import org.eclipse.swt.dnd.Transfer;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Contains an integration test to check if contributions to extension points
+ * are set correctly.
+ * 
+ * @author Jan-Philipp Steghöfer
+ *
+ */
+public class TestUiExtensionPoint {
+
+	private static final String TRANSFER_EXTENSION_POINT_ID = "org.eclipse.capra.ui.transfers";
+
+	@Test
+	public void testExtensionPoint() {
+
+		List<Transfer> transfers = new ArrayList<Transfer>();
+
+		// Get all additionally configured transfers from the extension point.
+		transfers.addAll(ExtensionPointHelper.getExtensions(TRANSFER_EXTENSION_POINT_ID, "class").stream()
+				.map(Transfer.class::cast).collect(Collectors.toList()));
+
+		Assert.assertTrue(transfers.size() > 0);
+		Assert.assertTrue(transfers.get(0) instanceof UiTransferExtensionDummy);
+	}
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java
new file mode 100644
index 0000000..9c7ecf4
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUnwrapWrapper.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * 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.createCDTProject;
+import static org.eclipse.capra.testsuite.TestHelper.createCSourceFileInProject;
+import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsuite.TestHelper.createSimpleProject;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+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 org.eclipse.capra.core.adapters.TracePersistenceAdapter;
+import org.eclipse.capra.core.helpers.ArtifactHelper;
+import org.eclipse.capra.core.helpers.ExtensionPointHelper;
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+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.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestUnwrapWrapper {
+	private static final String TEST_PROJECT_NAME_JAVA = "TestProject_java";
+	private static final String TEST_PROJECT_NAME_C = "TestProject_C";
+	private static final String C_FILE_NAME = "CClass.c";
+	private static final String SIMPLE_PROJECT_NAME = "Simple_Test_Project";
+	private static final String I_FILE_NAME_A = "testFile_A.txt";
+	private static final String I_FILE_NAME_B = "testFile_B.txt";
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Test
+	public void testUnwrapWrapper_Java_and_C() throws CoreException, BuildException {
+		// Create a java project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME_JAVA);
+		assertTrue(projectExists(TEST_PROJECT_NAME_JAVA));
+
+		// Create a C project
+		ICProject cProject = createCDTProject(TEST_PROJECT_NAME_C);
+		assertTrue(projectExists(TEST_PROJECT_NAME_C));
+
+		// create a C class in the project
+		ITranslationUnit cClass = createCSourceFileInProject(C_FILE_NAME, cProject);
+
+		// Drop the JavaClass in the selection view
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		// Drop the c Class in the selection view
+		SelectionView.getOpenedView().dropToSelection(cClass);
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(javaClass, cClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(javaClass, cClass));
+
+		// check that the artifact wrappers have been created
+		TracePersistenceAdapter persistentAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		EObject artifactModel = persistentAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		assertTrue(artifactModel.eContents().size() == 2);
+
+		// get the first artifact wrapper and unwrap
+		EObject javaWrapper = artifactModel.eContents().get(0);
+		assertTrue(artifactHelper.unwrapWrapper(javaWrapper) instanceof IJavaElement);
+		IJavaElement javaElement = (IJavaElement) artifactHelper.unwrapWrapper(javaWrapper);
+		// test that the unwrappedObject is equal to the original java class
+		assertTrue(javaClass.equals(javaElement));
+
+		// get the second artifact wrapper and unwrap
+		EObject cWrapper = artifactModel.eContents().get(1);
+		assertTrue(artifactHelper.unwrapWrapper(cWrapper) instanceof ICElement);
+		ICElement cElement = (ICElement) artifactHelper.unwrapWrapper(cWrapper);
+		// test that the unwrappedObject is equal to the original C class
+		assertTrue(cClass.equals(cElement));
+
+	}
+
+	@Test
+	public void testUnwrapWrapper_Files() throws CoreException {
+		createSimpleProject(SIMPLE_PROJECT_NAME);
+		IFile fileA = TestHelper.createEmptyFileInProject(I_FILE_NAME_A, SIMPLE_PROJECT_NAME);
+		IFile fileB = TestHelper.createEmptyFileInProject(I_FILE_NAME_B, SIMPLE_PROJECT_NAME);
+
+		// Drop the files in the selection view
+		SelectionView.getOpenedView().dropToSelection(fileA);
+		SelectionView.getOpenedView().dropToSelection(fileB);
+
+		// Create a trace via the selection view
+		assertFalse(thereIsATraceBetween(fileA, fileB));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Check if trace has been created
+		assertTrue(thereIsATraceBetween(fileA, fileB));
+
+		// check that the artifact wrappers have been created
+		TracePersistenceAdapter persistentAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		ResourceSet resourceSet = new ResourceSetImpl();
+		EObject artifactModel = persistentAdapter.getArtifactWrappers(resourceSet);
+		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
+		assertTrue(artifactModel.eContents().size() == 2);
+
+		// get the first artifact wrapper and unwrap
+		EObject fileAWrapper = artifactModel.eContents().get(0);
+		assertTrue(artifactHelper.unwrapWrapper(fileAWrapper) instanceof IFile);
+		IFile unwrapedFileA = (IFile) artifactHelper.unwrapWrapper(fileAWrapper);
+		// test that the unwrappedObject is equal to the original file
+		assertTrue(fileA.equals(unwrapedFileA));
+
+		// get the second artifact wrapper and unwrap
+		EObject fileBWrapper = artifactModel.eContents().get(1);
+		assertTrue(artifactHelper.unwrapWrapper(fileBWrapper) instanceof IFile);
+		IFile unwrapedFileB = (IFile) artifactHelper.unwrapWrapper(fileBWrapper);
+		// test that the unwrappedObject is equal to the original file
+		assertTrue(fileB.equals(unwrapedFileB));
+
+	}
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
new file mode 100644
index 0000000..84b08dc
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * 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.extension;
+
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+
+public class UiTransferExtensionDummy extends Transfer {
+	
+	private static final String MIME_TYPE = "UiTransferExtensionDummy";
+	private static final int MIME_TYPE_ID = registerType(MIME_TYPE);
+
+	@Override
+	public TransferData[] getSupportedTypes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public boolean isSupportedType(TransferData transferData) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	protected int[] getTypeIds() {
+		return new int[] { MIME_TYPE_ID };
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		return new String[] { MIME_TYPE };
+	}
+
+	@Override
+	protected void javaToNative(Object object, TransferData transferData) {
+		// TODO Auto-generated method stub
+
+	}
+
+	@Override
+	protected Object nativeToJava(TransferData transferData) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java
new file mode 100644
index 0000000..ef52b07
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationCMethod.java
@@ -0,0 +1,248 @@
+/*******************************************************************************
+ * 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.notification;
+
+import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsuite.TestHelper.createCDTProject;
+import static org.eclipse.capra.testsuite.TestHelper.createCSourceFileInProject;
+import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.testsuite.TestRetry;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IFunction;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Contains tests to check the functioning of the Capra C notification system.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class TestNotificationCMethod {
+
+	private static final String MARKER_ATTRIBUTE_ISSUE_TYPE = "issueType";
+	private static final int IFUNCTION_TYPE_ID = 74;
+
+	private static final String CLASS_A_NAME = "A";
+	private static final String MODEL_A_NAME = "modelA";
+	private static final String FILE_NAME = "CSource.c";
+	private static final String TEST_PROJECT_NAME = "TestProject";
+
+	private static final int NUMBER_OF_RETRIES = 5;
+	private static final int UI_REACTION_WAITING_TIME = 1000;
+
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Rule
+	public TestRetry retry = new TestRetry(NUMBER_OF_RETRIES);
+
+	/**
+	 * Tests if a marker appears after deleting a C method that is referenced in
+	 * the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 * @throws BuildException
+	 */
+	@Test
+	public void testDeleteMethod() throws CoreException, IOException, InterruptedException, BuildException {
+
+		// Create a C project with a single source file
+		ICProject cProject = createCDTProject(TEST_PROJECT_NAME);
+		ITranslationUnit cSourceFile = createCSourceFileInProject(FILE_NAME, cProject);
+		IFunction method = (IFunction) cSourceFile.getChildrenOfType(IFUNCTION_TYPE_ID).get(0);
+
+		// Create a model
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+		EClass A = (EClass) a.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(method);
+		SelectionView.getOpenedView().dropToSelection(A);
+		assertFalse(thereIsATraceBetween(A, method));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(A, method));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Delete method and wait a bit for the ResourceChangedListener to
+		// trigger
+		method.delete(true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+		currMarkerLength = markers.length;
+
+		// Undo operation
+		cSourceFile.delete(true, new NullProgressMonitor());
+		createCSourceFileInProject(FILE_NAME, cProject);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after renaming a C method that is referenced in
+	 * the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 * @throws BuildException
+	 */
+	@Test
+	public void testRenameMethod() throws CoreException, IOException, InterruptedException, BuildException {
+
+		// Create a C project with a single source file
+		ICProject cProject = createCDTProject(TEST_PROJECT_NAME);
+		ITranslationUnit cSourceFile = createCSourceFileInProject(FILE_NAME, cProject);
+		IFunction method = (IFunction) cSourceFile.getChildrenOfType(74).get(0);
+
+		// Create a model
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+		EClass A = (EClass) a.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(A);
+		SelectionView.getOpenedView().dropToSelection(method);
+		assertFalse(thereIsATraceBetween(A, method));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(A, method));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Rename method and wait a bit for the ResourceChangedListener to
+		// trigger
+		method.rename("noLongerMain", true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "changed");
+		currMarkerLength = markers.length;
+
+		// Undo operation
+		cSourceFile.delete(true, new NullProgressMonitor());
+		createCSourceFileInProject(FILE_NAME, cProject);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after deleting a project that is referenced by
+	 * the trace model and contains a method that is referenced as well. Two
+	 * markers should appear, one for each element.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 * @throws BuildException
+	 */
+	@Test
+	public void testDeleteProjectWithMethod() throws CoreException, InterruptedException, BuildException, IOException {
+
+		// Create a C project with a single source file that contains a method
+		// declaration
+		ICProject cProject = createCDTProject(TEST_PROJECT_NAME);
+		ITranslationUnit cSourceFile = createCSourceFileInProject(FILE_NAME, cProject);
+		IFunction method = (IFunction) cSourceFile.getChildrenOfType(74).get(0);
+
+		// Create a model
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(cProject.getProject(), a);
+		EClass A = (EClass) a.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(A);
+		SelectionView.getOpenedView().dropToSelection(method);
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Delete project and wait a bit for the changeListener to trigger
+		getProject(TEST_PROJECT_NAME).delete(true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are two new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+		currMarkerLength = markers.length;
+
+		// Undo operation
+		cProject = createCDTProject(TEST_PROJECT_NAME);
+		createCSourceFileInProject(FILE_NAME, cProject);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength - 1, markers.length);
+	}
+}
\ No newline at end of file
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java
new file mode 100644
index 0000000..92f37b1
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationEObject.java
@@ -0,0 +1,483 @@
+/*******************************************************************************
+ * 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.notification;
+
+import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createEPackageInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createEcoreModel;
+import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.testsuite.TestRetry;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Contains tests to check the functioning of the Capra notification system when
+ * deleting, renaming or moving a model element that is referenced in the trace
+ * model.
+ *
+ * @author Dusan Kalanj
+ *
+ */
+public class TestNotificationEObject {
+
+	private static final String MARKER_ATTRIBUTE_ISSUE_TYPE = "issueType";
+
+	private static final String PACKAGE_A_NAME = "packageA";
+	private static final String PACKAGE_B_NAME = "packageB";
+
+	private static final String CLASS_A_NAME = "classA";
+	private static final String MODEL_A_NAME = "modelA";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+
+	private static final int NUMBER_OF_RETRIES = 5;
+	private static final int UI_REACTION_WAITING_TIME = 1000;
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Rule
+	public TestRetry retry = new TestRetry(NUMBER_OF_RETRIES);
+
+	/**
+	 * Tests if a marker appears after deleting a model element that is
+	 * referenced in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testDeleteModelElement() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage modelA = createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(modelA, CLASS_A_NAME);
+		save(testProject, modelA);
+		EClass classA = (EClass) modelA.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(classA);
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		assertFalse(thereIsATraceBetween(classA, javaClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(classA, javaClass));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Open an EMF editor
+		URI resourceUri = modelA.eResource().getURI();
+		File fileToOpen = new File(resourceUri.toFileString());
+		IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
+		IWorkbenchPage wp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		wp.closeAllEditors(false);
+		IEditorPart editor = IDE.openEditorOnFileStore(wp, fileStore);
+
+		// Obtain the resource of the editor and trace model
+		IEditingDomainProvider domainProvider = editor.getAdapter(IEditingDomainProvider.class);
+		Resource editorResource = domainProvider.getEditingDomain().getResourceSet().getResources().get(0);
+		Resource traceModelResource = modelA.eResource();
+
+		// Find the traced item from the traceModel in the editor's resource
+		EClass tracedItem = (EClass) editorResource.getEObject(traceModelResource.getURIFragment(classA));
+
+		// Delete the item and wait a bit for the ModelChangeListener to trigger
+		EcoreUtil.delete(tracedItem);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+
+		// Check if the marker signals the correct change
+		IMarker marker = markers[markers.length - 1];
+		String issue = (String) marker.getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE);
+		assertEquals(issue, "deleted");
+
+		// Undo the operation
+		EPackage tracedItemParent = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(modelA));
+		tracedItemParent.getEClassifiers().add(tracedItem);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if marker is gone
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after renaming a model element that is
+	 * referenced in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	// TODO Strange bug if the name of the item is just one character. In that
+	// case, EMF treats a rename operation as a delete+add operation. If it is
+	// more characters, it treats it as a normal property set operation.
+	public void testRenameModelElement() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage modelA = createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(modelA, CLASS_A_NAME);
+		save(testProject, modelA);
+		EClass classA = (EClass) modelA.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(classA);
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		assertFalse(thereIsATraceBetween(classA, javaClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(classA, javaClass));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Open an EMF editor
+		URI resourceUri = modelA.eResource().getURI();
+		File fileToOpen = new File(resourceUri.toFileString());
+		IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
+		IWorkbenchPage wp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		wp.closeAllEditors(false);
+		IEditorPart editor = IDE.openEditorOnFileStore(wp, fileStore);
+
+		// Obtain the resource of the editor and trace model
+		IEditingDomainProvider domainProvider = editor.getAdapter(IEditingDomainProvider.class);
+		Resource editorResource = domainProvider.getEditingDomain().getResourceSet().getResources().get(0);
+		Resource traceModelResource = modelA.eResource();
+
+		// Find the traced item from the traceModel in the editor's resource
+		EObject tracedItem = editorResource.getEObject(traceModelResource.getURIFragment(classA));
+
+		// Rename the item and wait a bit for the ModelChangeListener to trigger
+		((EClass) tracedItem).setName("classB");
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+
+		// Check if the marker signals the correct change
+		IMarker marker = markers[markers.length - 1];
+		String issue = (String) marker.getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE);
+		assertEquals(issue, "renamed");
+
+		// Undo the operation
+		((EClass) tracedItem).setName(CLASS_A_NAME);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if marker is gone
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after moving a model element that is referenced
+	 * in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testMoveModelElement() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage modelA = createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(modelA, CLASS_A_NAME);
+		createEPackageInEPackage(modelA, PACKAGE_A_NAME);
+		save(testProject, modelA);
+		EClass classA = (EClass) modelA.getEClassifier(CLASS_A_NAME);
+		EPackage packageA = (EPackage) modelA.getESubpackages().get(0);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(classA);
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		assertFalse(thereIsATraceBetween(classA, javaClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(classA, javaClass));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Open an EMF editor
+		URI resourceUri = modelA.eResource().getURI();
+		File fileToOpen = new File(resourceUri.toFileString());
+		IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
+		IWorkbenchPage wp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		wp.closeAllEditors(false);
+		IEditorPart editor = IDE.openEditorOnFileStore(wp, fileStore);
+
+		// Obtain the resource of the editor and trace model
+		IEditingDomainProvider domainProvider = editor.getAdapter(IEditingDomainProvider.class);
+		Resource editorResource = domainProvider.getEditingDomain().getResourceSet().getResources().get(0);
+		Resource traceModelResource = modelA.eResource();
+
+		// Find the items from the traceModel in the editor's resource
+		EClass tracedItem = (EClass) editorResource.getEObject(traceModelResource.getURIFragment(classA));
+		EPackage oldPackage = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(modelA));
+		EPackage newPackage = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(packageA));
+
+		// Move the item and wait a bit for the ModelChangeListener to trigger
+		newPackage.getEClassifiers().add(tracedItem);
+		oldPackage.getEClassifiers().remove(tracedItem);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+
+		// Check if the marker signals the correct change
+		IMarker marker = markers[markers.length - 1];
+		String issue = (String) marker.getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE);
+		assertEquals(issue, "moved");
+
+		// Undo the operation
+		oldPackage.getEClassifiers().add(tracedItem);
+		newPackage.getEClassifiers().remove(tracedItem);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if marker is gone
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after deleting a parent of the item that is
+	 * referenced in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testDeleteParentModelElement() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage modelA = createEcoreModel(MODEL_A_NAME);
+		createEPackageInEPackage(modelA, PACKAGE_A_NAME);
+		EPackage packageA = (EPackage) modelA.getESubpackages().get(0);
+		createEClassInEPackage(packageA, CLASS_A_NAME);
+		EClass classA = (EClass) packageA.getEClassifier(CLASS_A_NAME);
+		save(testProject, modelA);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(classA);
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		assertFalse(thereIsATraceBetween(classA, javaClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(classA, javaClass));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Open an EMF editor
+		URI resourceUri = modelA.eResource().getURI();
+		File fileToOpen = new File(resourceUri.toFileString());
+		IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
+		IWorkbenchPage wp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		wp.closeAllEditors(false);
+		IEditorPart editor = IDE.openEditorOnFileStore(wp, fileStore);
+
+		// Obtain the resource of the editor and trace model
+		IEditingDomainProvider domainProvider = editor.getAdapter(IEditingDomainProvider.class);
+		Resource editorResource = domainProvider.getEditingDomain().getResourceSet().getResources().get(0);
+		Resource traceModelResource = modelA.eResource();
+
+		// Find the parent of the traced item from the traceModel in the
+		// editor's resource
+		EPackage tracedItemParent = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(packageA));
+
+		// Delete parent and wait a bit for the ModelChangeListener to trigger
+		EcoreUtil.delete(tracedItemParent);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+
+		// Check if the marker signals the correct change
+		IMarker marker = markers[markers.length - 1];
+		String issue = (String) marker.getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE);
+		assertEquals(issue, "deleted");
+
+		// Undo the operation
+		EPackage parentOfTracedItemParent = (EPackage) editorResource
+				.getEObject(traceModelResource.getURIFragment(modelA));
+		parentOfTracedItemParent.getESubpackages().add(tracedItemParent);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if marker is gone
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after moving a parent of the item that is
+	 * referenced in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testMoveParentModelElement() throws CoreException, IOException, InterruptedException {
+
+		// Create a project
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage modelA = createEcoreModel(MODEL_A_NAME);
+		createEPackageInEPackage(modelA, PACKAGE_A_NAME);
+		createEPackageInEPackage(modelA, PACKAGE_B_NAME);
+		EPackage packageA = (EPackage) modelA.getESubpackages().get(0);
+		EPackage packageB = (EPackage) modelA.getESubpackages().get(1);
+		createEClassInEPackage(packageA, "A");
+		EClass classA = (EClass) packageA.getEClassifier("A");
+		save(testProject, modelA);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(classA);
+		SelectionView.getOpenedView().dropToSelection(javaClass);
+		assertFalse(thereIsATraceBetween(classA, javaClass));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(classA, javaClass));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Open an EMF editor
+		URI resourceUri = modelA.eResource().getURI();
+		File fileToOpen = new File(resourceUri.toFileString());
+		IFileStore fileStore = EFS.getLocalFileSystem().getStore(fileToOpen.toURI());
+		IWorkbenchPage wp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+		wp.closeAllEditors(false);
+		IEditorPart editor = IDE.openEditorOnFileStore(wp, fileStore);
+
+		// Obtain the resource of the editor and trace model
+		IEditingDomainProvider domainProvider = editor.getAdapter(IEditingDomainProvider.class);
+		Resource editorResource = domainProvider.getEditingDomain().getResourceSet().getResources().get(0);
+		Resource traceModelResource = modelA.eResource();
+
+		// Find the packages from the traceModel in the editor's resource
+		EPackage tracedItemParent = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(packageA));
+		EPackage oldParentOfParent = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(modelA));
+		EPackage newParentOfParent = (EPackage) editorResource.getEObject(traceModelResource.getURIFragment(packageB));
+
+		// Move the parent and wait a bit for the ModelChangeListener to trigger
+		newParentOfParent.getESubpackages().add(tracedItemParent);
+		oldParentOfParent.getESubpackages().remove(tracedItemParent);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+
+		// Check if the marker signals the correct change
+		IMarker marker = markers[markers.length - 1];
+		String issue = (String) marker.getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE);
+		assertEquals(issue, "moved");
+
+		// Undo the operation
+		oldParentOfParent.getESubpackages().add(tracedItemParent);
+		newParentOfParent.getESubpackages().remove(tracedItemParent);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if marker is gone
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength, markers.length);
+	}
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java
new file mode 100644
index 0000000..bfdaab9
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationFile.java
@@ -0,0 +1,333 @@
+/*******************************************************************************
+ * 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.notification;
+
+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.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Contains tests to check the functioning of the Capra notification system when
+ * deleting, renaming, moving or changing a file that is referenced in the trace
+ * model.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class TestNotificationFile {
+
+	private static final String MARKER_ATTRIBUTE_ISSUE_TYPE = "issueType";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+	private static final String TEST_PROJECT1_NAME = "TestProject1";
+	private static final String TEST_PROJECT2_NAME = "TestProject2";
+
+	private static final String TEST_FILE2_NAME = "TestFile2";
+	private static final String TEST_FILE1_NAME = "TestFile1";
+
+	private static final int UI_REACTION_WAITING_TIME = 1000;
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	/**
+	 * Tests if a marker appears after deleting a file that is referenced in the
+	 * trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testDeleteFile() throws CoreException, IOException, InterruptedException {
+
+		// Create a project and put files in
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+		IFile testFile1 = createEmptyFileInProject(TEST_FILE1_NAME, TEST_PROJECT_NAME);
+		IFile testFile2 = createEmptyFileInProject(TEST_FILE2_NAME, TEST_PROJECT_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(testFile1);
+		SelectionView.getOpenedView().dropToSelection(testFile2);
+		assertFalse(thereIsATraceBetween(testFile1, testFile2));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(testFile1, testFile2));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkersSize = markers.length;
+
+		// Delete file and wait a bit for the ResourceChangedListener to trigger
+		testFile1.delete(true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Repeat the process for the second file
+		testFile2.delete(true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Assert issue types
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+		assertEquals(markers[1].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+
+		// Undo for first file
+		createEmptyFileInProject(TEST_FILE1_NAME, TEST_PROJECT_NAME);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize - 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Undo for second file
+		createEmptyFileInProject(TEST_FILE2_NAME, TEST_PROJECT_NAME);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after moving a file that is referenced in the
+	 * trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testMoveFile() throws CoreException, IOException, InterruptedException {
+
+		// Create a project and put files in
+		createSimpleProject(TEST_PROJECT1_NAME);
+		assertTrue(projectExists(TEST_PROJECT1_NAME));
+		IFile testFile1 = createEmptyFileInProject(TEST_FILE1_NAME, TEST_PROJECT1_NAME);
+		IFile testFile2 = createEmptyFileInProject(TEST_FILE2_NAME, TEST_PROJECT1_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(testFile1);
+		SelectionView.getOpenedView().dropToSelection(testFile2);
+		assertFalse(thereIsATraceBetween(testFile1, testFile2));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(testFile1, testFile2));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkersSize = markers.length;
+
+		// Move first file to another project and wait a bit for the
+		// ResourceChangedListener to trigger
+		IProject project2 = createSimpleProject(TEST_PROJECT2_NAME);
+		assertTrue(projectExists(TEST_PROJECT2_NAME));
+		IPath oldPath_file1 = testFile1.getFullPath();
+		Path movePath_file1 = new Path(oldPath_file1.toString().replaceFirst(TEST_PROJECT1_NAME, TEST_PROJECT2_NAME));
+		testFile1.move(movePath_file1, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Repeat the process for the second file
+		IPath oldPath_file2 = testFile2.getFullPath();
+		Path movePath_file2 = new Path(oldPath_file2.toString().replaceFirst(TEST_PROJECT1_NAME, TEST_PROJECT2_NAME));
+		testFile2.move(movePath_file2, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Assert issue types
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "moved");
+		assertEquals(markers[1].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "moved");
+
+		// Undo for first file
+		testFile1 = project2.getFile(TEST_FILE1_NAME);
+		testFile1.move(oldPath_file1, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize - 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Undo for second file
+		testFile2 = project2.getFile(TEST_FILE2_NAME);
+		testFile2.move(oldPath_file2, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after renaming a file that is referenced in the
+	 * trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testRenameFile() throws CoreException, IOException, InterruptedException {
+
+		// Create a project and put files in
+		IProject project = createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+		IFile testFile1 = createEmptyFileInProject(TEST_FILE1_NAME, TEST_PROJECT_NAME);
+		IFile testFile2 = createEmptyFileInProject(TEST_FILE2_NAME, TEST_PROJECT_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(testFile1);
+		SelectionView.getOpenedView().dropToSelection(testFile2);
+		assertFalse(thereIsATraceBetween(testFile1, testFile2));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(testFile1, testFile2));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkersSize = markers.length;
+
+		// Rename file and wait a bit for the ResourceChangedListener to trigger
+		IPath oldPath_file1 = testFile1.getFullPath();
+		Path renamePath_file1 = new Path(oldPath_file1.toString().replaceFirst(TEST_FILE1_NAME, "TestFile3"));
+		testFile1.move(renamePath_file1, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Repeat the process for the second file
+		IPath oldPath_file2 = testFile2.getFullPath();
+		Path renamePath_file2 = new Path(oldPath_file2.toString().replaceFirst(TEST_FILE2_NAME, "TestFile4"));
+		testFile2.move(renamePath_file2, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Assert issue types
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "renamed");
+		assertEquals(markers[1].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "renamed");
+
+		// Undo for first file
+		testFile2 = project.getFile("TestFile3");
+		testFile2.move(oldPath_file1, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize - 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Undo for second file
+		testFile2 = project.getFile("TestFile4");
+		testFile2.move(oldPath_file2, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after editing a file that is referenced in the
+	 * trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testEditFile() throws CoreException, IOException, InterruptedException {
+
+		// Create a project and put files in
+		createSimpleProject(TEST_PROJECT_NAME);
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+		IFile testFile1 = createEmptyFileInProject(TEST_FILE1_NAME, TEST_PROJECT_NAME);
+		IFile testFile2 = createEmptyFileInProject(TEST_FILE2_NAME, TEST_PROJECT_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(testFile1);
+		SelectionView.getOpenedView().dropToSelection(testFile2);
+		assertFalse(thereIsATraceBetween(testFile1, testFile2));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(testFile1, testFile2));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkersSize = markers.length;
+
+		// Edit file and wait a bit for the ResourceChangedListener to trigger
+		testFile1.appendContents(new ByteArrayInputStream("\nhello again 1!".getBytes()), true, true,
+				new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+		currMarkersSize = markers.length;
+
+		// Repeat the process for the second file
+		testFile2.appendContents(new ByteArrayInputStream("\nhello again 2!".getBytes()), true, true,
+				new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkersSize + 1, markers.length);
+
+		// Assert issue types
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "changed");
+		assertEquals(markers[1].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "changed");
+	}
+}
diff --git a/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java
new file mode 100644
index 0000000..c616675
--- /dev/null
+++ b/tests/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/notification/TestNotificationJavaMethod.java
@@ -0,0 +1,250 @@
+/*******************************************************************************
+ * 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.notification;
+
+import static org.eclipse.capra.testsuite.TestHelper.clearWorkspace;
+import static org.eclipse.capra.testsuite.TestHelper.createEClassInEPackage;
+import static org.eclipse.capra.testsuite.TestHelper.createJavaProjectWithASingleJavaClass;
+import static org.eclipse.capra.testsuite.TestHelper.createTraceForCurrentSelectionOfType;
+import static org.eclipse.capra.testsuite.TestHelper.getProject;
+import static org.eclipse.capra.testsuite.TestHelper.projectExists;
+import static org.eclipse.capra.testsuite.TestHelper.resetSelectionView;
+import static org.eclipse.capra.testsuite.TestHelper.save;
+import static org.eclipse.capra.testsuite.TestHelper.thereIsATraceBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.capra.generic.tracemodel.TracemodelPackage;
+import org.eclipse.capra.testsuite.TestHelper;
+import org.eclipse.capra.testsuite.TestRetry;
+import org.eclipse.capra.ui.views.SelectionView;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Contains tests to check the functioning of the Capra notification system when
+ * deleting, renaming, or changing a Java method that is referenced in the trace
+ * model.
+ * 
+ * @author Dusan Kalanj
+ *
+ */
+public class TestNotificationJavaMethod {
+
+	private static final String MARKER_ATTRIBUTE_ISSUE_TYPE = "issueType";
+
+	private static final String TEST_PROJECT_NAME = "TestProject";
+	private static final String CLASS_A_NAME = "A";
+	private static final String MODEL_A_NAME = "modelA";
+
+	private static final int UI_REACTION_WAITING_TIME = 1000;
+	private static final int NUMBER_OF_RETRIES = 5;
+
+	@Before
+	public void init() throws CoreException {
+		clearWorkspace();
+		resetSelectionView();
+	}
+
+	@Rule
+	public TestRetry retry = new TestRetry(NUMBER_OF_RETRIES);
+
+	/**
+	 * Tests if a marker appears after deleting a Java method that is referenced
+	 * in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testDeleteMethod() throws CoreException, IOException, InterruptedException {
+
+		// Create a project with a Java source file
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		String classSource = javaClass.getSource();
+		IMethod method = (IMethod) javaClass.getChildren()[0];
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+		EClass A = (EClass) a.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(A);
+		SelectionView.getOpenedView().dropToSelection(method);
+		assertFalse(thereIsATraceBetween(A, method));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(A, method));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Delete method and wait a bit for the
+		// ResourceChangedListener to trigger
+		method.delete(true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+		currMarkerLength = markers.length;
+
+		// Undo operation
+		File classFile = javaClass.getResource().getLocation().makeAbsolute().toFile();
+		PrintWriter writer = new PrintWriter(classFile);
+		writer.write(classSource);
+		writer.close();		
+		root.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(3000);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after renaming a Java method that is referenced
+	 * in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testRenameMethod() throws CoreException, IOException, InterruptedException {
+
+		// Create a project with a Java source file
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		IMethod method = (IMethod) javaClass.getChildren()[0];
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+		EClass A = (EClass) a.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(A);
+		SelectionView.getOpenedView().dropToSelection(method);
+		assertFalse(thereIsATraceBetween(A, method));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(A, method));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Rename method and wait a bit for the
+		// ResourceChangedListener to trigger
+		String oldName = method.getElementName();
+		method.rename("stillDoNothing", true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(300);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+		currMarkerLength = markers.length;
+		
+		// Undo operation
+		method = (IMethod) javaClass.getChildren()[0];
+		method.rename(oldName, true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength - 1, markers.length);
+	}
+
+	/**
+	 * Tests if a marker appears after editing a Java method that is referenced
+	 * in the trace model.
+	 * 
+	 * @throws CoreException
+	 * @throws IOException
+	 * @throws InterruptedException
+	 */
+	@Test
+	public void testDeleteProjectOfMethod() throws CoreException, IOException, InterruptedException {
+
+		// Create a project with a Java source file
+		IType javaClass = createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		IMethod method = (IMethod) javaClass.getChildren()[0];
+		assertTrue(projectExists(TEST_PROJECT_NAME));
+
+		// Create a model and persist
+		IProject testProject = getProject(TEST_PROJECT_NAME);
+		EPackage a = TestHelper.createEcoreModel(MODEL_A_NAME);
+		createEClassInEPackage(a, CLASS_A_NAME);
+		save(testProject, a);
+		EClass A = (EClass) a.getEClassifier(CLASS_A_NAME);
+
+		// Create a trace via the selection view
+		assertTrue(SelectionView.getOpenedView().getSelection().isEmpty());
+		SelectionView.getOpenedView().dropToSelection(A);
+		SelectionView.getOpenedView().dropToSelection(method);
+		assertFalse(thereIsATraceBetween(A, method));
+		createTraceForCurrentSelectionOfType(TracemodelPackage.eINSTANCE.getRelatedTo());
+		assertTrue(thereIsATraceBetween(A, method));
+
+		// Get current number of markers
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		IMarker[] markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		int currMarkerLength = markers.length;
+
+		// Delete method and wait a bit for the
+		// ResourceChangedListener to trigger
+		testProject.delete(true, new NullProgressMonitor());
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+
+		// Check if there are new markers
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength + 1, markers.length);
+		assertEquals(markers[0].getAttribute(MARKER_ATTRIBUTE_ISSUE_TYPE), "deleted");
+		currMarkerLength = markers.length;
+		
+		// Undo operation
+		createJavaProjectWithASingleJavaClass(TEST_PROJECT_NAME);
+		TimeUnit.MILLISECONDS.sleep(UI_REACTION_WAITING_TIME);
+		markers = root.findMarkers(TestHelper.CAPRA_PROBLEM_MARKER_ID, true, IResource.DEPTH_INFINITE);
+		assertEquals(currMarkerLength - 1, markers.length);
+	}
+}