diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/CS2ASJavaCompilerImpl.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/CS2ASJavaCompilerImpl.java
index fdf3ac1..9c6831d 100644
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/CS2ASJavaCompilerImpl.java
+++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/CS2ASJavaCompilerImpl.java
@@ -37,9 +37,6 @@
 import org.eclipse.ocl.examples.codegen.java.JavaConstants;
 import org.eclipse.ocl.examples.codegen.java.types.UnboxedDescriptor;
 import org.eclipse.ocl.examples.codegen.utilities.CGModelResourceFactory;
-import org.eclipse.ocl.pivot.OCLExpression;
-import org.eclipse.ocl.pivot.Operation;
-import org.eclipse.ocl.pivot.OperationCallExp;
 import org.eclipse.ocl.pivot.Parameter;
 import org.eclipse.ocl.pivot.ids.ElementId;
 import org.eclipse.ocl.pivot.ids.TypeId;
@@ -62,7 +59,6 @@
 import org.eclipse.qvtd.cs2as.compiler.CS2ASJavaCompiler;
 import org.eclipse.qvtd.cs2as.compiler.CS2ASJavaCompilerParameters;
 import org.eclipse.qvtd.cs2as.compiler.cgmodel.CGLookupCallExp;
-import org.eclipse.qvtd.cs2as.compiler.cgmodel.CS2ASCGFactory;
 import org.eclipse.qvtd.cs2as.compiler.cgmodel.util.CS2ASCGModelVisitor;
 import org.eclipse.qvtd.cs2as.compiler.internal.utilities.CS2ASCGModelResourceFactory;
 import org.eclipse.qvtd.pivot.qvtbase.Transformation;
@@ -315,34 +311,6 @@
 		public CS2ASAS2CGVisitor(@NonNull QVTiAnalyzer analyzer, @NonNull QVTiGlobalContext globalContext) {
 			super(analyzer, globalContext);
 		}
-
-		@Override
-		protected @NonNull CGValuedElement generateOperationCallExp(@Nullable CGValuedElement cgSource, @NonNull OperationCallExp asOperationCallExp) {
-
-			Operation asOperation = asOperationCallExp.getReferredOperation();
-			if (isLookupOp(asOperation)) {
-				CGLookupCallExp cgLookupCallExp = CS2ASCGFactory.eINSTANCE.createCGLookupCallExp();
-				setAst(cgLookupCallExp, asOperationCallExp);
-				cgLookupCallExp.setName(asOperation.getName());
-				cgLookupCallExp.setSource(cgSource);
-				for (OCLExpression arg :  asOperationCallExp.getOwnedArguments()) {
-					CGValuedElement cgArg = doVisit(CGValuedElement.class, arg);
-					cgLookupCallExp.getArguments().add(cgArg);
-				}
-				cgLookupCallExp.setReferredOperation(asOperation);
-				return  cgLookupCallExp;
-			}
-			return super.generateOperationCallExp(cgSource, asOperationCallExp);
-		}
-
-		protected boolean isLookupOp(Operation op) {
-
-//			String opName = op.getName();
-//			if (opName != null && opName.startsWith("_lookup"))	{// FIXME
-//				return false;
-//			}
-			return false;
-		}
 	}
 
 	protected static class CS2ASAnalysisVisitor extends QVTiAnalysisVisitor
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java
index 3a490f5..4e9556e 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/OCL2QVTiTestCases.java
@@ -52,6 +52,7 @@
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
 import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
+import org.eclipse.qvtd.runtime.evaluation.AbstractTransformer;
 import org.eclipse.qvtd.runtime.evaluation.TransformationExecutor;
 import org.eclipse.qvtd.runtime.evaluation.Transformer;
 import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
@@ -63,6 +64,7 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import cg._Source2Target_qvtp_qvtcas.Source2Target_qvtp_qvtcas;
 import example1.source.SourcePackage;
 import example1.target.TargetPackage;
 import example2.classes.ClassesPackage;
@@ -179,7 +181,6 @@
 			return qvtiTransf;
 		}
 
-
 		protected void loadEcoreFile(String ecoreFileName, EPackage ePackage) {
 			URI fileURI = baseURI.appendSegment(ecoreFileName);
 			ResourceSet rSet = getResourceSet();
@@ -280,6 +281,31 @@
 		myQVT.executeModelsTX_CG(txClass, "model3");
 		myQVT.dispose();
 	}
+	@Test
+	public void testExample1_CG2() throws Exception {
+		OCLstdlibPackage.eINSTANCE.getName();
+		AbstractTransformer.EXCEPTIONS.setState(true);
+		AbstractTransformer.INVOCATIONS.setState(true);
+		//		DependencyAnalyzer.CALL.setState(true);
+		//		DependencyAnalyzer.CREATE.setState(true);
+		//		DependencyAnalyzer.FINISH.setState(true);
+		//		DependencyAnalyzer.PENDING.setState(true);
+		//		DependencyAnalyzer.REFINING.setState(true);
+		//		DependencyAnalyzer.RETURN.setState(true);
+		//		DependencyAnalyzer.START.setState(true);
+		MyQVT myQVT = new MyQVT("example1");
+		myQVT.loadGenModels("SourceMM1.genmodel", "TargetMM1.genmodel");
+		//		myQVT.executeNewOCL2QVTi_CompilerChain2("Source2Target.ocl");
+		//		CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl(
+		//			"example1.target.lookup.util.TargetLookupSolver",
+		//			"example1.target.lookup.util.TargetLookupResult",
+		//			TESTS_GEN_PATH, TESTS_PACKAGE_NAME);
+		Class<? extends Transformer> txClass = Source2Target_qvtp_qvtcas.class;
+		myQVT.executeModelsTX_CG(txClass, "model1");
+		//		myQVT.executeModelsTX_CG(txClass, "model2");
+		//		myQVT.executeModelsTX_CG(txClass, "model3");
+		myQVT.dispose();
+	}
 
 	@Test
 	public void testExample1_Interpreted() throws Exception {
