diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java
index 25345ff..b3b44e0 100644
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java
+++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiBroker.java
@@ -183,7 +183,7 @@
 		PivotModel oclModel = createOCLModel(oclDocURI);
 		pModel= createQVTpModel(qvtiFileURI);
 		
-		OCL2QVTp ocl2qvtp = new OCL2QVTp(environmentFactory, traceabilityPropName, savingOptions);
+		OCL2QVTp ocl2qvtp = new OCL2QVTp(environmentFactory, traceabilityPropName);
 		Resource resource = ocl2qvtp.run(oclModel.getResource().getResourceSet() , oclDocURI); // NB. cModel is the .ocl doc
 		
 		pModel.getResource().getContents().addAll(resource.getContents());
diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiCompilerChain.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiCompilerChain.java
index db74445..ab1218f 100644
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiCompilerChain.java
+++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTiCompilerChain.java
@@ -12,6 +12,7 @@
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.ocl.pivot.Element;
 import org.eclipse.qvtd.compiler.AbstractCompilerChain;
+import org.eclipse.qvtd.compiler.CompilerChain;
 import org.eclipse.qvtd.pivot.qvtbase.Transformation;
 import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
 import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
@@ -19,27 +20,34 @@
 public class OCL2QVTiCompilerChain extends AbstractCompilerChain {
 
 	public @NonNull static final String DEFAULT_TRACE_PROPERTY_NAME = "ast"; 
-	public @NonNull static final String OCL2QVTP_STEP = "ocl2qvtp";  
-	public @NonNull static final Key<String> TRACE_PROPERTY_NAME = new Key<String>("ocl2qvtp.tracePropName");
+	public @NonNull static final Key<String> TRACE_PROPERTY_NAME_KEY = new Key<String>("ocl2qvtp.tracePropName");
 
 	private @NonNull URI oclASUri;
 	private @NonNull List<URI> extendedASUris = new ArrayList<URI>();	
 	private @Nullable String traceabilityPropName;
 	
+	/**
+	 * To provide a different traceabilityPropName different to the default {@link OCL2QVTiCompilerChain#DEFAULT_TRACE_PROPERTY_NAME "ast"} one,
+	 * it must be passed as an option using the {@link #TRACE_PROPERTY_NAME_KEY TRACE_PROPERTY_NAME_KEY} and the {@link CompilerChain#QVTP_STEP QVTP_STEP}
+	 * 
+	 * @param qvti mandatory {@link QVTimperative} instance
+	 * @param options optional options
+	 * @param oclDocURI the mandatory main OCL document URI to compile
+	 * @param extendedDocURIs optional OCL document URIs that the main one extends
+	 */
 	public OCL2QVTiCompilerChain(@NonNull QVTimperative qvti, @Nullable Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> options,			
-			@NonNull URI oclDocURI, @NonNull URI... extendDocURIs) { 
+			@NonNull URI oclDocURI, URI... extendedDocURIs) { 
 		super(qvti.getEnvironmentFactory(), oclDocURI, options);
 		this.traceabilityPropName = getTraceabilityPropertyName();
 		this.oclASUri = qvti.parse(oclDocURI).getURI();
-		for (URI oclDocUri : extendDocURIs) {
+		for (URI oclDocUri : extendedDocURIs) {
 			this.extendedASUris.add(qvti.parse(oclDocUri).getURI()); // We add the AS URI
 		}
 	}
 
 	@Override
 	public @NonNull Transformation compile(@NonNull String enforcedOutputName) throws IOException {
-		Resource qvtpResource = ocl2qvtp();
-		return qvtp2qvti(qvtpResource);
+		return qvtp2qvti(ocl2qvtp());
 	}
 	
 	public @NonNull Transformation compile() throws IOException {
@@ -54,28 +62,23 @@
 				qvtpModels.add(ocl2qvtp(extendedQVTpModel));
 			}
 			QVTpModelsMerger.merge(environmentFactory , pModel, qvtpModels);
-			options.get(OCL2QVTP_STEP);
-			pModel.save(getOption(OCL2QVTP_STEP, SAVE_OPTIONS_KEY));
+			saveResource(pModel, QVTP_STEP);
 			for(Resource qvtpModel : qvtpModels) {	// unload unnecessary qvtpModels
 				qvtpModel.unload();
 			}
 		}
-		assertNoResourceErrors("pModel", pModel);
 		return pModel;
 	}
 	
