Merge branch 'smaro/feature/officeHandler' of ssh://git.eclipse.org:29418/capra/org.eclipse.capra into smaro/feature/officeHandler
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
index 092fb5f..f429025 100644
--- 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.capra.core.handlers;
 
+import org.eclipse.capra.core.helpers.EMFHelper;
 import org.eclipse.emf.ecore.EObject;
 
 /**
@@ -55,4 +56,20 @@
 	 */
 	Object resolveArtifact(EObject artifact);
 
+	/**
+	 * 
+	 * @param selection
+	 *            The selected object to be added to the selection view
+	 * @return The name that should be displayed in the selection view. This
+	 *         method has a default implementation but gives flexibility for
+	 *         each handler to decide how its objects should look like when
+	 *         dropped to the selection view.
+	 */
+	default String getDisplayName(Object selection) {
+		if (selection instanceof EObject) {
+			return EMFHelper.getIdentifier((EObject) selection);
+		} else
+			return selection.toString();
+	}
+
 }
diff --git a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/EMFHelper.java b/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
similarity index 98%
rename from org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/EMFHelper.java
rename to org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
index e498b8e..4b3fcbe 100644
--- a/org.eclipse.capra.ui/src/org/eclipse/capra/ui/helpers/EMFHelper.java
+++ b/org.eclipse.capra.core/src/org/eclipse/capra/core/helpers/EMFHelper.java
@@ -8,7 +8,7 @@
  *   Contributors:
  *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
  *******************************************************************************/
-package org.eclipse.capra.ui.helpers;
+package org.eclipse.capra.core.helpers;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java b/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
index 8657e19..18af1d7 100644
--- a/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
+++ b/org.eclipse.capra.handler.cdt/src/org/eclipse/capra/handler/cdt/CDTHandler.java
@@ -44,4 +44,10 @@
 		return CoreModel.create(uri);
 	}
 
+	@Override
+	public String getDisplayName(Object selection) {
+		ICElement cu = (ICElement) selection;
+		return cu.getElementName();
+	}
+
 }
diff --git a/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java b/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
index 59593d2..bfd655b 100644
--- a/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
+++ b/org.eclipse.capra.handler.file/src/org/eclipse/capra/handler/file/IFileHandler.java
@@ -37,7 +37,13 @@
 
 	@Override
 	public Object resolveArtifact(EObject artifact) {
-		// TODO Auto-generated method stub
+		//TO DO
 		return null;
 	}
+	
+	@Override
+	public String getDisplayName(Object selection) {
+		IFile selectionAsFile = (IFile) selection;
+		return selectionAsFile.getName();
+	}
 }
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
index 18d064d..4e5b100 100644
--- 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
@@ -56,4 +56,16 @@
 		return null;
 	}
 
+	@Override
+	public String getDisplayName(Object selection) {
+		if (selection instanceof TestElement) {
+			TestElement test = (TestElement) selection;
+			return test.getLabel();
+		} else {
+			BuildElement build = (BuildElement) selection;
+			return build.getName();
+		}
+
+	}
+
 }
diff --git a/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java b/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
index 45e0d08..df804f1 100644
--- a/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
+++ b/org.eclipse.capra.handler.jdt/src/org/eclipse/capra/handler/jdt/JavaElementHandler.java
@@ -48,4 +48,10 @@
 		return JavaCore.create(uri);
 	}
 
+	@Override
+	public String getDisplayName(Object selection) {
+		IJavaElement cu = (IJavaElement) selection;
+		return cu.getElementName();
+	}
+
 }
diff --git a/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java b/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
index ca851b2..03ed56e 100644
--- a/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
+++ b/org.eclipse.capra.handler.mylyn/src/org/eclipse/capra/handler/mylyn/MylynHandler.java
@@ -41,4 +41,10 @@
 		return null;
 	}
 
+	@Override
+	public String getDisplayName(Object selection) {
+		ITask task = (ITask) selection;
+		return task.getTaskId() + " : " + task.getSummary();
+	}
+
 }
diff --git a/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java b/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
index d8a5333..af625aa 100644
--- a/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
+++ b/org.eclipse.capra.handler.reqIf/src/org/eclipse/capra/handler/reqif/ReqIfHandler.java
@@ -13,6 +13,7 @@
 import org.eclipse.capra.core.handlers.ArtifactHandler;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.rmf.reqif10.SpecObject;
 import org.eclipse.rmf.reqif10.impl.SpecHierarchyImpl;
 
 public class ReqIfHandler implements ArtifactHandler {
@@ -46,4 +47,14 @@
 		return artifact;
 	}
 
+	@Override
+	public String getDisplayName(Object selection) {
+		IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+		Object element = structuredSelection.getFirstElement();
+		SpecHierarchyImpl specification = (SpecHierarchyImpl) element;
+		SpecObject specObject = specification.getObject();
+
+		return specObject.getIdentifier();
+	}
+
 }
diff --git a/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF b/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
index 812f648..bb027ef 100644
--- a/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
+++ b/org.eclipse.capra.testsuite/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Testsuite
-Bundle-SymbolicName: org.eclipse.capra.testsuite
+Bundle-SymbolicName: org.eclipse.capra.testsuite;singleton:=true
 Bundle-Version: 0.7.0.qualifier
 Export-Package: org.eclipse.capra.testsuite
 Require-Bundle: org.junit;bundle-version="4.12.0",
