diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java
index 20beb72..14acf48 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/QVTrCompilerChain.java
@@ -26,7 +26,7 @@
 import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
 import org.eclipse.ocl.pivot.utilities.XMIUtil;
 import org.eclipse.qvtd.compiler.internal.qvtc2qvtu.QVTuConfiguration;
-import org.eclipse.qvtd.compiler.internal.qvtr2qvtc.QVTrToQVTc;
+import org.eclipse.qvtd.compiler.internal.qvtr2qvtc.QVTr2QVTc;
 import org.eclipse.qvtd.compiler.internal.utilities.JavaSourceFileObject;
 import org.eclipse.qvtd.pivot.qvtbase.Transformation;
 import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
@@ -68,7 +68,7 @@
 		String traceNsURI = traceOptions != null ? traceOptions.get(TRACE_NS_URI) : null;
 		Resource cResource = createResource(qvtcURI);
 		Resource traceResource = createResource(PivotUtilInternal.getASURI(traceURI));
-    	QVTrToQVTc t = new QVTrToQVTc(environmentFactory, rResource, cResource);
+    	QVTr2QVTc t = new QVTr2QVTc(environmentFactory, rResource, cResource);
     	if (traceNsURI != null) {
     		t.setTraceNsURI(traceNsURI);
     	}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/AbstractQVTr2QVTcRelations.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/AbstractQVTr2QVTcRelations.java
index 1863490..3a323e7 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/AbstractQVTr2QVTcRelations.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/AbstractQVTr2QVTcRelations.java
@@ -434,7 +434,7 @@
 		}
 
 		protected void addPredicate(@NonNull CorePattern cCorePattern, @NonNull OCLExpression cExpression) {
-			QVTrToQVTc.SYNTHESIS.println("addPredicate " + cExpression);
+			QVTr2QVTc.SYNTHESIS.println("addPredicate " + cExpression);
 			Predicate cPredicate = createPredicate(cExpression);
 			cCorePattern.getPredicate().add(cPredicate);
 		}
@@ -883,7 +883,7 @@
 		}
 	}
 
-	protected @NonNull final QVTrToQVTc qvtr2qvtc;
+	protected @NonNull final QVTr2QVTc qvtr2qvtc;
 	// Relations
 	protected final @NonNull Relation rRelation;								// r: Parent relation of this domain
 	protected final @NonNull RelationalTransformation rTransformation;			// Parent transformation of parent relation of enforced domain
@@ -898,7 +898,7 @@
 	// Core
 	protected final @NonNull Transformation cTransformation;					// mt: The transformation containing the result mapping
 
-	protected AbstractQVTr2QVTcRelations(@NonNull QVTrToQVTc qvtr2qvtc, @NonNull Relation rRelation) {
+	protected AbstractQVTr2QVTcRelations(@NonNull QVTr2QVTc qvtr2qvtc, @NonNull Relation rRelation) {
 		super(qvtr2qvtc.getEnvironmentFactory());
 		this.qvtr2qvtc = qvtr2qvtc;
 		this.rRelation = rRelation;
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/InvokedRelationToMappingForEnforcement.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/InvokedRelationToMappingForEnforcement.java
index a02772a..ec955fa 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/InvokedRelationToMappingForEnforcement.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/InvokedRelationToMappingForEnforcement.java
@@ -126,7 +126,7 @@
 		}
 	}
 	