-	protected Resource ocl2qvtp(URI oclURI) {
-		OCL2QVTp ocl2qvtp = new OCL2QVTp(environmentFactory, traceabilityPropName, getOption(OCL2QVTP_STEP, SAVE_OPTIONS_KEY));
-		return ocl2qvtp.run(environmentFactory.getMetamodelManager().getASResourceSet(),
-				oclURI); 
-	}
-	
-	private @Nullable Map<?, ?> getSavingOptions() {
-		return getOption(OCL2QVTP_STEP, SAVE_OPTIONS_KEY);
+	protected Resource ocl2qvtp(URI oclURI) throws IOException {
+		OCL2QVTp ocl2qvtp = new OCL2QVTp(environmentFactory, traceabilityPropName);
+		Resource pResource = ocl2qvtp.run(environmentFactory.getMetamodelManager().getASResourceSet(), oclURI);
+		saveResource(pResource, QVTP_STEP);
+		return pResource;
 	}
 	
 	private @NonNull String getTraceabilityPropertyName() {
-		String tracePropName = getOption(OCL2QVTP_STEP, TRACE_PROPERTY_NAME);
+		String tracePropName = getOption(QVTP_STEP, TRACE_PROPERTY_NAME_KEY);
 		return tracePropName == null ? DEFAULT_TRACE_PROPERTY_NAME : tracePropName;
 	}
 	@Override
diff --git a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java
index f51277f..0904c55 100644
--- a/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java
+++ b/plugins/org.eclipse.qvtd.cs2as.compiler/src/org/eclipse/qvtd/cs2as/compiler/internal/OCL2QVTp.java
@@ -9,7 +9,6 @@
 import static org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTpUtil.getSuperClasses;
 import static org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTpUtil.getUpdateMappingName;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -21,7 +20,6 @@
 import java.util.stream.Collectors;
 
 import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -62,22 +60,17 @@
 
 public class OCL2QVTp {
 
-	private Logger logger = Logger.getLogger(getClass().getName());
+	private @NonNull Logger logger = Logger.getLogger(getClass().getName());
 	private @NonNull EnvironmentFactory envFact;
 	private @NonNull String traceabilityPropName;
 	private @Nullable Map<?,?> saveOptions;
 	
-	public static final String RIGHT_MODEL_TYPE_NAME = "rightAS";
-	public static final String LEFT_MODEL_TYPE_NAME = "leftCS";
+	public static final @NonNull String RIGHT_MODEL_TYPE_NAME = "rightAS";
+	public static final @NonNull String LEFT_MODEL_TYPE_NAME = "leftCS";
 	
 	public OCL2QVTp(@NonNull EnvironmentFactory envFact, @NonNull String traceabilityPropName) {
-		this(envFact, traceabilityPropName, null);
-	}
-	
-	public OCL2QVTp(@NonNull EnvironmentFactory envFact, @NonNull String traceabilityPropName, @Nullable Map<?, ?> saveOptions) {
 		this.envFact = envFact;
 		this.traceabilityPropName = traceabilityPropName;
-		this.saveOptions = saveOptions;
 	}
 	
 	public Resource run(ResourceSet resourceSet, URI oclDocURI) {
@@ -95,12 +88,8 @@
 			URI outputURI = oclDocURI.trimFileExtension().trimFileExtension().appendFileExtension("qvtp.qvtcas");
 			Resource outputResource = resourceSet.createResource(outputURI);
 			outputResource.getContents().add(outputModel);
-			try {
-				outputResource.save(saveOptions);
-				return outputResource;
-			} catch (IOException e) {
-				throw new WrappedException(e);
-			}
+			return outputResource;
+		
 		} else {
 			throw new IllegalArgumentException(oclDocURI.toString() + " doesn't contain an OCL Model");
 		}
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 d49b152..74d7ebc 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
@@ -38,9 +38,6 @@
 import org.eclipse.ocl.pivot.evaluation.tx.Transformer;
 import org.eclipse.ocl.pivot.internal.manager.MetamodelManagerInternal;
 import org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap;
-import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal;
-import org.eclipse.ocl.pivot.internal.utilities.OCLInternal;
-import org.eclipse.ocl.pivot.internal.validation.PivotEObjectValidator;
 import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibPackage;
 import org.eclipse.ocl.pivot.resource.ASResource;
 import org.eclipse.ocl.pivot.resource.CSResource;
@@ -48,7 +45,6 @@
 import org.eclipse.ocl.pivot.utilities.OCL;
 import org.eclipse.ocl.pivot.utilities.PivotConstants;
 import org.eclipse.ocl.xtext.completeocl.CompleteOCLStandaloneSetup;
-import org.eclipse.ocl.xtext.completeocl.validation.CompleteOCLEObjectValidator;
 import org.eclipse.qvtd.compiler.CompilerChain.Key;
 import org.eclipse.qvtd.compiler.internal.etl.EtlTask;
 import org.eclipse.qvtd.compiler.internal.etl.MtcBroker;
@@ -58,13 +54,11 @@
 import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerImpl;
 import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerParametersImpl;
 import org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTiCompilerChain;
-import org.eclipse.qvtd.pivot.qvtbase.QVTbasePackage;
+import org.eclipse.qvtd.cs2as.compiler.internal.OCL2QVTp;
 import org.eclipse.qvtd.pivot.qvtbase.Transformation;
 import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
 import org.eclipse.qvtd.pivot.qvtcore.QVTcorePivotStandaloneSetup;
-import org.eclipse.qvtd.pivot.qvtcorebase.QVTcoreBasePackage;
 import org.eclipse.qvtd.pivot.qvtimperative.ImperativeModel;
-import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativePackage;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiIncrementalExecutor;
@@ -96,7 +90,6 @@
 	private static final boolean CREATE_GRAPHML = false; // Note. You need Epsilon with Bug 458724 fix to have output graphml models serialised
 	private static final @NonNull String TESTS_GEN_PATH = "../org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/";
 	private static final @NonNull String TESTS_PACKAGE_NAME = "cg";
-	private static final @NonNull String NEW_TESTS_PACKAGE_NAME = "new_cg";
 	private static final @NonNull String DEBUG_SEGMENT = "debug";
 	private static @NonNull URI TESTS_BASE_URI = URI.createPlatformResourceURI("org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models", true);
 	
@@ -140,7 +133,7 @@
 
 	    	ResourceSet rSet = getResourceSet();
 			Resource inputResource = rSet.getResource(csModelURI, true);
-			tx.addRootObjects("leftCS", ClassUtil.nonNullState(inputResource.getContents()));
+			tx.addRootObjects(OCL2QVTp.LEFT_MODEL_TYPE_NAME, ClassUtil.nonNullState(inputResource.getContents()));
 			assertTrue(tx.run());
 			Resource outputResource = rSet.createResource(asModelURI);
 			outputResource.getContents().addAll(tx.getRootObjects("rightAS"));
@@ -166,8 +159,8 @@
 
 			BasicQVTiExecutor testEvaluator = new QVTiIncrementalExecutor(getEnvironmentFactory(), tx, QVTiIncrementalExecutor.Mode.LAZY);
 			//testEvaluator.saveTransformation(null);
-		    testEvaluator.loadModel("leftCS", csModelURI);
-		    testEvaluator.createModel("rightAS", asModelURI, null);
+		    testEvaluator.loadModel(OCL2QVTp.LEFT_MODEL_TYPE_NAME, csModelURI);
+		    testEvaluator.createModel(OCL2QVTp.RIGHT_MODEL_TYPE_NAME, asModelURI, null);
 		    boolean success = testEvaluator.execute();
 		    testEvaluator.saveModels(TestsXMLUtil.defaultSavingOptions);
 		    testEvaluator.dispose();
@@ -185,7 +178,7 @@
 			for (int i=0; i < extendedOclDocs.length; i++) {
 				oclDocURIs[i] = baseURI.appendSegment(extendedOclDocs[i]);
 			}
-			OCL2QVTiCompilerChain compiler = new OCL2QVTiCompilerChain(this, createOcl2QVTpCompilerOptions(), mainOclDocURI, oclDocURIs);
+			OCL2QVTiCompilerChain compiler = new OCL2QVTiCompilerChain(this, createTestCasesCompilerOptions(), mainOclDocURI, oclDocURIs);
 			Transformation qvtiTransf = compiler.compile();
 			URI txURI = qvtiTransf.eResource().getURI();
 			if (txURI != null) {
@@ -196,14 +189,7 @@
 	    	return qvtiTransf;
 		}
 		
-		protected @NonNull Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> createOcl2QVTpCompilerOptions() {
-			Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> options = new HashMap<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>>();
-			Map<@NonNull Key<?>, @Nullable Object> ocl2qvtpOptions = new HashMap<@NonNull Key<?>, @Nullable Object>();
-			ocl2qvtpOptions.put(OCL2QVTiCompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions);
-			options.put(OCL2QVTiCompilerChain.OCL2QVTP_STEP, ocl2qvtpOptions);
-			return options;
-		}
-		
+
 		protected void loadEcoreFile(String ecoreFileName, EPackage ePackage) {
 			URI fileURI = baseURI.appendSegment(ecoreFileName);
 			ResourceSet rSet = getResourceSet();
@@ -249,12 +235,12 @@
 	private static class OCL2QVTiCompilerTester extends OCL2QVTiCompilerChain {
 
 		public OCL2QVTiCompilerTester(@NonNull URI baseURI, @NonNull String oclDocName, @NonNull QVTimperative metaModelManager) {
-			super(metaModelManager, null, baseURI.appendSegment(oclDocName));
+			super(metaModelManager, createTestCasesCompilerOptions(), baseURI.appendSegment(oclDocName));
 		}
 	
 		// For testing purpose
 		@Override
-		protected Resource ocl2qvtp(URI oclDocURI) {
+		protected Resource ocl2qvtp(URI oclDocURI) throws IOException {
 			return super.ocl2qvtp(oclDocURI);
 		}
 	}
@@ -281,7 +267,7 @@
 		CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl(
 				"example1.target.lookup.util.TargetLookupSolver",
 				"example1.target.lookup.util.TargetLookupResult",
-				TESTS_GEN_PATH, NEW_TESTS_PACKAGE_NAME);
+				TESTS_GEN_PATH, TESTS_PACKAGE_NAME);
 		Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams);
 		myQVT.executeModelsTX_CG(txClass, "model1");
 		myQVT.executeModelsTX_CG(txClass, "model2");
@@ -340,7 +326,7 @@
 		CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl(
 				"example2.classes.lookup.util.ClassesLookupSolver",
 				"example2.classes.lookup.util.ClassesLookupResult",
-				TESTS_GEN_PATH, NEW_TESTS_PACKAGE_NAME);
+				TESTS_GEN_PATH, TESTS_PACKAGE_NAME);
 		Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams);
 		myQVT.executeModelsTX_CG(txClass, "model1");
 		myQVT.executeModelsTX_CG(txClass, "model2");
