diff --git a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTcompiledJob.java b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTcompiledJob.java
index 5be0459..98ba49a 100644
--- a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTcompiledJob.java
+++ b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTcompiledJob.java
@@ -30,6 +30,7 @@
 import org.eclipse.ocl.pivot.resource.BasicProjectManager;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.ocl.pivot.utilities.PivotUtil;
+import org.eclipse.ocl.pivot.utilities.ThreadLocalExecutor;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor;
 import org.eclipse.qvtd.runtime.evaluation.ModelsManager;
@@ -59,6 +60,7 @@
 		int SAVING_TICKS = outMap.size();
 		int allTicks = LOAD_TX_TICKS + USED_PACKAGES_TICKS + CHECKING_TICKS + EXECUTING_TICKS + SAVING_TICKS + inMap.size() + 2 * outMap.size();
 		SubMonitor subMonitor = SubMonitor.convert(monitor, allTicks);
+		ThreadLocalExecutor.reset();
 		try {
 			QVTiEnvironmentFactory environmentFactory = new QVTiEnvironmentFactory(BasicProjectManager.CLASS_PATH, null);
 			if (traceEvaluation) {
@@ -179,6 +181,7 @@
 		}
 		finally {
 			monitor.done();
+			ThreadLocalExecutor.reset();
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTinterpretedJob.java b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTinterpretedJob.java
index d7ecb17..c4fb7a8 100644
--- a/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTinterpretedJob.java
+++ b/plugins/org.eclipse.qvtd.debug/src/org/eclipse/qvtd/debug/launching/QVTinterpretedJob.java
@@ -29,6 +29,7 @@
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.pivot.resource.BasicProjectManager;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.utilities.ThreadLocalExecutor;
 import org.eclipse.qvtd.pivot.qvtbase.TypedModel;
 import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
@@ -56,6 +57,7 @@
 		int SAVING_TICKS = outMap.size();
 		int allTicks = LOAD_TX_TICKS + USED_PACKAGES_TICKS + CHECKING_TICKS + EXECUTING_TICKS + SAVING_TICKS + inMap.size() + outMap.size();
 		SubMonitor subMonitor = SubMonitor.convert(monitor, allTicks);
+		ThreadLocalExecutor.reset();
 		try {
 			QVTiEnvironmentFactory environmentFactory = new QVTiEnvironmentFactory(BasicProjectManager.CLASS_PATH, null);
 			if (traceEvaluation) {
@@ -152,6 +154,7 @@
 		}
 		finally {
 			monitor.done();
+			ThreadLocalExecutor.reset();
 		}
 	}
 }
\ No newline at end of file
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 658d655..9b326b7 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
@@ -367,8 +367,7 @@
 			myQVT.dispose();
 			cleanup("http://cs2as/tests/example2/env/1.0",
 				example2.classescs.ClassescsPackage.eNS_URI,
-				example2.classes.ClassesPackage.eNS_URI,
-				example2.classescstraces.ClassescstracesPackage.eNS_URI);
+				example2.classes.ClassesPackage.eNS_URI);
 		}
 	}
 
diff --git a/tests/org.eclipse.qvtd.umlx.tests/src/org/eclipse/qvtd/umlx/tests/UMLXSerializeTests.java b/tests/org.eclipse.qvtd.umlx.tests/src/org/eclipse/qvtd/umlx/tests/UMLXSerializeTests.java
index 9c30059..fedf854 100644
--- a/tests/org.eclipse.qvtd.umlx.tests/src/org/eclipse/qvtd/umlx/tests/UMLXSerializeTests.java
+++ b/tests/org.eclipse.qvtd.umlx.tests/src/org/eclipse/qvtd/umlx/tests/UMLXSerializeTests.java
@@ -111,6 +111,7 @@
 		umlxResource1.save(null);
 		//
 		assertNoValidationErrors(umlxURI.toString(), umlxResource1);
+		ocl1.deactivate();
 		//
 		QVTrelation ocl2 = QVTrelation.newInstance(getTestProjectManager());
 		Resource umlxResource2 = ocl2.getResourceSet().getResource(umlxURI, true);