-	public InvokedRelationToMappingForEnforcement(@NonNull QVTrToQVTc qvtr2qvtc, @NonNull Relation rRelation) {
+	public InvokedRelationToMappingForEnforcement(@NonNull QVTr2QVTc qvtr2qvtc, @NonNull Relation rRelation) {
 		super(qvtr2qvtc, rRelation);
 		assert !rRelation.isIsTopLevel();
 	}
@@ -138,7 +138,7 @@
 	protected @NonNull List<@NonNull InvokedEnforceableRelationDomain2CoreMapping> analyze() throws CompilerChainException {
 		List<@NonNull InvokedEnforceableRelationDomain2CoreMapping> enforceableRelationDomain2coreMappings = new ArrayList<@NonNull InvokedEnforceableRelationDomain2CoreMapping>();
 		for (@NonNull RelationCallExp rInvocation : qvtr2qvtc.getRelationCallExpsForRelation(rRelation)) {
-			QVTrToQVTc.SYNTHESIS.println("invocation of " + rRelation + " from " + rInvocation);
+			QVTr2QVTc.SYNTHESIS.println("invocation of " + rRelation + " from " + rInvocation);
 			@NonNull Relation rInvokingRelation = qvtr2qvtc.getInvokingRelation(rInvocation);
 			@NonNull String rInvokingRelationName = ClassUtil.nonNullState(rInvokingRelation.getName());
 			for (@NonNull Domain rDomain : ClassUtil.nullFree(rRelation.getDomain())) {
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/KeyToFunctionForIdentification.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/KeyToFunctionForIdentification.java
index ce22f67..adefbbd 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/KeyToFunctionForIdentification.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/KeyToFunctionForIdentification.java
@@ -32,10 +32,10 @@
  */
 public class KeyToFunctionForIdentification
 {
-	protected final @NonNull QVTrToQVTc qvtr2qvtc;
+	protected final @NonNull QVTr2QVTc qvtr2qvtc;
 	protected final @NonNull Key rKey;
 	
-	public KeyToFunctionForIdentification(@NonNull QVTrToQVTc qvtr2qvtc, @NonNull Key rKey) {
+	public KeyToFunctionForIdentification(@NonNull QVTr2QVTc qvtr2qvtc, @NonNull Key rKey) {
 		this.qvtr2qvtc = qvtr2qvtc;
 		this.rKey = rKey;
 	}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrToQVTc.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTc.java
similarity index 98%
rename from plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrToQVTc.java
rename to plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTc.java
index 64c840e..13331f8 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrToQVTc.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTr2QVTc.java
@@ -99,29 +99,29 @@
 import org.eclipse.qvtd.pivot.qvtrelation.RelationalTransformation;
 import org.eclipse.qvtd.pivot.qvttemplate.TemplateExp;
 
-public class QVTrToQVTc
+public class QVTr2QVTc
 {
 	public static final @NonNull TracingOption SYNTHESIS = new TracingOption(CompilerConstants.PLUGIN_ID, "qvtr2qvtc/synthesis");
 
 	private class Issues {
 
-		public void addError(QVTrToQVTc qvTrToQVTc, String message,
+		public void addError(QVTr2QVTc qvTrToQVTc, String message,
 				Object object, Object object2, Throwable throwable,
 				List<Object> data) {
 			System.err.println(message);
 		}
 
-		public void addWarning(QVTrToQVTc qvTrToQVTc, String message,
+		public void addWarning(QVTr2QVTc qvTrToQVTc, String message,
 				Object object, Object object2, Throwable throwable,
 				List<Object> data) {
 			System.out.println(message);
 		}
 
-		public void addError(QVTrToQVTc qvTrToQVTc, String string) {
+		public void addError(QVTr2QVTc qvTrToQVTc, String string) {
 			System.err.println(string);
 		}
 
-		public void addWarning(QVTrToQVTc qvTrToQVTc, String string) {
+		public void addWarning(QVTr2QVTc qvTrToQVTc, String string) {
 			System.out.println(string);
 		}
 		
@@ -209,7 +209,7 @@
 	 */
 	private @NonNull Map<@NonNull Relation, @NonNull List<@NonNull Variable>> relation2rootVariables = new HashMap<@NonNull Relation, @NonNull List<@NonNull Variable>>();
 	
-	public QVTrToQVTc(@NonNull EnvironmentFactory environmentFactory, @NonNull Resource qvtrResource, @NonNull Resource qvtcResource) {	
+	public QVTr2QVTc(@NonNull EnvironmentFactory environmentFactory, @NonNull Resource qvtrResource, @NonNull Resource qvtcResource) {	
 		this.environmentFactory = environmentFactory;
 		this.qvtrResource = qvtrResource;		
 		this.qvtcResource = qvtcResource;
@@ -799,7 +799,7 @@
 				for (@NonNull Key rKey : rKeys) {
 					org.eclipse.ocl.pivot.@NonNull Class identifiedClass = ClassUtil.nonNullState(rKey.getIdentifies());
 					if (usedClasses.contains(identifiedClass)) {
-						QVTrToQVTc.SYNTHESIS.println("key " + rKey);
+						QVTr2QVTc.SYNTHESIS.println("key " + rKey);
 						KeyToFunctionForIdentification keyToMapping = new KeyToFunctionForIdentification(this, rKey);
 						Function cKeyFunction = keyToMapping.transform();
 						putKeyFunction(rKey, cKeyFunction);
@@ -811,7 +811,7 @@
 				if (rule instanceof Relation) {
 					Relation rRelation = (Relation)rule;
 					if (rRelation.isIsTopLevel()) {
-						QVTrToQVTc.SYNTHESIS.println("topLevel " + rRelation);
+						QVTr2QVTc.SYNTHESIS.println("topLevel " + rRelation);
 						TopLevelRelationToMappingForEnforcement topLevelRelationToMappingForEnforcement = new TopLevelRelationToMappingForEnforcement(this, rRelation);
 						topLevelRelationToMappingForEnforcement.transform();
 					}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrNameGenerator.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrNameGenerator.java
index 8ae9867..732819c 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrNameGenerator.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/QVTrNameGenerator.java
@@ -25,9 +25,9 @@
 	public static final @NonNull String KEYED_INSTANCE_PROPERTY_NAME = "instance";
 	public static final @NonNull String KEY2INSTANCE_VARIABLE_NAME = "key2instance";
 
-	protected final @NonNull QVTrToQVTc qvtr2qvtc;
+	protected final @NonNull QVTr2QVTc qvtr2qvtc;
 	
-	public QVTrNameGenerator(@NonNull QVTrToQVTc qvtr2qvtc) {
+	public QVTrNameGenerator(@NonNull QVTr2QVTc qvtr2qvtc) {
 		this.qvtr2qvtc = qvtr2qvtc;
 	}
 
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToMappingTransformation.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToMappingTransformation.java
index 94e8972..5d47e0b 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToMappingTransformation.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToMappingTransformation.java
@@ -23,9 +23,9 @@
 
 /*public*/ class RelationalTransformationToMappingTransformation
 {	
-	protected final @NonNull QVTrToQVTc qvtr2qvtc;
+	protected final @NonNull QVTr2QVTc qvtr2qvtc;
 
-	public RelationalTransformationToMappingTransformation(@NonNull QVTrToQVTc qvtr2qvtc) {
+	public RelationalTransformationToMappingTransformation(@NonNull QVTr2QVTc qvtr2qvtc) {
 		this.qvtr2qvtc = qvtr2qvtc;
 	}
 
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToTracePackage.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToTracePackage.java
index cb9c407..23aeb0e 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToTracePackage.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/RelationalTransformationToTracePackage.java
@@ -34,9 +34,9 @@
 
 /*public*/ class RelationalTransformationToTracePackage
 {
-	protected final @NonNull QVTrToQVTc qvtr2qvtc;
+	protected final @NonNull QVTr2QVTc qvtr2qvtc;
 
-	public RelationalTransformationToTracePackage(@NonNull QVTrToQVTc qvtr2qvtc) {
+	public RelationalTransformationToTracePackage(@NonNull QVTr2QVTc qvtr2qvtc) {
 		this.qvtr2qvtc = qvtr2qvtc;
 	}
 
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/TopLevelRelationToMappingForEnforcement.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/TopLevelRelationToMappingForEnforcement.java
index 1855d82..37ed043 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/TopLevelRelationToMappingForEnforcement.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/TopLevelRelationToMappingForEnforcement.java
@@ -113,7 +113,7 @@
 		}
 	}
 	
-	public TopLevelRelationToMappingForEnforcement(@NonNull QVTrToQVTc qvtr2qvtc, @NonNull Relation rRelation) {
+	public TopLevelRelationToMappingForEnforcement(@NonNull QVTr2QVTc qvtr2qvtc, @NonNull Relation rRelation) {
 		super(qvtr2qvtc, rRelation);
 		assert rRelation.isIsTopLevel();
 	}
diff --git a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java
index 785bb38..68cc580 100644
--- a/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java
+++ b/plugins/org.eclipse.qvtd.compiler/src/org/eclipse/qvtd/compiler/internal/qvtr2qvtc/VariablesAnalysis.java
@@ -189,7 +189,7 @@
 			if (!targetProperty.isIsMany() || (cExpression.getType() instanceof CollectionType)) {
 				VariableExp cSlotVariableExp = createVariableExp(cVariable2);
 				NavigationAssignment cAssignment = createNavigationAssignment(cSlotVariableExp, targetProperty, cExpression);
-				QVTrToQVTc.SYNTHESIS.println("addPropertyAssignment " + cAssignment);
+				QVTr2QVTc.SYNTHESIS.println("addPropertyAssignment " + cAssignment);
 				assertNewAssignment(cMiddleBottomPattern.getAssignment(), cAssignment);
 				cMiddleBottomPattern.getAssignment().add(cAssignment);
 				return;
@@ -198,7 +198,7 @@
 			if ((cOppositeProperty != null) && (cExpression instanceof VariableExp) && (!cOppositeProperty.isIsMany() || (cVariable2.getType() instanceof CollectionType))) {
 				VariableExp cSlotVariableExp = (VariableExp)cExpression;
 				NavigationAssignment cAssignment = createNavigationAssignment(cSlotVariableExp, cOppositeProperty, createVariableExp(cVariable2));
-				QVTrToQVTc.SYNTHESIS.println("addOppositePropertyAssignment " + cAssignment);
+				QVTr2QVTc.SYNTHESIS.println("addOppositePropertyAssignment " + cAssignment);
 				assertNewAssignment(cMiddleBottomPattern.getAssignment(), cAssignment);
 				cMiddleBottomPattern.getAssignment().add(cAssignment);
 				return;
@@ -207,7 +207,7 @@
 		}
 
 		protected void addPredicate(@NonNull CorePattern cCorePattern, @NonNull OCLExpression cExpression) {
-			QVTrToQVTc.SYNTHESIS.println("addPredicate " + cExpression);
+			QVTr2QVTc.SYNTHESIS.println("addPredicate " + cExpression);
 			Predicate cPredicate = createPredicate(cExpression);
 			cCorePattern.getPredicate().add(cPredicate);
 		}
@@ -419,7 +419,7 @@
 		}
 	}
 	
-	protected final @NonNull QVTrToQVTc qvtr2qvtc;
+	protected final @NonNull QVTr2QVTc qvtr2qvtc;
 	protected final @NonNull CoreDomain cEnforcedDomain;
 	protected final @NonNull Mapping cMapping;
 	protected final @NonNull Transformation cTransformation;
@@ -437,7 +437,7 @@
 	 */
 	private final @NonNull Map<@NonNull Variable, @NonNull VariableAnalysis> rVariable2analysis = new HashMap<@NonNull Variable, @NonNull VariableAnalysis>();
 	
-	public VariablesAnalysis(@NonNull QVTrToQVTc qvtr2qvtc, @NonNull CoreDomain cEnforcedDomain, @NonNull Type traceClass) {
+	public VariablesAnalysis(@NonNull QVTr2QVTc qvtr2qvtc, @NonNull CoreDomain cEnforcedDomain, @NonNull Type traceClass) {
 		super(qvtr2qvtc.getEnvironmentFactory());
 		this.qvtr2qvtc = qvtr2qvtc;
 		this.cEnforcedDomain = cEnforcedDomain;
@@ -461,7 +461,7 @@
 		assert (!targetProperty.isIsMany() || (cExpression.getType() instanceof CollectionType));
 		VariableExp cSlotVariableExp = createVariableExp(cMiddleRealizedVariable);
 		NavigationAssignment cAssignment = createNavigationAssignment(cSlotVariableExp, targetProperty, cExpression);
-		QVTrToQVTc.SYNTHESIS.println("addPropertyAssignment " + cAssignment);
+		QVTr2QVTc.SYNTHESIS.println("addPropertyAssignment " + cAssignment);
 		assertNewAssignment(cMiddleBottomPattern.getAssignment(), cAssignment);
 		cMiddleBottomPattern.getAssignment().add(cAssignment);
 	}