@@ -398,7 +384,7 @@
 		CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl(
 				"example2.classes.lookup.util.ClassesLookupSolver",
 				"example2.classes.lookup.util.ClassesLookupResult",
-				TESTS_GEN_PATH, NEW_TESTS_PACKAGE_NAME);
+				TESTS_GEN_PATH, TESTS_PACKAGE_NAME);
 		Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams);
 		
 		myQVT.dispose();
@@ -506,7 +492,7 @@
 		myQVT.loadGenModels("SimplerKiamaAS.genmodel", "SimplerKiamaCS.genmodel");
 		Transformation qvtiTransf = myQVT.executeNewOCL2QVTi_CompilerChain("SimplerKiama.ocl");
 		CS2ASJavaCompilerParameters cgParams = new CS2ASJavaCompilerParametersImpl("","",
-				TESTS_GEN_PATH, NEW_TESTS_PACKAGE_NAME);
+				TESTS_GEN_PATH, TESTS_PACKAGE_NAME);
 		Class<? extends Transformer> txClass = new CS2ASJavaCompilerImpl().compileTransformation(myQVT, qvtiTransf, cgParams);
 //		myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
 // FIXME BUG 484278 model0 has an invalid model TopCS.node[1] has a null value.
@@ -609,20 +595,7 @@
 
 	protected static void assertValidQVTiModel(@NonNull URI asURI) {
 	    
-		OCLInternal ocl =  OCLInternal.newInstance();
-		EnvironmentFactoryInternal factory = ocl.getEnvironmentFactory();
-		factory.configureLoadFirstStrategy();
-		ResourceSet asResourceSet = ocl.getMetamodelManager().getASResourceSet();
-
-		URI oclURI = ClassUtil.nonNullState(URI.createPlatformResourceURI("/org.eclipse.qvtd.pivot.qvtimperative/model/QVTimperative.ocl", true));
-
-		CompleteOCLEObjectValidator validator = new CompleteOCLEObjectValidator(ClassUtil.nonNullState(QVTcoreBasePackage.eINSTANCE), oclURI, factory);
-		validator.initialize();
-		PivotEObjectValidator.install(asResourceSet, factory);
-		PivotEObjectValidator.install(ClassUtil.nonNullState(QVTbasePackage.eINSTANCE), null);
-		PivotEObjectValidator.install(ClassUtil.nonNullState(QVTcoreBasePackage.eINSTANCE), null);
-		PivotEObjectValidator.install(ClassUtil.nonNullState(QVTimperativePackage.eINSTANCE), null);
-		assertValidModel(asURI, asResourceSet);
+		// We don't generate QVTi models anymore. Perhaps do a QVTc validation if there is a QVTcore.ocl file
 	}
 
 	protected @NonNull Transformation getTransformation(ResourceSet rSet, URI qvtiURI) {
@@ -743,4 +716,13 @@
 		return (ASResource) asResource;
 	}
 
