diff --git a/plugins/org.eclipse.epsilon.common/src/org/eclipse/epsilon/common/util/FileUtil.java b/plugins/org.eclipse.epsilon.common/src/org/eclipse/epsilon/common/util/FileUtil.java
index 20ce455..f663fe9 100644
--- a/plugins/org.eclipse.epsilon.common/src/org/eclipse/epsilon/common/util/FileUtil.java
+++ b/plugins/org.eclipse.epsilon.common/src/org/eclipse/epsilon/common/util/FileUtil.java
@@ -33,6 +33,7 @@
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.InvalidPathException;
+import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.attribute.FileAttribute;
@@ -384,9 +385,9 @@
 		// Name might be a path, get the file name, remove it
 		if (name.contains("/")) {
 			dirStructure = Paths.get(tmpdir.toString(), name.substring(0, name.lastIndexOf("/")), "/");
+			logger.debug("Craeting dir structure {} for nested file", dirStructure);
 			dirStructure.toFile().mkdirs();
 			name = name.substring(name.lastIndexOf("/") + 1);
-			logger.debug("inputStreamToFile {}", name);
 		}
 
 		String[] parts = name.split("\\.");
@@ -409,22 +410,20 @@
 
 			int read = 0;
 			byte[] bytes = new byte[1024];
-			logger.debug("{} bytes available", inputStream.available());
 			while ((read = inputStream.read(bytes)) != -1) {
-				logger.debug("{} bytes read from input", read);
 				outputStream.write(bytes, 0, read);
 			}
 			logger.debug("Copying data into temp file Done!");
-//			Runtime.getRuntime().addShutdownHook(new Thread() {
-//	            @Override
-//	            public void run() {
-//	                try {
-//	                    Files.delete(tempFile);
-//	                } catch (IOException e) {
-//	                    e.printStackTrace();
-//	                }
-//	            }
-//	        });
+			Runtime.getRuntime().addShutdownHook(new Thread() {
+	            @Override
+	            public void run() {
+	                try {
+	                    Files.delete(tempFile);
+	                } catch (IOException e) {
+	                	logger.debug("Unable to delete file {}", tempFile.getFileName());
+	                } 
+	            }
+	        });
 			file = tempFile.toFile();
 
 		} catch (IOException e) {
diff --git a/tests/org.eclipse.epsilon.commons.test/.classpath b/tests/org.eclipse.epsilon.commons.test/.classpath
index 22f3064..4f83b23 100644
--- a/tests/org.eclipse.epsilon.commons.test/.classpath
+++ b/tests/org.eclipse.epsilon.commons.test/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/Engine.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/Engine.java
index d632870..ac68889 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/Engine.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/Engine.java
@@ -89,6 +89,7 @@
 	
 	@Test (expected=EglRuntimeException.class)
 	public void testParseInvalid() throws Exception {
+		// FIXME why expect EglRuntimeException when the actual file does not exist?
 		AcceptanceTestUtil.run(invalidPath);
 	}
 }
diff --git a/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/EgxAcceptanceTestUtil.java b/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/EgxAcceptanceTestUtil.java
index 768627e..7b9ee25 100644
--- a/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/EgxAcceptanceTestUtil.java
+++ b/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/EgxAcceptanceTestUtil.java
@@ -26,7 +26,7 @@
 	private EgxAcceptanceTestUtil() {}
 	
 	public static final String
-		testsBase = getTestBaseDir(EgxAcceptanceTestSuite.class),
+		testsBase = "", // getTestBaseDir(EgxAcceptanceTestSuite.class),
 		thriftBase = testsBase+"thrift/",
 		thriftMetamodel = "thrift.ecore",
 		thriftModels[] = {/*"ThriftTest.xmi", "SimpleService.xmi",*/ "fb303.xmi"},
diff --git a/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/rules/Rule.java b/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/rules/Rule.java
index b8a0664..6d41382 100644
--- a/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/rules/Rule.java
+++ b/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/rules/Rule.java
@@ -11,6 +11,8 @@
 
 import static org.junit.Assert.assertEquals;
 import org.eclipse.epsilon.egx.engine.test.acceptance.util.EgxAcceptanceTest;
+import org.eclipse.epsilon.hutn.test.models.Families;
+import org.eclipse.epsilon.hutn.test.models.util.FileUtil;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -30,6 +32,8 @@
 	
 	@BeforeClass
 	public static void setup() throws Exception {
+		// FIXME These assumes the metamodel is registered?
+		FileUtil.getFile("Families.ecore", Families.class);
 		runEgx(egx, model, template("hello.egl", "Hello [%=p.name%]"));
 	}
 	