diff --git a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java
index 6213c8a..063ec1c 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/AbstractTestQVT.java
@@ -283,6 +283,7 @@
 	}
 
 	public @NonNull Resource checkOutput(@NonNull URI actualURI, @Nullable URI expectedURI, @Nullable ModelNormalizer normalizer) throws IOException, InterruptedException {
+		deactivate();
 		ResourceSet actualResourceSet = createTestResourceSet();
 		//		if (PivotUtilInternal.isASURI(modelURI)) {
 		//			resourceSet = environmentFactory.getMetamodelManager().getASResourceSet();	// Need PivotSave to allocate xmi:ids
@@ -310,6 +311,7 @@
 			}
 			checkOutput(actualResource, expectedURI, normalizer);
 		}
+		activate();
 		return actualResource;
 	}
 
@@ -477,6 +479,7 @@
 	}
 
 	private void doScheduleLoadCheck(@NonNull URI uri) throws Exception {
+		deactivate();
 		ResourceSet resourceSet = new ResourceSetImpl();
 		getTestProjectManager().initializeResourceSet(resourceSet);
 		Resource resource = resourceSet.getResource(uri, true);
@@ -485,20 +488,23 @@
 		EcoreUtil.resolveAll(resource);
 		PivotTestCase.assertNoUnresolvedProxies("Resolve", resource);;
 		PivotTestCase.assertNoValidationErrors("Validate", resource);;
+		activate();
 	}
 
 	protected XtextResource doSerialize(@NonNull URI inputURI, @NonNull URI serializedURI) throws Exception {
+		deactivate();
 		ResourceSet resourceSet = new ResourceSetImpl();
+		//	Executor savedExecutor = PivotUtil.basicGetExecutor();
 		//
 		//	Load QVTiAS
 		//
 		OCL ocl = QVTbase.newInstance(getTestProjectManager());
 		ocl.getEnvironmentFactory().setSeverity(PivotPackage.Literals.VARIABLE___VALIDATE_COMPATIBLE_INITIALISER_TYPE__DIAGNOSTICCHAIN_MAP, StatusCodes.Severity.IGNORE);
+		XtextResource xtextResource = null;
 		try {
 			ASResource asResource = loadQVTiAS(ocl, inputURI);
 			LoadTestCase.assertNoResourceErrors("Serializing to " + serializedURI, asResource);
 			LoadTestCase.assertNoUnresolvedProxies("Serializing to " + serializedURI, asResource);
-			XtextResource xtextResource = null;
 			try {
 				LoadTestCase.assertNoValidationErrors("Serializing to " + serializedURI, asResource);
 				//
@@ -514,26 +520,30 @@
 				catch (Throwable t) {}
 				throw e;
 			}
-
-			QVTimperative qvti = QVTimperative.newInstance(getTestProjectManager(), null);
-			try {
-				ImperativeTransformation asTransformation = QVTimperativeUtil.loadTransformation(qvti.getEnvironmentFactory(), serializedURI, false);
-				Resource asResource2 = asTransformation.eResource();
-				assert asResource2 != null;
-				LoadTestCase.assertNoResourceErrors("Loading " + serializedURI, asResource2);
-				LoadTestCase.assertNoUnresolvedProxies("Loading " + serializedURI, asResource2);
-				LoadTestCase.assertNoValidationErrors("Loading " + serializedURI, asResource2);
-			}
-			finally {
-				qvti.dispose();
-				qvti = null;
-			}
-			return xtextResource;
 		}
 		finally {
 			ocl.dispose();
 			ocl = null;
 		}
+
+		QVTimperative qvti = QVTimperative.newInstance(getTestProjectManager(), null);
+		try {
+			ImperativeTransformation asTransformation = QVTimperativeUtil.loadTransformation(qvti.getEnvironmentFactory(), serializedURI, false);
+			Resource asResource2 = asTransformation.eResource();
+			assert asResource2 != null;
+			LoadTestCase.assertNoResourceErrors("Loading " + serializedURI, asResource2);
+			LoadTestCase.assertNoUnresolvedProxies("Loading " + serializedURI, asResource2);
+			LoadTestCase.assertNoValidationErrors("Loading " + serializedURI, asResource2);
+		}
+		finally {
+			qvti.dispose();
+			qvti = null;
+		}
+		//	if (savedExecutor != null) {
+		//		ThreadLocalExecutor.setExecutor(savedExecutor);
+		//	}
+		activate();
+		return xtextResource;
 	}
 
 	public boolean executeTransformation() throws Exception {
diff --git a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/PivotTestCase.java b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/PivotTestCase.java
index 0b4ab96..68ae6de 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/PivotTestCase.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/PivotTestCase.java
@@ -22,8 +22,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.WeakHashMap;
-
 import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
@@ -44,11 +42,11 @@
 import org.eclipse.ocl.pivot.internal.resource.ASResourceImpl;
 import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal;
 import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
-import org.eclipse.ocl.pivot.utilities.AbstractEnvironmentFactory;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
 import org.eclipse.ocl.pivot.utilities.LabelUtil;
 import org.eclipse.ocl.pivot.utilities.OCL;
 import org.eclipse.ocl.pivot.utilities.PivotUtil;
+import org.eclipse.ocl.pivot.utilities.ThreadLocalExecutor;
 import org.eclipse.ocl.pivot.utilities.TracingOption;
 import org.eclipse.ocl.pivot.values.Value;
 import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
@@ -77,16 +75,16 @@
 	//public static boolean DEBUG_GC = false;			// True performs an enthusuastic resource release and GC at the end of each test
 	public static boolean DEBUG_ID = false;			// True prints the start and end of each test.
 	{
-		PivotUtilInternal.noDebug = false;
+		//	PivotUtilInternal.noDebug = false;
 		//	DEBUG_GC = true;
-		DEBUG_ID = true;
-		AbstractEnvironmentFactory.liveEnvironmentFactories = new WeakHashMap<>();	// Prints the create/finalize of each EnvironmentFactory
+		//	DEBUG_ID = true;
+		//	AbstractEnvironmentFactory.liveEnvironmentFactories = new WeakHashMap<>();	// Prints the create/finalize of each EnvironmentFactory
 		//	PivotMetamodelManager.liveMetamodelManagers = new WeakHashMap<>();			// Prints the create/finalize of each MetamodelManager
 		//	StandaloneProjectMap.liveStandaloneProjectMaps = new WeakHashMap<>();		// Prints the create/finalize of each StandaloneProjectMap
 		//	ResourceSetImpl.liveResourceSets = new WeakHashMap<>();						// Requires edw-debug private EMF branch
-		TEST_START.setState(true);
-		AbstractEnvironmentFactory.ENVIRONMENT_FACTORY_ATTACH.setState(true);
-		ThreadLocalExecutor.THREAD_LOCAL_ENVIRONMENT_FACTORY.setState(true);
+		//	TEST_START.setState(true);
+		//	AbstractEnvironmentFactory.ENVIRONMENT_FACTORY_ATTACH.setState(true);
+		//	ThreadLocalExecutor.THREAD_LOCAL_ENVIRONMENT_FACTORY.setState(true);
 	}
 
 	public static @NonNull List<Diagnostic> assertDiagnostics(@NonNull String prefix, @NonNull List<Diagnostic> diagnostics, String... messages) {
@@ -402,29 +400,16 @@
 			PivotUtilInternal.debugPrintln("-----Starting " + getClass().getSimpleName() + "." + getName() + "-----");
 		}
 		TracingOption.resetAll();
+		ThreadLocalExecutor.reset();
 		ASResourceImpl.CHECK_IMMUTABILITY.setState(true);
 		TEST_START.println("-----Starting " + getClass().getSimpleName() + "." + getName() + "-----");
 		startTime = System.nanoTime();
-		/*	List<String> nsURIs = new ArrayList<>();
-		for (EPackage ePackage : EValidator.Registry.INSTANCE.keySet()) {
-			nsURIs.add(ePackage.getNsURI());
-		}
-		System.out.println("EValidator.Registry.INSTANCE size = " + EValidator.Registry.INSTANCE.size());
-		Collections.sort(nsURIs);
-		for (String nsURI : nsURIs) {
-			System.out.println("\t" + nsURI);
-		} */
 	}
 
