[570995] Adapt to single concurrent ThreadLocalExecutor limitation
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);