diff --git a/tests/org.eclipse.epsilon.eml.engine.test.acceptance/src/org/eclipse/epsilon/eml/engine/test/acceptance/trees/TestXmlTreeMerging.java b/tests/org.eclipse.epsilon.eml.engine.test.acceptance/src/org/eclipse/epsilon/eml/engine/test/acceptance/trees/TestXmlTreeMerging.java
index 441d137..ba81b09 100644
--- a/tests/org.eclipse.epsilon.eml.engine.test.acceptance/src/org/eclipse/epsilon/eml/engine/test/acceptance/trees/TestXmlTreeMerging.java
+++ b/tests/org.eclipse.epsilon.eml.engine.test.acceptance/src/org/eclipse/epsilon/eml/engine/test/acceptance/trees/TestXmlTreeMerging.java
@@ -12,6 +12,7 @@
 import java.io.File;
 import java.util.HashMap;
 
+import org.eclipse.epsilon.common.util.FileUtil;
 import org.eclipse.epsilon.ecl.EclModule;
 import org.eclipse.epsilon.emc.plainxml.PlainXmlModel;
 import org.eclipse.epsilon.eml.EmlModule;
@@ -31,6 +32,8 @@
 	
 	@Before
 	public void setup() throws Exception {
+		// Load imported file
+		FileUtil.getFile("imported.eml", TestXmlTreeMerging.class);
 		
 		PlainXmlModel leftModel = loadXmlModel("Left", "left.xml");
 		PlainXmlModel rightModel = loadXmlModel("Right", "right.xml");
@@ -79,7 +82,8 @@
 	protected PlainXmlModel loadXmlModel(String name, String fileName, boolean readOnLoad) throws Exception {
 		PlainXmlModel model = new PlainXmlModel();
 		model.setName(name);
-		model.setFile(new File(getClass().getResource(fileName).toURI()));
+		// model.setFile(new File(getClass().getResource(fileName).toURI()));
+		model.setFile(FileUtil.getFile(fileName, TestXmlTreeMerging.class));
 		model.setReadOnLoad(readOnLoad);
 		model.load();
 		return model;
diff --git a/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlAcceptanceTestUtil.java b/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlAcceptanceTestUtil.java
index 8a92b52..d8b4efa 100644
--- a/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlAcceptanceTestUtil.java
+++ b/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlAcceptanceTestUtil.java
@@ -151,7 +151,7 @@
 		return getScenarios(null, true, Arrays.asList(moduleGetters), null);
 	}
 	public static Collection<EvlRunConfiguration> getScenarios(List<String[]> testInputs, boolean includeTest, Collection<Supplier<? extends IEvlModule>> moduleGetters) {
-		FileUtil.getFile("thrift-helper-functions.eol", EvlAcceptanceTestUtil.class);
+		// FileUtil.getFile("thrift-helper-functions.eol", EvlAcceptanceTestUtil.class);
 		return getScenarios(testInputs, includeTest, moduleGetters, null);
 	}
 	public static Collection<Supplier<? extends IEvlModule>> modules() {
diff --git a/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlTests.java b/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlTests.java
index ba0dd5e..8ab2f7d 100644
--- a/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlTests.java
+++ b/tests/org.eclipse.epsilon.evl.engine.test.acceptance/src/org/eclipse/epsilon/evl/engine/test/acceptance/EvlTests.java
@@ -35,6 +35,8 @@
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * 
@@ -42,6 +44,8 @@
  */
 @RunWith(Parameterized.class)
 public class EvlTests {
+	
+	private static Logger logger = LoggerFactory.getLogger(EvlTests.class);
 
 //	private static final IModel
 //		TEST_MODEL = setUpModel("test.xml"),
@@ -49,6 +53,9 @@
 	
 	@BeforeClass
 	public static void setUpBeforeClass() throws Exception {
+		// Load imported modules
+		FileUtil.getFile("scripts/thrift-helper-functions.eol", EvlTests.class);
+		FileUtil.getFile("scripts/utils.eol", EvlTests.class);
 //		TEST_MODEL.load();
 //		OPTIMISED_MODEL.load();
 	}
@@ -68,6 +75,7 @@
 		PlainXmlModel model = new PlainXmlModel();
 		try {
 			File modelFile = FileUtil.getFile(EvlAcceptanceTestUtil.modelsRoot+modelName, EvlAcceptanceTestUtil.class);
+			logger.debug("setUpModel: {} ({})", modelFile.getPath(), modelFile.length());
 			model.setFile(modelFile);
 		}
 		catch (FileSystemNotFoundException ex) {
@@ -81,7 +89,7 @@
 	
 	public static IModel getTestModel(boolean optimised) {
 		String modelName = optimised ? "optimised.xml" : "test.xml";
-		
+		logger.debug("getTestModel: {}", modelName);
 		return setUpModel(modelName);
 	}
 	
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/CompsTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/CompsTests.java
index 73b97f7..3899166 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/CompsTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/CompsTests.java
@@ -43,6 +43,7 @@
 	
 	@Before
 	public void setup() throws Exception {
+		super.setup();
 		comps = EmfUtil.register(URI.createURI(
 			FlexmiTestSuite.class.getResource("models/comps/comps.ecore").toURI().toString()), 
 				EPackage.Registry.INSTANCE).get(0);
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/FlexmiTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/FlexmiTests.java
index 1a78864..5f7d5d9 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/FlexmiTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/FlexmiTests.java
@@ -22,14 +22,32 @@
 import org.eclipse.epsilon.eol.EolEvaluator;
 import org.eclipse.epsilon.flexmi.FlexmiResource;
 import org.eclipse.epsilon.flexmi.FlexmiResourceFactory;
+import org.junit.Before;
 
 public abstract class FlexmiTests {
 	
+	@Before
+	public void setup()  throws Exception {
+		// Load imported files
+		FileUtil.getFile("models/templates/subdir/template-importing-eol.flexmi", FlexmiTests.class);
+		FileUtil.getFile("models/templates/imported-template.flexmi", FlexmiTests.class);
+		FileUtil.getFile("models/templates/imported-templates.flexmi", FlexmiTests.class);
+		FileUtil.getFile("models/templates/library.eol", FlexmiTests.class);
+				
+	}
+	
 	protected FlexmiResource loadResource(String filename) throws Exception {
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("flexmi", new FlexmiResourceFactory());
 		resourceSet.getPackageRegistry().put(EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE);
-		File resourceFile = FileUtil.getFile("models/" + filename, FlexmiTestSuite.class);
+		File resourceFile;
+		try {
+			resourceFile = FileUtil.getFile("models/" + filename, FlexmiTestSuite.class);
+		}
+		catch (NullPointerException ex) {
+			// Let tests for invalid paths have their joy
+			resourceFile = new File("models/" + filename);
+		}
 		FlexmiResource resource = (FlexmiResource) resourceSet.createResource(URI.createURI(resourceFile.toURI().toString()));
 		resource.load(null);
 		return resource;
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/ImportTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/ImportTests.java
index 64447d7..74c2b44 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/ImportTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/ImportTests.java
@@ -11,23 +11,32 @@
 
 import static org.junit.Assert.*;
 
+import org.eclipse.epsilon.common.util.FileUtil;
+import org.junit.Before;
 import org.junit.Test;
 
 public class ImportTests extends FlexmiTests {
 	
+	@Before
+	public void setup()  throws Exception {
+		super.setup();
+		FileUtil.getFile("models/include/valid-included.flexmi", FlexmiTests.class);	
+	}
+	
 	@Test
 	public void testNoWarnings() throws Exception {
-		assertEquals(loadResource("import/valid-main.flexmi").getWarnings().size(), 0);
+		assertEquals(loadResource("include/valid-main.flexmi").getWarnings().size(), 0);
 	}
 	
 	@Test
 	public void testESuperType() throws Exception {
-		assertEval("EClass.all.first().eSuperTypes.first().name", "c2", "import/valid-main.flexmi");
+		assertEval("EClass.all.first().eSuperTypes.first().name", "c2", "include/valid-main.flexmi");
 	}
 	
 	@Test
 	public void testUnresolvedReferenceWarning() throws Exception {
-		assertEquals(loadResource("import/invalid-main.flexmi").getWarnings().size(), 1);
+		// FIXME What do we really want for an invalid file? non-existent or corrupted?
+		assertEquals(loadResource("include/invalid-main.flexmi").getWarnings().size(), 1);
 	}
 	
 }
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeImportTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeImportTests.java
index 6c1bd5e..2f3b4fd 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeImportTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeImportTests.java
@@ -9,14 +9,23 @@
 **********************************************************************/
 package org.eclipse.epsilon.flexmi.test;
 
+import org.eclipse.epsilon.common.util.FileUtil;
+import org.junit.Before;
 import org.junit.Test;
 
 public class IncludeImportTests extends FlexmiTests {
 	
+	@Before
+	public void setup()  throws Exception {
+		super.setup();
+		FileUtil.getFile("models/include/valid-included.flexmi", FlexmiTests.class);	
+	}
+	
 	@Test
 	public void testUniqueC1() throws Exception {
+		// FIXME There is no 'C3' element that has C1 as supertpye!!
 		assertEval("EClass.all.selectOne(c|c.name='C3').eSuperTypes.first() == EClass.all.selectOne(c|c.name='C1')", 
-				true, "include-import/valid-main.flexmi");
+				true, "include/valid-main.flexmi");
 	}
 	
 }
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeTests.java
index 76fbe2b..6de80a7 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/IncludeTests.java
@@ -11,10 +11,19 @@
 
 import static org.junit.Assert.assertEquals;
 
+import org.eclipse.epsilon.common.util.FileUtil;
+import org.junit.Before;
 import org.junit.Test;
 
 public class IncludeTests extends FlexmiTests {
 	
+	@Before
+	public void setup()  throws Exception {
+		super.setup();
+		FileUtil.getFile("models/include/valid-included.flexmi", FlexmiTests.class);
+		FileUtil.getFile("models/include/datatypes.flexmi", FlexmiTests.class);
+	}
+	
 	@Test
 	public void testNoWarnings() throws Exception {
 		assertEquals(loadResource("include/valid-main.flexmi").getWarnings().size(), 0);
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/PropogenTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/PropogenTests.java
index fb5ba51..2778f0b 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/PropogenTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/PropogenTests.java
@@ -17,6 +17,7 @@
 	
 	@Before
 	public void setup() throws Exception {
+		super.setup();
 		ePackage = EmfUtil.register(URI.createURI(
 			FlexmiTestSuite.class.getResource("models/propogen/propogen.ecore").toURI().toString()), 
 				EPackage.Registry.INSTANCE).get(0);
diff --git a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
index 5dd07da..3a042ab 100644
--- a/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
+++ b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
@@ -9,12 +9,11 @@
 **********************************************************************/
 package org.eclipse.epsilon.flexmi.test;
 
-import org.eclipse.epsilon.common.util.FileUtil;
-import org.eclipse.epsilon.flexmi.FlexmiResource;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 
 import java.util.Arrays;
 
+import org.eclipse.epsilon.flexmi.FlexmiResource;
 import org.junit.Test;
 
 public class TemplateTests extends FlexmiTests {
@@ -22,7 +21,6 @@
 	@Test
 	public void testModelWithTemplate() throws Exception {
 		FlexmiResource resource = loadResource("templates/model-with-template.flexmi");
-		FileUtil.getFile("/models/templates/subdir/template-importing-eol.flexmi", TemplateTests.class);
 		assertEquals(0, resource.getWarnings().size());
 		assertEquals(3, resource.getTemplates().size());
 		assertEquals("t1", resource.getTemplates().get(0).getName());
diff --git a/tests/org.eclipse.epsilon.hutn.test.acceptance/src/org/eclipse/epsilon/hutn/test/acceptance/valid/ExternalObjectReferenceRelative.java b/tests/org.eclipse.epsilon.hutn.test.acceptance/src/org/eclipse/epsilon/hutn/test/acceptance/valid/ExternalObjectReferenceRelative.java
index 8aabaab..0ddcb8b 100644
--- a/tests/org.eclipse.epsilon.hutn.test.acceptance/src/org/eclipse/epsilon/hutn/test/acceptance/valid/ExternalObjectReferenceRelative.java
+++ b/tests/org.eclipse.epsilon.hutn.test.acceptance/src/org/eclipse/epsilon/hutn/test/acceptance/valid/ExternalObjectReferenceRelative.java
@@ -41,7 +41,8 @@
                             "}";
 		
 		FileUtil.setFileContents(hutn, hutnSource);
-		
+		// Load nearby model
+		FileUtil.getFile("Nearby.model", ExternalObjectReferenceRelative.class);
 		model = generateModel(hutnSource);
 		
 		model.setVariable("john", "Person.all().first()");
diff --git a/tests/org.eclipse.epsilon.test.unit/EpsilonTestSuite.launch b/tests/org.eclipse.epsilon.test.unit/EpsilonTestSuite.launch
new file mode 100644
index 0000000..05b8448
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/EpsilonTestSuite.launch
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+
+	<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+		<listEntry value="/org.eclipse.epsilon.test/src/org/eclipse/epsilon/test/EpsilonTestSuite.java"/>
+	</listAttribute>
+	<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+		<listEntry value="1"/>
+	</listAttribute>
+	<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+	<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+	<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+	<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+	<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+	<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.epsilon.test.EpsilonTestSuite"/>
+	<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.epsilon.test"/>
+	<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx4g"/>
+
+</launchConfiguration>
diff --git a/tests/org.eclipse.epsilon.test.unit/pom.xml b/tests/org.eclipse.epsilon.test.unit/pom.xml
index e679881..6d5f514 100644
--- a/tests/org.eclipse.epsilon.test.unit/pom.xml
+++ b/tests/org.eclipse.epsilon.test.unit/pom.xml
@@ -55,7 +55,7 @@
 					<includes>
 						<include>EpsilonTestSuite.java</include>
 					</includes>
-					<!-->argLine>-Xmx4096m</argLine -->
+					<argLine>-Xmx6144m</argLine>
 				</configuration>
 			</plugin>
 
