diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/META-INF/MANIFEST.MF b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/META-INF/MANIFEST.MF
index d5c2eb9..3f1dd33 100644
--- a/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/META-INF/MANIFEST.MF
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/META-INF/MANIFEST.MF
@@ -12,8 +12,12 @@
  org.eclipse.emf.ecore;bundle-version="[2.13.0,3.0.0)";visibility:=reexport,
  org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
  org.eclipse.m2m.qvt.oml;bundle-version="[3.7.0,4.0.0)",
- org.eclipse.uml2.uml;bundle-version="[5.2.0,6.0.0)"
+ org.eclipse.uml2.uml;bundle-version="[5.2.0,6.0.0)",
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.7.0,2.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.papyrus.interoperability.common.blackboxes,
- org.eclipse.papyrus.interoperability.common.blackboxes.ecore
+ org.eclipse.papyrus.interoperability.common.blackboxes.ecore,
+ org.eclipse.papyrus.interoperability.common.blackboxes.emf,
+ org.eclipse.papyrus.interoperability.common.blackboxes.uml,
+ org.eclipse.papyrus.interoperability.common.blackboxes.utils
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/plugin.xml b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/plugin.xml
index f3d0d1d..d9201ab 100644
--- a/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/plugin.xml
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/plugin.xml
@@ -42,5 +42,27 @@
             </metamodel>
          </library>
       </unit>
+      <unit
+            description="Provides some EMF Resource manipulation helpers"
+            name="EMFResource"
+            namespace="org.eclipse.papyrus.interoperability.common.blackboxes.emf">
+         <library
+               class="org.eclipse.papyrus.interoperability.common.blackboxes.emf.EMFResourceUtils">
+            <metamodel
+                  nsURI="http://www.eclipse.org/emf/2002/Ecore">
+            </metamodel>
+         </library>
+      </unit>
+      <unit
+            description="Provides an access to Config Properties"
+            name="Properties"
+            namespace="org.eclipse.papyrus.interoperability.common.blackboxes.utils">
+         <library
+               class="org.eclipse.papyrus.interoperability.common.blackboxes.utils.PropertiesUtil">
+            <metamodel
+                  nsURI="http://www.eclipse.org/emf/2002/Ecore">
+            </metamodel>
+         </library>
+      </unit>
     </extension>
 </plugin>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/src/org/eclipse/papyrus/interoperability/common/blackboxes/emf/EMFResourceUtils.java b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/src/org/eclipse/papyrus/interoperability/common/blackboxes/emf/EMFResourceUtils.java