+	private static @NonNull Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> createTestCasesCompilerOptions() {
+		Map<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>> options = new HashMap<@NonNull String, @NonNull Map<@NonNull Key<?>, @Nullable Object>>();
+		Map<@NonNull Key<?>, @Nullable Object> defStepOptions = new HashMap<@NonNull Key<?>, @Nullable Object>();
+		defStepOptions.put(OCL2QVTiCompilerChain.SAVE_OPTIONS_KEY, TestsXMLUtil.defaultSavingOptions);
+		// TODO problem hen validating  defStepOptions.put(OCL2QVTiCompilerChain.VALIDATE_KEY, true);
+		options.put(OCL2QVTiCompilerChain.DEFAULT_STEP, defStepOptions);
+		return options;
+	}
+	
 }
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/.gitignore
index ed2bb3f..65aac1a 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/.gitignore
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example1/.gitignore
@@ -9,3 +9,5 @@
 /Source2TargetDependencyGraph.xmi
 /SourceMM1ContainmentTree.xmi
 /TargetMM1ContainmentTree.xmi
+/Source2Target.qvtp.qvtcas
+/Source2Target.qvts.xmi
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example2/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example2/.gitignore
index 240da03..993050a 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example2/.gitignore
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example2/.gitignore
@@ -11,3 +11,7 @@
 /classescs2asV2Schedule.xmi
 /classescs2asV2.qvtias
 /classescs2asV2.qvtp.qvtias