@@ -23,3 +23,4 @@
  org.eclipse.capra.handler.emf,
  org.eclipse.capra.generic.persistence
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.eclipse.swt.dnd
diff --git a/org.eclipse.capra.testsuite/plugin.xml b/org.eclipse.capra.testsuite/plugin.xml
new file mode 100644
index 0000000..1589acc
--- /dev/null
+++ b/org.eclipse.capra.testsuite/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.capra.ui.transfers">
+      <transfer
+            class="org.eclipse.capra.testsuite.extension.UiTransferExtensionDummy">
+      </transfer>
+   </extension>
+
+</plugin>
diff --git a/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
new file mode 100644
index 0000000..31839ad
--- /dev/null
+++ b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/TestUiExtensionPoint.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * 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.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/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
new file mode 100644
index 0000000..ddba796
--- /dev/null
+++ b/org.eclipse.capra.testsuite/src/org/eclipse/capra/testsuite/extension/UiTransferExtensionDummy.java
@@ -0,0 +1,44 @@
+package org.eclipse.capra.testsuite.extension;
+
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+
+public class UiTransferExtensionDummy extends Transfer {
+
+	@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() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	protected String[] getTypeNames() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@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/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
index 1eab0cc..d36a491 100644
--- 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
@@ -19,7 +19,7 @@
 import java.util.Set;
 
 import org.eclipse.capra.core.adapters.Connection;
-import org.eclipse.capra.ui.helpers.EMFHelper;
+import org.eclipse.capra.core.helpers.EMFHelper;
 import org.eclipse.emf.ecore.EObject;
 
 /**
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
index d2d6d4b..f6d5759 100644
--- 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
@@ -17,10 +17,10 @@
 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.EMFHelper;
 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.capra.ui.helpers.TraceCreationHelper;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.jface.viewers.ISelection;
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
index 592605d..5e5262d 100644
--- 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
@@ -4,7 +4,7 @@
 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.capra.core.helpers.EMFHelper
 import org.eclipse.emf.ecore.EObject
 
 class VisualizationHelper {
diff --git a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
index bb33b88..01ee436 100644
--- a/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
+++ b/org.eclipse.capra.ui.plantuml/xtend-gen/org/eclipse/capra/ui/plantuml/.VisualizationHelper.xtendbin
Binary files differ
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
index 5f05224..6e76a6d 100644
--- 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
@@ -1,116 +1,58 @@
 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;
-  }
+	public static String createMatrix(final EObject traceModel, final Collection<EObject> firstElements,
+			final Collection<EObject> secondElements) {
+		throw new Error("Unresolved compilation problems:" + "\nThe method or field EMFHelper is undefined"
+				+ "\nThe method or field EMFHelper is undefined" + "\ngetIdentifier cannot be resolved"
+				+ "\ngetIdentifier cannot be resolved");
+	}
+
+	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
index 23086b0..e7065ac 100644
--- a/org.eclipse.capra.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.capra.ui/META-INF/MANIFEST.MF
@@ -22,8 +22,7 @@
  org.eclipse.ui.ide;bundle-version="3.10.2",
  org.eclipse.ui,
  org.eclipse.core.resources,
- org.eclipse.capra.core,
- org.eclipse.capra.ui.office
+ org.eclipse.capra.core
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.capra.ui.handlers,
  org.eclipse.capra.ui.helpers,
diff --git a/org.eclipse.capra.ui/plugin.xml b/org.eclipse.capra.ui/plugin.xml
index 874525a..b7e46a1 100644
--- a/org.eclipse.capra.ui/plugin.xml
+++ b/org.eclipse.capra.ui/plugin.xml
@@ -12,6 +12,7 @@
  -->
 
 <plugin>
+   <extension-point id="org.eclipse.capra.ui.transfers" name="Transfers" schema="schema/org.eclipse.capra.ui.transfers.exsd"/>
    <extension
          point="org.eclipse.ui.commands">
       <command
diff --git a/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd b/org.eclipse.capra.ui/schema/org.eclipse.capra.ui.transfers.exsd
new file mode 100644
index 0000000..546d8ac
--- /dev/null
+++ b/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/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
index 83bb544..10d27a1 100644
--- 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
@@ -20,8 +20,8 @@
 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.EMFHelper;
 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;
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
index fe61708..0c1cce2 100644
--- 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
@@ -11,6 +11,7 @@
 package org.eclipse.capra.ui.views;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -21,8 +22,6 @@
 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;
@@ -52,6 +51,21 @@
 	/** 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;
 
@@ -77,11 +91,13 @@
 
 		@Override
 		public String getText(Object element) {
-			if (element instanceof EObject) {
-				return EMFHelper.getIdentifier((EObject) element);
+			Collection<ArtifactHandler> artifactHandlers = ExtensionPointHelper.getArtifactHandlers();
+			List<ArtifactHandler> availableHandlers = artifactHandlers.stream()
+					.filter(handler -> handler.canHandleSelection(element)).collect(Collectors.toList());
+			if (availableHandlers.size() == 1) {
+				return availableHandlers.get(0).getDisplayName(element);
 			} else
-				return element.toString();
-
+				return null;
 		};
 
 		@Override
@@ -128,6 +144,7 @@
 
 	}
 
+	@Override
 	public void createPartControl(Composite parent) {
 		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
 		viewer.setContentProvider(new ViewContentProvider());
@@ -139,15 +156,15 @@
 		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(),
-				org.eclipse.capra.ui.office.utils.OfficeTransferType.getInstance()};
 
-		viewer.addDropSupport(ops, transfers, new SelectionDropAdapter(viewer));
+		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() {
@@ -169,7 +186,6 @@
 
 	@SuppressWarnings("unchecked")
 	public void dropToSelection(Object data) {
-
 		if (data instanceof TreeSelection) {
 			TreeSelection tree = (TreeSelection) data;
 			if (tree.toList().stream().allMatch(this::validateSelection))