all ok
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaPreVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaPreVisitor.java
index e2c692a..7ec1e1e 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaPreVisitor.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaPreVisitor.java
@@ -92,7 +92,7 @@
 		try {
 			NameResolution nameResolution = getNameManager().declareStandardName(cgFunction);
 			nameResolution.addNameVariant(getCodeGenerator().getCACHED_RESULT_NameVariant());
-			nameResolution.addNameVariant(getCodeGenerator().getSELF_NameVariant());
+			nameResolution.addNameVariant(getCodeGenerator().getTHIS_TRANSFORMER_NameVariant());
 			visitCGOperation(cgFunction);
 			return null;
 		}
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
index d0150b2..429ef82 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCG2JavaVisitor.java
@@ -1176,8 +1176,9 @@
 		return true;
 	}
 
-	protected boolean doFunctionBody(@NonNull CGFunction cgFunction, @NonNull String cachedResultName) {
+	protected boolean doFunctionBody3(@NonNull CGFunction cgFunction) {
 		String functionName = getFunctionName(cgFunction);
+		String cachedResultName = getCachedResultName(cgFunction);
 		CGValuedElement cgBody = cgFunction.getBody();
 		ElementId elementId = cgFunction.getTypeId().getElementId();
 		// FIXME merge locals into AST as LetExps.
@@ -1256,11 +1257,12 @@
 		return true;
 	}
 
-	protected boolean doFunctionBody2(@NonNull CGFunction cgFunction, @NonNull CGShadowExp cgShadowExp, @NonNull String cachedResultName) {
+	protected boolean doFunctionBody2(@NonNull CGFunction cgFunction, @NonNull CGShadowExp cgShadowExp) {
 		Function function = QVTiCGUtil.getAST(cgFunction);
 		ImperativeTransformation transformation = QVTimperativeUtil.getContainingTransformation(function);
 		EntryPointsAnalysis entryPointsAnalysis = context.getEntryPointsAnalysis(transformation);
 		String functionName = getFunctionName(cgFunction);
+		String cachedResultName = getCachedResultName(cgFunction);
 		js.append(" {\n");
 		js.pushIndentation(null);
 		if (isIncremental) {
@@ -1364,9 +1366,10 @@
 		return true;
 	}
 
-	protected void doFunctionConstructor(@NonNull CGFunction cgFunction, @NonNull String cachedResultName) {
+	protected void doFunctionConstructor(@NonNull CGFunction cgFunction) {
 		String functionName = getFunctionName(cgFunction);
-		String selfName = cgFunction.getVariantResolvedName(getCodeGenerator().getSELF_NameVariant());
+		String thisTransformerName = getThisTransformerName(cgFunction);
+		String cachedResultName = getCachedResultName(cgFunction);
 		CGClass cgClass = ClassUtil.nonNullState(CGUtil.getContainingClass(cgFunction));
 		List<@NonNull CGParameter> cgParameters = ClassUtil.nullFree(cgFunction.getParameters());
 		CGValuedElement cgBody = cgFunction.getBody();
@@ -1388,7 +1391,7 @@
 			js.append("\");\n");
 		}
 		js.appendThis(functionName);
-		js.append("." + selfName + " = (");
+		js.append("." + thisTransformerName + " = (");
 		js.appendClassReference(cgClass);
 		js.append(")boundValues[0];\n");
 		int i = 1;
@@ -1408,12 +1411,12 @@
 			js.appendClassCast(cgParameter, castBody);
 			js.append(";\n");
 		}
-		doFunctionBody(cgFunction, cachedResultName);
+		doFunctionBody3(cgFunction);
 		js.popIndentation();
 		js.append("}\n");
 	}
 
-	protected void doFunctionConstructor(@NonNull CGFunction cgFunction, @NonNull CGShadowExp cgShadowExp, @NonNull String cachedResultName) {
+	protected void doFunctionConstructor(@NonNull CGFunction cgFunction, @NonNull CGShadowExp cgShadowExp) {
 		//		List<@NonNull CGParameter> cgParameters = ClassUtil.nullFree(cgFunction.getParameters());
 		//		if (js.isUseNullAnnotations()) {
 		//			js.append("@SuppressWarnings(\"null\")\n");		// Accurate casts are too hard
@@ -1440,7 +1443,7 @@
 			js.append("boundValues[" + i++);
 			js.append("];\n");
 		} */
-		doFunctionBody2(cgFunction, cgShadowExp, cachedResultName);
+		doFunctionBody2(cgFunction, cgShadowExp);
 	}
 
 	protected void doFunctionConstructorConstants(/*@NonNull*/ List<@NonNull CGOperation> cgOperations) {
@@ -1489,7 +1492,8 @@
 		}
 	} */
 
-	protected void doFunctionGetInstance(@NonNull CGFunction cgFunction, @NonNull String cachedResultName) {
+	protected void doFunctionGetInstance(@NonNull CGFunction cgFunction) {
+		String cachedResultName = getCachedResultName(cgFunction);
 		js.append("@Override\n");
 		js.append("public ");
 		js.appendIsRequired(false);
@@ -1504,7 +1508,7 @@
 
 	protected void doFunctionIsEqual(@NonNull CGFunction cgFunction) {
 		String functionName = getFunctionName(cgFunction);
-		String selfName = cgFunction.getVariantResolvedName(getCodeGenerator().getSELF_NameVariant());
+		String thisTransformerName = getThisTransformerName(cgFunction);
 		js.append("@Override\n");
 		js.append("public boolean isEqual(");
 		js.appendClassReference(true, IdResolver.class);
@@ -1516,7 +1520,7 @@
 		js.pushIndentation(null);
 		js.append("return ");
 		js.appendThis(functionName);
-		js.append("." + selfName + " == thoseValues[0]");
+		js.append("." + thisTransformerName + " == thoseValues[0]");
 		int index = 1;
 		for (@NonNull CGParameter cgParameter : ClassUtil.nullFree(cgFunction.getParameters())) {
 			js.append("\n\t&& ");
@@ -2669,6 +2673,10 @@
 		return (QVTiAnalyzer) super.getAnalyzer();
 	}
 
+	protected @NonNull String getCachedResultName(@NonNull CGFunction cgFunction) {
+		return cgFunction.getVariantResolvedName(getCodeGenerator().getCACHED_RESULT_NameVariant());
+	}
+
 	private EObject getContainer(EObject eObject) {
 		EObject eContainer = eObject.eContainer();
 		if (eContainer != null) {
@@ -2706,18 +2714,6 @@
 		return JavaStream.convertToJavaIdentifier("FTOR_" + cgFunction.getName());
 	}
 
-	/*	protected @NonNull String getFunctionInstanceName(@NonNull CGFunction cgFunction) {
-		JavaLocalContext<@NonNull ?> functionContext = ClassUtil.nonNullState(qvtiGlobalContext.getLocalContext(cgFunction));
-		Object instanceKey = cgFunction.getBody();
-		if (instanceKey == null) {
-			instanceKey = QVTiCGUtil.getAST(cgFunction).getImplementationClass();
-		}
-		//	return functionContext.getNameManager().declareStandardName((CGValuedElement) instanceKey, "instance");
-		return cgFunction.getVariantResolvedName(getCodeGenerator().getINSTANCE_NameVariant());
-		//	nameResolution.addNameVariant(getCodeGenerator().getINSTANCE_NameVariant());
-		//	return "XXX=instance";			// XXX
-	} */
-
 	protected @NonNull String getFunctionName(@NonNull CGFunction cgFunction) {
 		return JavaStream.convertToJavaIdentifier("FUN_" + cgFunction.getName());
 	}
@@ -2807,7 +2803,7 @@
 		return super.getResolvedName(cgElement);
 	}
 
-	@Deprecated
+	/*	@Deprecated
 	protected @NonNull String getThisName(@NonNull CGElement cgElement) {
 		for (EObject eObject = cgElement; eObject != null; eObject = eObject.eContainer()) {
 			if (eObject instanceof CGMapping) {
@@ -2821,7 +2817,11 @@
 			}
 		}
 		assert false;
-		return "";		// "this" */
+		return "";		// "this" * /
+	} */
+
+	protected @NonNull String getThisTransformerName(@NonNull CGFunction cgFunction) {
+		return cgFunction.getVariantResolvedName(getCodeGenerator().getTHIS_TRANSFORMER_NameVariant());
 	}
 
 	private boolean isConnection(CGValuedElement source) {
@@ -3086,7 +3086,7 @@
 				js.appendCommentWithOCL(null, cgFunction.getAst());
 				CGShadowExp cgShadowExp = useClassToCreateObject(cgFunction);
 				String functionName = getFunctionName(cgFunction);
-				String cachedResultName = cgFunction.getVariantResolvedName(getCodeGenerator().getCACHED_RESULT_NameVariant());
+				String cachedResultName = getCachedResultName(cgFunction);
 				if (cgShadowExp != null) {
 					js.append("protected class ");
 					js.append(functionName);
@@ -3097,15 +3097,15 @@
 					js.appendTypeDeclaration(cgFunction);
 					js.append(" " + cachedResultName + ";\n");
 					js.append("\n");
-					doFunctionConstructor(cgFunction, cgShadowExp, cachedResultName);
+					doFunctionConstructor(cgFunction, cgShadowExp);
 					js.append("\n");
-					doFunctionGetInstance(cgFunction, cachedResultName);
+					doFunctionGetInstance(cgFunction);
 					js.append("\n");
 					doFunctionIsEqual(cgShadowExp, cachedResultName);
 					js.popClassBody(false);
 				}
 				else if (useCache(cgFunction)) {
-					String selfName = cgFunction.getVariantResolvedName(getCodeGenerator().getSELF_NameVariant());
+					String thisTransformerName = getThisTransformerName(cgFunction);
 					CGClass cgClass = ClassUtil.nonNullState(CGUtil.getContainingClass(cgFunction));
 					js.append("protected class ");
 					js.append(functionName);
@@ -3116,7 +3116,7 @@
 					js.appendIsRequired(true);
 					js.append(" ");
 					js.appendClassReference(cgClass);
-					js.append(" " + selfName + ";\n");
+					js.append(" " + thisTransformerName + ";\n");
 					for (@NonNull CGParameter cgParameter : ClassUtil.nullFree(cgFunction.getParameters())) {
 						js.append("protected ");
 						//						js.appendDeclaration(cgParameter);
@@ -3138,9 +3138,9 @@
 					js.appendTypeDeclaration(cgBody != null ? cgBody : cgFunction);
 					js.append(" " + cachedResultName + ";\n");
 					js.append("\n");
-					doFunctionConstructor(cgFunction, cachedResultName);
+					doFunctionConstructor(cgFunction);
 					js.append("\n");
-					doFunctionGetInstance(cgFunction, cachedResultName);
+					doFunctionGetInstance(cgFunction);
 					js.append("\n");
 					doFunctionIsEqual(cgFunction);
 					js.popClassBody(false);
@@ -3235,7 +3235,7 @@
 		js.append(")");
 		if (isIdentifiedInstance) {
 			js.append(")");
-			String cachedResultName = cgFunction.getVariantResolvedName(getCodeGenerator().getCACHED_RESULT_NameVariant());
+			String cachedResultName = getCachedResultName(cgFunction);
 			js.append(".");
 			js.append(cachedResultName);
 		}
diff --git a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCodeGenerator.java b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCodeGenerator.java
index 1635013..1bad097 100644
--- a/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCodeGenerator.java
+++ b/plugins/org.eclipse.qvtd.codegen/src/org/eclipse/qvtd/codegen/qvti/java/QVTiCodeGenerator.java
@@ -208,7 +208,7 @@
 	private/* @LazyNonNull*/ CGPackage cgPackage;
 	private/* @LazyNonNull*/ String javaSourceCode = null;
 	protected final @NonNull NameVariant CACHED_RESULT_NameVariant;
-	protected final @NonNull NameVariant SELF_NameVariant;
+	protected final @NonNull NameVariant THIS_TRANSFORMER_NameVariant;
 
 	public QVTiCodeGenerator(@NonNull QVTbaseEnvironmentFactory environmentFactory, @NonNull ImperativeTransformation transformation) {
 		super(environmentFactory, null);			// FIXME Pass a genmodel
@@ -217,7 +217,7 @@
 		this.cgAnalyzer = new QVTiAnalyzer(this);
 		this.globalContext = new QVTiGlobalContext(this);
 		this.CACHED_RESULT_NameVariant = globalNameManager.addNameVariantPreferred("cachedResult");
-		this.SELF_NameVariant = globalNameManager.addNameVariantPreferred("thisTransformer");
+		this.THIS_TRANSFORMER_NameVariant = globalNameManager.addNameVariantPreferred("thisTransformer");
 	}
 
 	private void appendSegmentName(@NonNull StringBuilder s, CGPackage sPackage) {
@@ -408,8 +408,8 @@
 		return s.toString();
 	}
 
-	public @NonNull NameVariant getSELF_NameVariant() {
-		return SELF_NameVariant;
+	public @NonNull NameVariant getTHIS_TRANSFORMER_NameVariant() {
+		return THIS_TRANSFORMER_NameVariant;
 	}
 
 	public @NonNull ImperativeTransformation getTransformation() {