new file mode 100644
index 0000000..78c295d
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/src/org/eclipse/papyrus/interoperability/common/blackboxes/emf/EMFResourceUtils.java
@@ -0,0 +1,65 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA LIST.
+ *
+ * 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:
+ *  Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.blackboxes.emf;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind;
+
+
+public class EMFResourceUtils {
+
+	/**
+	 * Returns the URI of the selected element as a String
+	 *
+	 * @param target
+	 * @return
+	 */
+	@Operation(contextual = true, kind = Kind.QUERY)
+	public String getURI(EObject target) {
+		if (target == null) {
+			return "";
+		}
+		return EcoreUtil.getURI(target).toString();
+	}
+
+	/**
+	 * Deletes the selected element, ensuring that it is also removed from the
+	 * CrossReference (Especially useful for UML Models to avoid memory leaks)
+	 *
+	 * If delete incoming references is true, the operation may take a longer time
+	 * to complete
+	 *
+	 * @param target
+	 * @param deleteIncomingReferences
+	 */
+	@Operation(contextual = true, kind = Kind.HELPER)
+	public void forceDelete(EObject target, boolean deleteIncomingReferences) {
+		if (target == null) {
+			return;
+		}
+
+		ECrossReferenceAdapter adapter = ECrossReferenceAdapter.getCrossReferenceAdapter(target);
+
+		if (deleteIncomingReferences) {
+			EcoreUtil.delete(target);
+		} else {
+			EcoreUtil.remove(target);
+		}
+
+		if (adapter != null) {
+			adapter.unsetTarget(target);
+		}
+	}
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/src/org/eclipse/papyrus/interoperability/common/blackboxes/utils/PropertiesUtil.java b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/src/org/eclipse/papyrus/interoperability/common/blackboxes/utils/PropertiesUtil.java
new file mode 100644
index 0000000..386d379
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common.blackboxes/src/org/eclipse/papyrus/interoperability/common/blackboxes/utils/PropertiesUtil.java
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (c) 2014 CEA LIST.
+ *
+ * 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:
+ *  Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.blackboxes.utils;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind;
+import org.eclipse.m2m.qvt.oml.util.IContext;
+
+
+public class PropertiesUtil {
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public String getStringProperty(IContext context, String property) {
+		return (String)context.getConfigProperty(property);
+	}
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public boolean getBooleanProperty(IContext context, String property) {
+		return Boolean.parseBoolean(context.getConfigProperty(property).toString());
+	}
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public int getIntegerProperty(IContext context, String property) {
+		return Integer.parseInt(context.getConfigProperty(property).toString());
+	}
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public EObject getEObjectProperty(IContext context, String property) {
+		Object value = context.getConfigProperties().get(property);
+		if(value instanceof EObject) {
+			return (EObject)value;
+		}
+		return null;
+	}
+
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF b/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF
index db7e41d..3995795 100644
--- a/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/META-INF/MANIFEST.MF
@@ -7,22 +7,21 @@
 Bundle-Activator: org.eclipse.papyrus.interoperability.common.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime;resolution:=optional;x-installation:=greedy,
- org.eclipse.emf.ecore;bundle-version="2.13.0";visibility:=reexport,
- org.eclipse.uml2.types;bundle-version="2.0.0";visibility:=reexport,
- org.eclipse.papyrus.infra.emf;bundle-version="2.2.0",
- org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.widgets;bundle-version="3.0.0",
- org.eclipse.papyrus.infra.properties.ui;bundle-version="2.0.0",
- org.eclipse.ui.console;bundle-version="3.6.200",
- org.eclipse.uml2.uml;bundle-version="5.2.0",
- org.eclipse.papyrus.uml.tools;bundle-version="3.0.0",
- org.eclipse.gmf.runtime.notation;bundle-version="1.8.0",
- org.eclipse.m2m.qvt.oml;bundle-version="3.7.0",
- org.eclipse.papyrus.uml.extensionpoints;bundle-version="1.2.0",
- org.eclipse.papyrus.m2m.qvto;bundle-version="1.4.0",
- org.eclipse.papyrus.uml.modelrepair;bundle-version="2.0.0"
+Require-Bundle: org.eclipse.ui;bundle-version="[3.109.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.12.0,4.0.0)";resolution:=optional;x-installation:=greedy,
+ org.eclipse.emf.ecore;bundle-version="[2.13.0,3.0.0)";visibility:=reexport,
+ org.eclipse.uml2.types;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.emf;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.widgets;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.properties.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.ui.console;bundle-version="[3.6.200,4.0.0)",
+ org.eclipse.uml2.uml;bundle-version="[5.2.0,6.0.0)",
+ org.eclipse.papyrus.uml.tools;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.m2m.qvt.oml;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.papyrus.uml.extensionpoints;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.uml.modelrepair;bundle-version="[2.0.0,3.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.papyrus.interoperability.common,
@@ -34,5 +33,6 @@
  org.eclipse.papyrus.interoperability.common.internal.extension,
  org.eclipse.papyrus.interoperability.common.transformation,
  org.eclipse.papyrus.interoperability.common.transformation.ui,
+ org.eclipse.papyrus.interoperability.common.utils,
  org.eclipse.papyrus.interoperability.common.wizard,
  org.eclipse.papyrus.interoperability.common.wizard.pages
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/libraries/EclipseUI.qvto b/common/plugins/org.eclipse.papyrus.interoperability.common/libraries/EclipseUI.qvto
new file mode 100644
index 0000000..9184710
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/libraries/EclipseUI.qvto
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 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:
+ *  Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+library EclipseUI;
+
+/** The IStatus#INFO code */
+query info() : Integer {
+	return 1
+}
+
+/** The IStatus#WARNING code */
+query warning() : Integer{
+	return 2
+}
+
+/** The IStatus#ERROR code */
+query error() : Integer {
+	return 4
+}
+
+query warning(message: String){
+	log(message, null, warning())
+}
+
+query error(message: String){
+	log(message, null, error())
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml b/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml
index ee24097..8bdde82 100644
--- a/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/plugin.xml
@@ -31,4 +31,47 @@
             isCustomizable="false">
       </context>
    </extension>
+   <extension
+         point="org.eclipse.m2m.qvt.oml.runtime.qvtTransformation">
+      <library
+            file="libraries/EclipseUI.qvto"
+            id="libraries.EclipseUI">
+      </library>
+   </extension>
+   <extension
+         point="org.eclipse.m2m.qvt.oml.javaBlackboxUnits">
+      <unit
+            description="Provides an Eclipse UI/QVTo integration for transformations"
+            name="UI"
+            namespace="org.eclipse.papyrus.interoperability.common.utils">
+         <library
+               class="org.eclipse.papyrus.interoperability.common.utils.TransformationUI">
+            <metamodel
+                  nsURI="http://www.eclipse.org/emf/2002/Ecore">
+            </metamodel>
+         </library>
+      </unit>
+      <unit
+            description="Java helpers to manipulate Notation DataTypes (Gradient, Bendpoints...)"
+            name="NotationTypes"
+            namespace="org.eclipse.papyrus.interoperability.common.utils">
+         <library
+               class="org.eclipse.papyrus.interoperability.common.utils.NotationTypes">
+            <metamodel
+                  nsURI="http://www.eclipse.org/gmf/runtime/1.0.2/notation">
+            </metamodel>
+         </library>
+      </unit>
+      <unit
+            description="Provides access to the incremental trace model for ad hoc trace queries."
+            name="Traces"
+            namespace="org.eclipse.papyrus.interoperability.common.utils">
+         <library
+               class="org.eclipse.papyrus.interoperability.common.utils.TraceHelper">
+            <metamodel
+                  nsURI="http://www.eclipse.org/emf/2002/Ecore">
+            </metamodel>
+         </library>
+      </unit>
+   </extension>
 </plugin>
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java
index 332b6a4..f8578be 100644
--- a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/transformation/AbstractImportTransformation.java
@@ -67,8 +67,8 @@
 import org.eclipse.papyrus.interoperability.common.MigrationParameters.ThreadConfig;
 import org.eclipse.papyrus.interoperability.common.concurrent.ExecutorsPool;
 import org.eclipse.papyrus.interoperability.common.internal.extension.TransformationExtension;
-import org.eclipse.papyrus.m2m.qvto.TraceHelper;
-import org.eclipse.papyrus.m2m.qvto.TransformationUI;
+import org.eclipse.papyrus.interoperability.common.utils.TraceHelper;
+import org.eclipse.papyrus.interoperability.common.utils.TransformationUI;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.statushandlers.StatusManager;
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/NotationTypes.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/NotationTypes.java
new file mode 100644
index 0000000..4ed488f
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/NotationTypes.java
@@ -0,0 +1,95 @@
+/*****************************************************************************
+ * Copyright (c) 2013, 2016 CEA LIST, Christian W. Damus, 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:
+ *  Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *  Christian W. Damus - bug 497841
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.utils;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.gmf.runtime.notation.Anchor;
+import org.eclipse.gmf.runtime.notation.LayoutConstraint;
+import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind;
+
+
+public class NotationTypes {
+
+	private static final double HIMETRIC_UNITS_PER_INCH = 2540.0;
+
+	private static float pseudoHimetricDPI = 72.0f;
+	private static double pseudoHimetricScale = 1.0;
+
+	static {
+		pseudoHimetricScale = pseudoHimetricDPI / HIMETRIC_UNITS_PER_INCH;
+	}
+
+	@Operation(contextual = true, kind = Kind.QUERY)
+	public static int toPixels(LayoutConstraint self, Integer himetric) {
+		return (himetric == null) ? -1 : convertToPixels(himetric);
+	}
+
+	@Operation(contextual = true, kind = Kind.QUERY)
+	public static int toPixels(View self, Integer himetric) {
+		return (himetric == null) ? -1 : convertToPixels(himetric);
+	}
+
+	@Operation(contextual = true, kind = Kind.QUERY)
+	public static int toPixels(Anchor self, Integer himetric) {
+		return (himetric == null) ? -1 : convertToPixels(himetric);
+	}
+
+	@Operation(contextual = true, kind = Kind.HELPER)
+	public static void copyBendpoints(final RelativeBendpoints source, RelativeBendpoints target, boolean convertToPixels) {
+		List<RelativeBendpoint> result = new LinkedList<RelativeBendpoint>();
+
+		for (Object point : source.getPoints()) {
+			if (point instanceof RelativeBendpoint) {
+				RelativeBendpoint pointCopy = new RelativeBendpoint(((RelativeBendpoint) point).convertToString());
+				result.add(pointCopy);
+			}
+		}
+
+		if (convertToPixels) {
+			List<RelativeBendpoint> convertedResult = new LinkedList<RelativeBendpoint>();
+
+			for (RelativeBendpoint point : result) {
+				convertedResult.add(convertToPixels(point));
+			}
+
+			result = convertedResult;
+		}
+
+		target.setPoints(result);
+	}
+
+	private static RelativeBendpoint convertToPixels(RelativeBendpoint bendpoint) {
+		int newSourceX, newSourceY, newTargetX, newTargetY;
+
+		newSourceX = convertToPixels(bendpoint.getSourceX());
+		newSourceY = convertToPixels(bendpoint.getSourceY());
+		newTargetX = convertToPixels(bendpoint.getTargetX());
+		newTargetY = convertToPixels(bendpoint.getTargetY());
+
+		return new RelativeBendpoint(newSourceX, newSourceY, newTargetX, newTargetY);
+	}
+
+	private static int convertToPixels(int source) {
+		// TODO: Fix hard-coded pixel defaults in the QVTos and
+		// elsewhere that assume a 72-DPI display (cf. bug 497841).
+
+		// return MapModeTypes.HIMETRIC_MM.LPtoDP(source);
+		return (int) (source * pseudoHimetricScale);
+	}
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/TraceHelper.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/TraceHelper.java
new file mode 100644
index 0000000..2021057
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/TraceHelper.java
@@ -0,0 +1,161 @@
+/*****************************************************************************
+ * Copyright (c) 2016 Christian W. Damus 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:
+ *   Christian W. Damus - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.interoperability.common.utils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.m2m.internal.qvt.oml.trace.EValue;
+import org.eclipse.m2m.internal.qvt.oml.trace.Trace;
+import org.eclipse.m2m.internal.qvt.oml.trace.TraceRecord;
+import org.eclipse.m2m.internal.qvt.oml.trace.VarParameterValue;
+import org.eclipse.m2m.qvt.oml.ExecutionContext;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind;
+import org.eclipse.m2m.qvt.oml.util.IContext;
+import org.eclipse.m2m.qvt.oml.util.ISessionData;
+
+/**
+ * Query operations that introspect the trace model.
+ */
+@SuppressWarnings("restriction")
+public class TraceHelper {
+	/**
+	 * QVTo {@link ExecutionContext} session data key for the cumulative trace history.
+	 * This is distinct from the session data for incremental update traces because it
+	 * is not used for incremental update, but as a "memory" of trace relationships
+	 * established by past transformations.
+	 */
+	public static ISessionData.SimpleEntry<org.eclipse.m2m.qvt.oml.util.Trace> TRACE_HISTORY = new ISessionData.SimpleEntry<org.eclipse.m2m.qvt.oml.util.Trace>();
+
+	private final Map<String, EClass> eclasses = new HashMap<String, EClass>();
+
+	/**
+	 * Initializes me.
+	 */
+	public TraceHelper() {
+		super();
+	}
+
+	/**
+	 * Gets the source object from which a given {@code self} object traces.
+	 *
+	 * @param context
+	 *            the execution context
+	 * @param self
+	 *            the object for which to trace its original in the source model
+	 * 
+	 * @return
+	 * 		the source object, or {@code null} if not found in the traces
+	 */
+	@Operation(contextual = true, kind = Kind.QUERY, withExecutionContext = true)
+	public Object traceFrom(IContext context, Object self) {
+		return traceFrom(context, self, null);
+	}
+
+	/**
+	 * Gets the source object from which a given {@code self} object traces.
+	 *
+	 * @param context
+	 *            the execution context
+	 * @param self
+	 *            the object for which to trace its original in the source model
+	 * @param type
+	 *            the type of source object to obtain, in case multiple sources
+	 *            map to the same target (may be {@code null} to get any source)
+	 * 
+	 * @return
+	 * 		the source object, or {@code null} if not found in the traces
+	 */
+	@Operation(contextual = true, kind = Kind.QUERY, withExecutionContext = true)
+	public Object traceFrom(IContext context, Object self, String type) {
+		EObject result = null;
+
+		org.eclipse.m2m.qvt.oml.util.Trace history = context.getSessionData().getValue(TRACE_HISTORY);
+		List<EObject> traces = (history != null) ? history.getTraceContent() : Collections.<EObject> emptyList();
+
+		for (EObject next : traces) {
+			if (next instanceof Trace) {
+				Trace trace = (Trace) next;
+				EList<TraceRecord> inverse = trace.getTargetToTraceRecordMap().get(self);
+				if (inverse != null) {
+					for (TraceRecord record : inverse) {
+						VarParameterValue source = record.getContext().getContext();
+						EValue sourceValue = (source == null) ? null : source.getValue();
+						EObject sourceElement = (sourceValue == null) ? null : sourceValue.getModelElement();
+
+						if ((sourceElement != null) && ((type == null) || isA(sourceElement.eClass(), type))) {
+							result = sourceElement;
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return result;
+	}
+
+	private boolean isA(EClass eclass, String type) {
+		boolean result;
+
+		EClass target = eclasses.get(type);
+		if (target != null) {
+			result = target.isSuperTypeOf(eclass);
+		} else {
+			result = __isA(eclass, type);
+		}
+
+		return result;
+	}
+
+	private boolean __isA(EClass eclass, String type) {
+		boolean result;
+
+		String qname = qname(eclass);
+		result = qname.equals(type);
+		if (!result) {
+			for (EClass next : eclass.getESuperTypes()) {
+				result = isA(next, type);
+				if (result) {
+					break;
+				}
+			}
+		}
+
+		return result;
+	}
+
+	private String qname(EClass eclass) {
+		StringBuilder buf = new StringBuilder();
+		buf.append(eclass.getEPackage().getName());
+		buf.append("::"); //$NON-NLS-1$
+		buf.append(eclass.getName());
+
+		for (EPackage nesting = eclass.getEPackage().getESuperPackage(); nesting != null; nesting = nesting.getESuperPackage()) {
+			buf.insert(0, "::"); //$NON-NLS-1$
+			buf.insert(0, nesting.getName());
+		}
+
+		String result = buf.toString();
+		eclasses.put(result, eclass);
+		return result;
+	}
+}
diff --git a/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/TransformationUI.java b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/TransformationUI.java
new file mode 100644
index 0000000..9ae03fe
--- /dev/null
+++ b/common/plugins/org.eclipse.papyrus.interoperability.common/src/org/eclipse/papyrus/interoperability/common/utils/TransformationUI.java
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ * Copyright (c) 2013 CEA LIST.
+ * 
+ * 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:
+ *  Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.interoperability.common.utils;
+
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation;
+import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind;
+import org.eclipse.m2m.qvt.oml.util.IContext;
+
+
+public class TransformationUI {
+
+	public static final String MONITOR = "monitor";
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public void beginTask(IContext context, String name, int totalWork) {
+		getMonitor(context).beginTask(name, totalWork);
+	}
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public void worked(IContext context, int worked) {
+		getMonitor(context).worked(worked);
+	}
+
+	@Operation(withExecutionContext = true, kind = Kind.HELPER)
+	public boolean isCanceled(IContext context) {
+		return getMonitor(context).isCanceled();
+	}
+
+
+
+
+
+	private IProgressMonitor getMonitor(IContext context) {
+		Object monitor = context.getConfigProperty(MONITOR);
+
+		if(monitor instanceof IProgressMonitor) {
+			return (IProgressMonitor)monitor;
+		}
+
+		return new NullProgressMonitor();
+	}
+
+}
diff --git a/common/tests/org.eclipse.papyrus.interoperability.common.tests/META-INF/MANIFEST.MF b/common/tests/org.eclipse.papyrus.interoperability.common.tests/META-INF/MANIFEST.MF
index 7ed3f9b..cdc124e 100644
--- a/common/tests/org.eclipse.papyrus.interoperability.common.tests/META-INF/MANIFEST.MF
+++ b/common/tests/org.eclipse.papyrus.interoperability.common.tests/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@
  org.eclipse.emf.ecore;bundle-version="[2.13.0,3.0.0)",
  org.eclipse.uml2.uml;bundle-version="[5.2.0,6.0.0)",
  org.eclipse.papyrus.junit.utils;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.emf.compare;bundle-version="[3.4.0,4.0.0)"
+ org.eclipse.emf.compare;bundle-version="[3.3.0,4.0.0)"
 Bundle-Activator: org.eclipse.papyrus.interoperability.common.tests.Activator
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.papyrus.interoperability.common.tests,
diff --git a/common/tests/org.eclipse.papyrus.interoperability.common.tests/build.properties b/common/tests/org.eclipse.papyrus.interoperability.common.tests/build.properties
index 27571f5..04fa2df 100644
--- a/common/tests/org.eclipse.papyrus.interoperability.common.tests/build.properties
+++ b/common/tests/org.eclipse.papyrus.interoperability.common.tests/build.properties
@@ -3,6 +3,5 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               OSGI-INF/l10n/bundle.properties,\
-               plugin.xml
+               OSGI-INF/l10n/bundle.properties
 src.includes = about.html