-
-
-
 	static long startTime;
 
 	@Override
-	protected void tearDown()
-			throws Exception {
-		// TODO Auto-generated method stub
+	protected void tearDown() throws Exception {
 		//	long time = System.nanoTime() - startTime;
 		super.tearDown();
 		QVTruntimeUtil.contextLine = null;
@@ -435,10 +420,11 @@
 		newSet.removeAll(savedEPackageRegistry);
 		if (newSet.size() > 0) {
 			List<String> newList = new ArrayList<>(newSet);
-			Collections.sort(savedEPackageRegistry);
+			Collections.sort(newList);
 			//	QVTruntimeUtil.errPrintln("EPackage.Registry.INSTANCE pre-extras");
 			for (String nsURI : newList) {
-				if (nsURI.contains("example") || nsURI.contains("test") || (!nsURI.startsWith("http://www.eclipse.org") && !nsURI.startsWith("http://www.w3.org"))) {
+				if (nsURI.contains("example") || nsURI.contains("test")		// FIXME Avoid using http://www.eclipse.org for test models
+						|| (!nsURI.startsWith("http://www.eclipse.org") && !nsURI.startsWith("http://www.w3.org"))) {
 					PivotUtilInternal.debugPrintln("Extra " + nsURI);
 				}
 			}
diff --git a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java
index c0a7261..ac1b94a 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtcore.tests/src/org/eclipse/qvtd/xtext/qvtcore/tests/QVTcSerializeTests.java
@@ -67,9 +67,10 @@
 		URI serializedPivotURI = getTestURIWithExtension(inputURI, "serialized.qvtcas");
 		ProjectManager projectManager = getTestProjectManager();
 		QVTcore ocl1 = QVTcore.newInstance(projectManager);
-		QVTcore ocl2 = QVTcore.newInstance(projectManager);
 		Resource asResource1 = doLoad_Concrete(ocl1, inputURI, pivotURI, NO_MESSAGES);
+		ocl1.deactivate();
 		doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true, null);
+		QVTcore ocl2 = QVTcore.newInstance(projectManager);
 		Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, NO_MESSAGES);
 		((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
 		TestsXMLUtil.resetTransients(asResource1);
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java
index fd46db2..53026c3 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiCompilerTests.java
@@ -108,7 +108,6 @@
 	protected static class MyQVT extends OCLInternal
 	{
 		protected final @NonNull TestProject testProject;
-		//		private GlobalStateMemento globalStateMemento = new GlobalStateMemento();
 
 		public MyQVT(@NonNull TestProject testProject, @NonNull QVTiEnvironmentFactory environmentFactory) {
 			super(environmentFactory);
@@ -136,13 +135,6 @@
 			return executor.getTransformer();
 		}
 
-		@Override
-		public synchronized void dispose() {
-			super.dispose();
-			//			globalStateMemento.restoreGlobalState();
-			//			globalStateMemento = null;
-		}
-
 		public @NonNull Resource doLoad_ConcreteWithOCL(@NonNull URI inputURI) throws Exception {
 			URI cstURI = testProject.getOutputFile(ClassUtil.nonNullState(inputURI.appendFileExtension("xmi").lastSegment())).getURI();//TestUtil.getFileURI(getClass(), cstName);
 			URI pivotURI = testProject.getOutputFile(ClassUtil.nonNullState(inputURI.appendFileExtension(QVTimperativeUtil.QVTIAS_FILE_EXTENSION).lastSegment())).getURI();//TestUtil.getFileURI(getClass(), pivotName);
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiDebuggerTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiDebuggerTests.java
index c2b2d2e..f5333b4 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiDebuggerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiDebuggerTests.java
@@ -219,6 +219,7 @@
 
 		ILaunchConfigurationWorkingCopy launchConfiguration = createLaunchConfiguration(testProject, "HSV2HSL", txFile, inMap, outMap);
 		launchConfiguration.doSave();
+		ocl.deactivate();
 		TestUIUtil.flushEvents();
 		ILaunch launch = launchConfiguration.launch(ILaunchManager.DEBUG_MODE, null);
 		assert launch != null;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
index 9755e50..815c0bd 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiInterpreterTests.java
@@ -37,6 +37,7 @@
 import org.eclipse.qvtd.compiler.QVTiCompilerChain;
 import org.eclipse.qvtd.pivot.qvtbase.graphs.GraphMLBuilder;
 import org.eclipse.qvtd.pivot.qvtbase.graphs.GraphMLStringBuilder;
+import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
 import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
 import org.eclipse.qvtd.pivot.qvtimperative.QVTimperativePackage;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
@@ -126,8 +127,10 @@
 		assertEquals(expected, actual);
 	}
 
-	protected void assertLoadable(@NonNull URI asURI) throws Exception {
+	protected void assertLoadable(@NonNull QVTbase qvt, @NonNull URI asURI) throws Exception {
+		qvt.deactivate();
 		assertLoadable(getTestProject(), asURI);
+		qvt.activate();
 	}
 
 	protected void assertLoadable(@NonNull TestProject testProject, @NonNull URI asURI) throws Exception {
@@ -191,7 +194,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("upperGraph", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -222,7 +225,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("upperGraph", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -237,7 +240,7 @@
 	@Test
 	public void testQVTiInterpreter_Graph2GraphHierarchicalLoad() throws Exception {
 		URI asURI = getModelsURI("Graph2GraphHierarchical" + "/"  + "Graph2GraphHierarchical.ref.qvtias");
-		assertLoadable(asURI);
+		assertLoadable(getTestProject(), asURI);
 	}
 
 	/**
@@ -256,7 +259,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("hsv", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -282,7 +285,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("tree", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -310,7 +313,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("tree", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -344,7 +347,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("uml", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -382,7 +385,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("uml", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -408,7 +411,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("leftCS", inputURI);
 		assertTrue(myQVT.executeTransformation());
@@ -431,7 +434,7 @@
 		ImperativeTransformation iTransformation = myQVT.loadTransformation();
 		BasicQVTiExecutor testEvaluator = myQVT.createInterpretedExecutor(iTransformation);
 		testEvaluator.saveTransformation(txASURI, null);
-		assertLoadable(txASURI);
+		assertLoadable(myQVT, txASURI);
 		//
 		myQVT.addInputURI("leftCS", inputURI);
 		assertTrue(myQVT.executeTransformation());
diff --git a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java
index 62ee959..4c4fecf 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtimperative.tests/src/org/eclipse/qvtd/xtext/qvtimperative/tests/QVTiSerializeTests.java
@@ -53,9 +53,10 @@
 		URI serializedPivotURI = getTestURIWithExtension(inputURI, "serialized.qvtias");
 		ProjectManager projectManager = getTestProjectManager();
 		OCL ocl1 = QVTimperative.newInstance(projectManager, null);
-		OCL ocl2 = QVTimperative.newInstance(projectManager, null);
 		Resource asResource1 = doLoad_Concrete(ocl1, inputURI, pivotURI, NO_MESSAGES);
+		ocl1.deactivate();
 		doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true);
+		OCL ocl2 = QVTimperative.newInstance(projectManager, null);
 		Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, NO_MESSAGES);
 		((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
 		TestsXMLUtil.resetTransients(asResource1);
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
index 05f096e..75132c5 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrCompilerTests.java
@@ -44,6 +44,7 @@
 import org.eclipse.ocl.pivot.model.OCLstdlib;
 import org.eclipse.ocl.pivot.resource.ProjectManager;
 import org.eclipse.ocl.pivot.utilities.OCL;
+import org.eclipse.ocl.pivot.utilities.ThreadLocalExecutor;
 import org.eclipse.ocl.pivot.utilities.ToStringVisitor;
 import org.eclipse.ocl.pivot.utilities.XMIUtil;
 import org.eclipse.qvtd.compiler.CompilerChain;
@@ -57,7 +58,6 @@
 import org.eclipse.qvtd.compiler.internal.qvtb2qvts.ConnectivityChecker;
 import org.eclipse.qvtd.compiler.internal.qvtb2qvts.ScheduleManager;
 import org.eclipse.qvtd.compiler.internal.qvtm2qvts.QVTm2QVTs;
-import org.eclipse.qvtd.compiler.internal.qvts2qvts.partitioner.TransformationPartitioner;
 import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbaseUtil;
 import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
 import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor;
@@ -853,6 +853,7 @@
 		finally {
 			myQVT1.dispose();
 		}
+		ThreadLocalExecutor.waitForGC();
 		URI asURI2a = getTestURI("Families2.ecore.oclas");
 		URI ecoreURI = getModelsURI("ecore2pivotRoot/Families.ecore");
 		OCL ocl = OCL.newInstance(projectManager);
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrDebuggerTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrDebuggerTests.java
index 35a5d3d..614e7e7 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrDebuggerTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrDebuggerTests.java
@@ -120,6 +120,7 @@
 		outMap.put(middleName, middleFile.getURI().toString());
 		ILaunchConfigurationWorkingCopy launchConfiguration = createLaunchConfiguration(testProject, "Forward2Reverse", txFile, "reverse", inMap, outMap, true);
 		launchConfiguration.doSave();
+		ocl.deactivate();
 		TestUIUtil.flushEvents();
 		ILaunch launch = launchConfiguration.launch(ILaunchManager.RUN_MODE, null, true);
 		assert launch != null;
@@ -149,7 +150,6 @@
 		normalizer.normalize(actualResource);
 		//	}
 		TestUtil.assertSameModel(expectedResource, actualResource);
-
 		ocl.dispose();
 	}
 
@@ -181,6 +181,7 @@
 		outMap.put(middleName, middleFile.getURI().toString());
 		ILaunchConfigurationWorkingCopy launchConfiguration = createLaunchConfiguration(testProject, "Forward2Reverse", txFile, "reverse", inMap, outMap, true);
 		launchConfiguration.doSave();
+		ocl.deactivate();
 		TestUIUtil.flushEvents();
 		ILaunch launch = launchConfiguration.launch(ILaunchManager.RUN_MODE, null, true);
 		assert launch != null;
@@ -221,6 +222,7 @@
 		outMap.put(middleName, middleFile.getURI().toString());
 		ILaunchConfigurationWorkingCopy launchConfiguration = createLaunchConfiguration(testProject, "Forward2Reverse", txFile, "reverse", inMap, outMap, true);
 		launchConfiguration.doSave();
+		ocl.deactivate();
 		TestUIUtil.flushEvents();
 		ILaunch launch = launchConfiguration.launch(ILaunchManager.RUN_MODE, null, true);
 		assert launch != null;
@@ -298,6 +300,7 @@
 		outMap.put(middleName, middleFile.getURI().toString());
 		ILaunchConfigurationWorkingCopy launchConfiguration = createLaunchConfiguration(testProject, "HierarchicalStateMachine2FlatStateMachine", txFile, "flat", inMap, outMap, true);
 		launchConfiguration.doSave();
+		ocl.deactivate();
 		TestUIUtil.flushEvents();
 		ILaunch launch = launchConfiguration.launch(ILaunchManager.RUN_MODE, null, true);
 		assert launch != null;
@@ -352,6 +355,7 @@
 		outMap.put(middleName, middleFile.getURI().toString());
 		ILaunchConfigurationWorkingCopy launchConfiguration = createLaunchConfiguration(testProject, "HierarchicalStateMachine2FlatStateMachine", txFile, "flat", inMap, outMap, false);
 		launchConfiguration.doSave();
+		ocl.deactivate();
 		TestUIUtil.flushEvents();
 		ILaunch launch = launchConfiguration.launch(ILaunchManager.RUN_MODE, null, true);
 		assert launch != null;
diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrSerializeTests.java b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrSerializeTests.java
index 1b7b359..587330b 100644
--- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrSerializeTests.java
+++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/src/org/eclipse/qvtd/xtext/qvtrelation/tests/QVTrSerializeTests.java
@@ -63,9 +63,10 @@
 		URI serializedPivotURI = getTestURIWithExtension(inputURI, "serialized.qvtras");
 		ProjectManager projectManager = getTestProjectManager();
 		QVTrelation ocl1 = QVTrelation.newInstance(projectManager, null);
-		QVTrelation ocl2 = QVTrelation.newInstance(projectManager, null);
 		Resource asResource1 = doLoad_Concrete(ocl1, inputURI, pivotURI, null);
+		ocl1.deactivate();
 		doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true, messages);
+		QVTrelation ocl2 = QVTrelation.newInstance(projectManager, null);
 		Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, null);
 		((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
 		TestsXMLUtil.resetTransients(asResource1);
@@ -83,9 +84,10 @@
 		URI serializedPivotURI = getTestURIWithExtension(inputURI, "serialized.qvtras");
 		ProjectManager projectManager = getTestProjectManager();
 		OCL ocl1 = OCL.newInstance(projectManager);//, null);
-		QVTrelation ocl2 = QVTrelation.newInstance(projectManager);
 		Resource asResource1 = doLoad_Concrete(ocl1, inputURI, pivotURI, null);
+		ocl1.deactivate();
 		doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true, messages);
+		QVTrelation ocl2 = QVTrelation.newInstance(projectManager);
 		Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, null);
 		((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
 		TestsXMLUtil.resetTransients(asResource1);
@@ -103,9 +105,10 @@
 		URI serializedPivotURI = getTestURIWithExtension(inputURI, "serialized.qvtras");
 		ProjectManager projectManager = getTestProjectManager();
 		OCL ocl1 = OCL.newInstance(projectManager);//, null);
-		OCL ocl2 = OCL.newInstance(projectManager);
 		Resource asResource1 = doLoad_Concrete(ocl1, inputURI, pivotURI, NO_MESSAGES);
+		ocl1.deactivate();
 		doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true, messages);
+		OCL ocl2 = OCL.newInstance(projectManager);
 		Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, NO_MESSAGES);
 		((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
 		TestsXMLUtil.resetTransients(asResource1);