+/classescs2as.qvtp.qvtcas
+/classescs2as.qvts.xmi
+/classescs2asV2.qvtp.qvtcas
+/classescs2asV2.qvts.xmi
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example4/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example4/.gitignore
index 6a5858f..1715b53 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example4/.gitignore
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example4/.gitignore
@@ -6,3 +6,5 @@
 /SimplerKiama.serialized.qvti
 /*ContainmentTree.xmi
 /SimplerKiamaSchedule.xmi
+/SimplerKiama.qvtp.qvtcas
+/SimplerKiama.qvts.xmi
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example5/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example5/.gitignore
index f9ed4db..e9f9c2b 100644
--- a/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example5/.gitignore
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/src/org/eclipse/qvtd/cs2as/compiler/tests/models/example5/.gitignore
@@ -15,3 +15,7 @@
 /TargetDerivedMMContainmentTree.xmi
 /*.dot
 /*.graphml
+/Source2TargetBase.qvtp.qvtcas
+/Source2TargetBase.qvts.xmi
+/Source2TargetDerived.qvtp.qvtcas
+/Source2TargetDerived.qvts.xmi
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_SimplerKiama_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_SimplerKiama_qvtp_qvtcas/.gitignore
new file mode 100644
index 0000000..5cd66bd
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_SimplerKiama_qvtp_qvtcas/.gitignore
@@ -0,0 +1 @@
+/SimplerKiama_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetBase_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetBase_qvtp_qvtcas/.gitignore
new file mode 100644
index 0000000..00e1711
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetBase_qvtp_qvtcas/.gitignore
@@ -0,0 +1 @@
+/Source2TargetBase_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetDerived_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetDerived_qvtp_qvtcas/.gitignore
new file mode 100644
index 0000000..5760bad
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2TargetDerived_qvtp_qvtcas/.gitignore
@@ -0,0 +1 @@
+/Source2TargetDerived_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2Target_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2Target_qvtp_qvtcas/.gitignore
new file mode 100644
index 0000000..79082dd
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_Source2Target_qvtp_qvtcas/.gitignore
@@ -0,0 +1 @@
+/Source2Target_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2asV2_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2asV2_qvtp_qvtcas/.gitignore
new file mode 100644
index 0000000..8460b46
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2asV2_qvtp_qvtcas/.gitignore
@@ -0,0 +1 @@
+/classescs2asV2_qvtp_qvtcas.java
diff --git a/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/.gitignore b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/.gitignore
new file mode 100644
index 0000000..97be367
--- /dev/null
+++ b/tests/org.eclipse.qvtd.cs2as.compiler.tests/tests-gen/cg/_classescs2as_qvtp_qvtcas/.gitignore
@@ -0,0 +1 @@
+/classescs2as_qvtp_qvtcas.java
