diff --git a/.gitignore b/.gitignore
index b0bd381..b9d4b5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,15 @@
 # binaries
 bin/
-target
+target/
 *.jar
 
 # Ignore IntelliJ files
 *.iml
 *.idea/
 
+# Ignore Eclipse settings
+*.settings
+
 # Ignore sym-link to project stored in EpsilonLabs
 /plugins/org.eclipse.epsilon.antlr.dev
 
@@ -79,6 +82,8 @@
 /tests/org.eclipse.epsilon.test/TEST-default.StringTests.xml
 /tests/org.eclipse.epsilon.test/TEST-*.xml
 
+/tests/org.eclipse.epsilon.test.unit/TEST-*.xml
+
 # /tests/org.eclipse.epsilon.workflow.test/resources/
 /tests/org.eclipse.epsilon.workflow.test/resources/TEST-default.sample.xml
 
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 390352b..20ce455 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
@@ -9,45 +9,78 @@
  ******************************************************************************/
 package org.eclipse.epsilon.common.util;
 
+import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_READ;
+import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE;
+import static java.security.AccessController.doPrivileged;
+
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.net.URISyntaxException;
 import java.net.URLDecoder;
 import java.nio.channels.FileChannel;
+import java.nio.file.DirectoryStream;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.FileSystems;
 import java.nio.file.Files;
+import java.nio.file.InvalidPathException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.nio.file.attribute.FileAttribute;
+import java.nio.file.attribute.PosixFilePermission;
+import java.nio.file.attribute.PosixFilePermissions;
+import java.util.*;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class FileUtil {
-	private FileUtil() {}
-	
+
+	private static Logger logger = LoggerFactory.getLogger(FileUtil.class);
+	// temporary directory location
+	private static final Path tmpdir = Paths.get(System.getProperty("java.io.tmpdir"));
+
+	private static final boolean isPosix = FileSystems.getDefault().supportedFileAttributeViews().contains("posix");
+
+	// default file and directory permissions (lazily initialized)
+	private static class PosixPermissions {
+		static final FileAttribute<Set<PosixFilePermission>> filePermissions = PosixFilePermissions
+				.asFileAttribute(EnumSet.of(OWNER_READ, OWNER_WRITE));
+		static final FileAttribute<Set<PosixFilePermission>> dirPermissions = PosixFilePermissions
+				.asFileAttribute(EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE));
+	}
+
+	private FileUtil() {
+	}
+
 	public static Path getCurrentDirectory() {
 		return Paths.get(".").toAbsolutePath().normalize();
 	}
-	
+
 	public static void setFileContents(String str, File file) throws Exception {
 		try (FileWriter writer = new FileWriter(file)) {
 			writer.append(str);
 			writer.flush();
 		}
 	}
-	
+
 	public static String replaceExtension(String filename, String newExtension) {
 		int dotIndex = filename.lastIndexOf('.');
 		if (dotIndex > -1) {
-			filename = filename.substring(0, dotIndex+1) + newExtension;
+			filename = filename.substring(0, dotIndex + 1) + newExtension;
 		}
 		return filename;
 	}
-	
+
 	public static String removeExtension(String filename) {
 		int dotIndex = filename.lastIndexOf('.');
 		if (dotIndex > -1) {
@@ -55,21 +88,22 @@
 		}
 		return filename;
 	}
-	
+
 	public static String getFileName(String path) {
 		return getFileName(path, true);
 	}
-	
+
 	public static String getFileName(String path, boolean includeExtension) {
-		String filename = path.substring(path.replace("\\", "/").lastIndexOf('/')+1);
+		String filename = path.substring(path.replace("\\", "/").lastIndexOf('/') + 1);
 		if (!includeExtension) {
 			filename = removeExtension(filename);
 		}
 		return filename;
 	}
-	
+
 	/**
 	 * Copied from @linkplain{https://stackoverflow.com/a/3571239/5870336}
+	 * 
 	 * @param filename
 	 * @return
 	 * @since 1.6
@@ -78,11 +112,11 @@
 		String extension = "";
 		int dotIndex = filename.lastIndexOf('.');
 		if (dotIndex > Math.max(filename.lastIndexOf('/'), filename.lastIndexOf('\\'))) {
-		    extension = filename.substring(dotIndex+1);
+			extension = filename.substring(dotIndex + 1);
 		}
 		return extension;
 	}
-	
+
 	public static String getFileContents(File file) throws Exception {
 		final StringBuffer buffer = new StringBuffer();
 		final String lineSeparator = System.getProperty("line.separator");
@@ -91,10 +125,10 @@
 			buffer.append(line);
 			buffer.append(lineSeparator);
 		}
-		
+
 		return buffer.toString();
 	}
-	
+
 	public static Collection<String> getFileLineContents(File file) throws Exception {
 		try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
 			final List<String> lines = new LinkedList<>();
@@ -109,7 +143,7 @@
 			return lines;
 		}
 	}
-	
+
 	public static String getAbsolutePath(String basePath, String relativePath) {
 		File file = new File(relativePath);
 		if (!file.isAbsolute()) {
@@ -117,148 +151,197 @@
 		}
 		return file.getAbsolutePath();
 	}
-	
+
+	/**
+	 * Gets a file stored as a resource in a jar. Since not all users of the file
+	 * can read from inside jars, we get the file as a stream and create a temp file
+	 * with its contents.
+	 * 
+	 * @param name
+	 * @param relativeTo
+	 * @return
+	 */
 	public static File getFile(String name, Class<?> relativeTo) {
-		try {
-			final File clazz = new File(URLDecoder.decode(relativeTo.getResource(relativeTo.getSimpleName() + ".class").getFile(), "UTF-8"));
-			
-			return new File(clazz.getParentFile(), name);
-		
-		} catch (UnsupportedEncodingException e) {
-			throw new IllegalArgumentException(name + " could not be located relative to " + relativeTo);
-		}
+		logger.info("getFile {}@{}", name, relativeTo.getSimpleName());
+		InputStream is = relativeTo.getResourceAsStream(name);
+		return inputStreamToFile(is, name);
 	}
-	
+
+	@Deprecated
 	public static File getDirectoryOf(Class<?> clazz) {
 		return getFile(clazz.getSimpleName() + ".class", clazz).getParentFile();
 	}
-	
+
+	@Deprecated
 	public static String getPath(String name, Class<?> relativeTo) {
 		return getFile(name, relativeTo).getAbsolutePath();
 	}
-
-	public static void checkFileExists(final File file) throws FileNotFoundException {
-		if (!file.exists()) {
-			throw new FileNotFoundException(
-				"File " + file.getPath() + " does not exist");
-		}
-	}
-
-	public static File copyToTemp(File srcFile) throws IOException {
-		File tmpFile = File.createTempFile("filecompare", "tmp");
-		if (srcFile.isDirectory()) {
-			tmpFile.delete();
-			tmpFile.mkdir();
-		}
-		copy(srcFile, tmpFile);
-		return tmpFile;
-	}
-
-	public static void copy(File srcFile, File dstFile) throws IOException {
-		if (srcFile.isDirectory()) {
-			dstFile.mkdir();
-			for (File entry : srcFile.listFiles()) {
-				copy(entry, new File(dstFile, entry.getName()));
-			}
-		}
-		else {
-			// Based on the second answer in http://stackoverflow.com/questions/106770.
-			FileInputStream isSrc = null;
-			FileOutputStream osDst = null;
-			FileChannel chSrc = null;
-			FileChannel chDst = null;
-			try {
-				isSrc = new FileInputStream(srcFile);
-				osDst = new FileOutputStream(dstFile);
-				chSrc = isSrc.getChannel();
-				chDst = osDst.getChannel();
-				final long srcBytes = srcFile.length();
-				long transferred = 0;
-				while (transferred < srcBytes) {
-					transferred += chDst.transferFrom(chSrc, transferred, srcBytes);
-					chDst.position(transferred);
-				}
-			}
-			finally {
-				if (chDst != null) {
-					chDst.close();
-				}
-				else if (osDst != null) {
-					osDst.close();
-				}
-
-				if (chSrc != null) {
-					chSrc.close();
-				}
-				else if (isSrc != null) {
-					isSrc.close();
-				}
-			}
-		}
-	}
-
-	public static Set<String> listFilesAsSet(File fileExpected) {
-		return new HashSet<>(Arrays.asList(fileExpected.list()));
-	}
-
-	/**
-	 * We implement our own comparison algorithm here, so we don't need Eclipse
-	 * Compare to compute differences, but rather only to show them in the UI.
-	 */
-	public static boolean sameContents(File fileExpected, File fileActual, Set<String> ignoreFilenames) throws IOException {
-		if (fileExpected.isDirectory() != fileActual.isDirectory()) {
-			// One is a file, the other is a directory: not the same
-			return false;
-		}
-
-		if (fileExpected.isDirectory()) {
-			// Both are directories: they should contain the same filenames,
-			// and each pair should have the same contents
-			final Set<String> expectedFilenames = listFilesAsSet(fileExpected);
+
+	public static void checkFileExists(final File file) throws FileNotFoundException {
+		if (!file.exists()) {
+			throw new FileNotFoundException("File " + file.getPath() + " does not exist");
+		}
+	}
+
+	public static File createTempFile(String name) {
+		return createTempFile(name, "tmp");
+	}
+
+	public static File createTempFile(String name, String extension) {
+		Path tmpFile;
+		try {
+			// tmpFile = Files.createTempFile(name, extension);
+			tmpFile = createTempFile(null, name, extension);
+		} catch (IOException e) {
+			throw new IllegalArgumentException("Could not create temp file ", e);
+		}
+		return tmpFile.toFile();
+	}
+
+	public static File createTempDir(String name) {
+		return createTempDir(name, false);
+	}
+
+	public static File createTempDir(String name, boolean reuse) {
+		Path tmpFile = null;
+		if (reuse) {
+			DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {
+				@Override
+				public boolean accept(Path file) throws IOException {
+					return (Files.isDirectory(file) && file.getFileName().startsWith(Paths.get(name)));
+				}
+			};
+			Iterator<Path> it;
+			try {
+				it = Files.newDirectoryStream(tmpdir, filter).iterator();
+				tmpFile = it.hasNext() ? it.next() : null;
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		if (tmpFile == null) {
+			try {
+				tmpFile = createTempDirectory(null, name);
+			} catch (IOException e) {
+				throw new IllegalArgumentException("Could not create temp directory ", e);
+			}
+		}
+		return tmpFile.toFile();
+	}
+
+	public static File copyToTemp(File srcFile) throws IOException {
+		File tmpFile = File.createTempFile("filecompare", "tmp");
+		if (srcFile.isDirectory()) {
+			tmpFile.delete();
+			tmpFile.mkdir();
+		}
+		copy(srcFile, tmpFile);
+		return tmpFile;
+	}
+
+	public static void copy(File srcFile, File dstFile) throws IOException {
+		if (srcFile.isDirectory()) {
+			dstFile.mkdir();
+			for (File entry : srcFile.listFiles()) {
+				copy(entry, new File(dstFile, entry.getName()));
+			}
+		} else {
+			// Based on the second answer in http://stackoverflow.com/questions/106770.
+			FileInputStream isSrc = null;
+			FileOutputStream osDst = null;
+			FileChannel chSrc = null;
+			FileChannel chDst = null;
+			try {
+				isSrc = new FileInputStream(srcFile);
+				osDst = new FileOutputStream(dstFile);
+				chSrc = isSrc.getChannel();
+				chDst = osDst.getChannel();
+				final long srcBytes = srcFile.length();
+				long transferred = 0;
+				while (transferred < srcBytes) {
+					transferred += chDst.transferFrom(chSrc, transferred, srcBytes);
+					chDst.position(transferred);
+				}
+			} finally {
+				if (chDst != null) {
+					chDst.close();
+				} else if (osDst != null) {
+					osDst.close();
+				}
+
+				if (chSrc != null) {
+					chSrc.close();
+				} else if (isSrc != null) {
+					isSrc.close();
+				}
+			}
+		}
+	}
+
+	public static Set<String> listFilesAsSet(File fileExpected) {
+		return new HashSet<>(Arrays.asList(fileExpected.list()));
+	}
+
+	/**
+	 * We implement our own comparison algorithm here, so we don't need Eclipse
+	 * Compare to compute differences, but rather only to show them in the UI.
+	 */
+	public static boolean sameContents(File fileExpected, File fileActual, Set<String> ignoreFilenames)
+			throws IOException {
+		if (fileExpected.isDirectory() != fileActual.isDirectory()) {
+			// One is a file, the other is a directory: not the same
+			return false;
+		}
+
+		if (fileExpected.isDirectory()) {
+			// Both are directories: they should contain the same filenames,
+			// and each pair should have the same contents
+			final Set<String> expectedFilenames = listFilesAsSet(fileExpected);
 			final Set<String> actualFilenames = listFilesAsSet(fileActual);
 			expectedFilenames.removeAll(ignoreFilenames);
 			actualFilenames.removeAll(ignoreFilenames);
-
-			if (!expectedFilenames.equals(actualFilenames)) {
-				return false;
-			}
-			for (String filename : expectedFilenames) {
-				final File expectedEntry = new File(fileExpected, filename);
-				final File actualEntry = new File(fileActual, filename);
-				if (!sameContents(expectedEntry, actualEntry, ignoreFilenames)) {
-					return false;
-				}
-			}
-			return true;
-		}
-		else {
-			if (fileExpected.length() != fileActual.length()) {
-				// Different length: no need to read the files
-				return false;
-			}
-
+
+			if (!expectedFilenames.equals(actualFilenames)) {
+				return false;
+			}
+			for (String filename : expectedFilenames) {
+				final File expectedEntry = new File(fileExpected, filename);
+				final File actualEntry = new File(fileActual, filename);
+				if (!sameContents(expectedEntry, actualEntry, ignoreFilenames)) {
+					return false;
+				}
+			}
+			return true;
+		} else {
+			if (fileExpected.length() != fileActual.length()) {
+				// Different length: no need to read the files
+				return false;
+			}
+
 			try (FileInputStream isExpected = new FileInputStream(fileExpected)) {
 				try (FileInputStream isActual = new FileInputStream(fileActual)) {
 					return sameContents(isExpected, isActual);
 				}
-			}
-		}
-	}
-
-	public static boolean sameContents(InputStream isExpected, InputStream isActual) throws IOException {
-		int chExpected, chActual;
-	
-		do {
-			chExpected = isExpected.read();
-			chActual = isActual.read();
-		}
-		while (chExpected == chActual && chExpected > 0 && chActual > 0);
-	
-		return chExpected == chActual;
+			}
+		}
 	}
-	
+
+	public static boolean sameContents(InputStream isExpected, InputStream isActual) throws IOException {
+		int chExpected, chActual;
+
+		do {
+			chExpected = isExpected.read();
+			chActual = isActual.read();
+		} while (chExpected == chActual && chExpected > 0 && chActual > 0);
+
+		return chExpected == chActual;
+	}
+
 	/**
-	 * WARNIING: Use with caution! Deletes all contents and sub-directories of the specified path.
+	 * WARNIING: Use with caution! Deletes all contents and sub-directories of the
+	 * specified path.
+	 * 
 	 * @param dir The absolute path to the directory.
 	 * @throws IOException
 	 * @since 1.6
@@ -266,31 +349,193 @@
 	public static void deleteDirectory(String dir) throws IOException {
 		Path path = Paths.get(dir);
 		if (Files.exists(path)) {
-			Files.walk(path)
-		        .map(Path::toFile)
-		        .sorted((o1, o2) -> -o1.compareTo(o2))
-		        .forEach(File::delete);
+			Files.walk(path).map(Path::toFile).sorted((o1, o2) -> -o1.compareTo(o2)).forEach(File::delete);
 		}
 	}
-	
+
 	/**
-	 * Reads entire directory recursively, mapping the contents of each file
-	 * as a string to its path.
+	 * Reads entire directory recursively, mapping the contents of each file as a
+	 * string to its path.
 	 * 
 	 * @param dir The root directory.
 	 * @return The contents of each file in the directory and its subdirectories.
 	 * @throws IOException
 	 * @since 1.6
 	 */
-	public static Map<Path, String> readDirectory(String dir) throws IOException {		
+	public static Map<Path, String> readDirectory(String dir) throws IOException {
 		Map<Path, String> contents = new HashMap<>();
-		
-		for (Path path : ((Iterable<Path>)Files.walk(Paths.get(dir))::iterator)) {
+
+		for (Path path : ((Iterable<Path>) Files.walk(Paths.get(dir))::iterator)) {
 			if (Files.isRegularFile(path)) {
 				contents.put(path, new String(Files.readAllBytes(path)));
 			}
 		}
-		
+
 		return contents;
-	}
+	}
+
+	private static File inputStreamToFile(InputStream inputStream, String name) {
+		logger.debug("inputStreamToFile {}", name);
+		OutputStream outputStream = null;
+		String prefix = name;
+		String suffix = "";
+		Path dirStructure = null;
+		
+		// Name might be a path, get the file name, remove it
+		if (name.contains("/")) {
+			dirStructure = Paths.get(tmpdir.toString(), name.substring(0, name.lastIndexOf("/")), "/");
+			dirStructure.toFile().mkdirs();
+			name = name.substring(name.lastIndexOf("/") + 1);
+			logger.debug("inputStreamToFile {}", name);
+		}
+
+		String[] parts = name.split("\\.");
+		if (parts.length == 2) {
+			prefix = parts[0];
+			suffix = "." + parts[1];
+			logger.debug("splitting name and extension: {} - {}", prefix, suffix);
+		}
+		File file = null;
+		try {
+			Path tempFile;
+			try {
+				// tempFile = Files.createTempFile(prefix, sufix);
+				tempFile = createTempFile(dirStructure, prefix, suffix);
+			} catch (IllegalArgumentException e) {
+				logger.error("Error creating temp file: {}-{}", prefix, suffix, e);
+				throw e;
+			}
+			outputStream = new FileOutputStream(tempFile.toFile());
+
+			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();
+//	                }
+//	            }
+//	        });
+			file = tempFile.toFile();
+
+		} catch (IOException e) {
+			logger.error("Unable to create File for resoruce", e);
+			e.printStackTrace();
+		} finally {
+			if (inputStream != null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+			if (outputStream != null) {
+				try {
+					outputStream.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+
+			}
+		}
+
+		return file;
+	}
+
+	static Path createTempDirectory(Path dir, String prefix, FileAttribute<?>... attrs) throws IOException {
+		return create(dir, prefix, null, true, attrs);
+	}
+
+	static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs) throws IOException {
+		return create(dir, prefix, suffix, false, attrs);
+	}
+
+	/**
+	 * Creates a file or directory in in the given given directory (or in the
+	 * temporary directory if dir is {@code null}).
+	 */
+	private static Path create(Path dir, String prefix, String suffix, boolean createDirectory,
+			FileAttribute<?>[] attrs) throws IOException {
+		if (prefix == null)
+			prefix = "";
+		if (suffix == null)
+			suffix = (createDirectory) ? "" : ".tmp";
+		if (dir == null)
+			dir = tmpdir;
+
+		// in POSIX environments use default file and directory permissions
+		// if initial permissions not given by caller.
+		if (isPosix && (dir.getFileSystem() == FileSystems.getDefault())) {
+			if (attrs.length == 0) {
+				// no attributes so use default permissions
+				attrs = new FileAttribute<?>[1];
+				attrs[0] = (createDirectory) ? PosixPermissions.dirPermissions : PosixPermissions.filePermissions;
+			} else {
+				// check if posix permissions given; if not use default
+				boolean hasPermissions = false;
+				for (int i = 0; i < attrs.length; i++) {
+					if (attrs[i].name().equals("posix:permissions")) {
+						hasPermissions = true;
+						break;
+					}
+				}
+				if (!hasPermissions) {
+					FileAttribute<?>[] copy = new FileAttribute<?>[attrs.length + 1];
+					System.arraycopy(attrs, 0, copy, 0, attrs.length);
+					attrs = copy;
+					attrs[attrs.length - 1] = (createDirectory) ? PosixPermissions.dirPermissions
+							: PosixPermissions.filePermissions;
+				}
+			}
+		}
+
+		// loop generating random names until file or directory can be created
+		SecurityManager sm = System.getSecurityManager();
+		//for (;;) {
+			Path f;
+			try {
+				f = generatePath(prefix, suffix, dir);
+			} catch (InvalidPathException e) {
+				// don't reveal temporary directory location
+				if (sm != null)
+					throw new IllegalArgumentException("Invalid prefix or suffix");
+				throw e;
+			}
+			try {
+				if (createDirectory) {
+					return Files.createDirectory(f, attrs);
+				} else {
+					return Files.createFile(f, attrs);
+				}
+			} catch (SecurityException e) {
+				// don't reveal temporary directory location
+				if (dir == tmpdir && sm != null)
+					throw new SecurityException("Unable to create temporary file or directory");
+				throw e;
+			} catch (FileAlreadyExistsException e) {
+				// FIXME Add the file deletion so we dont need this.
+				// FIXME or make each test use a different folder...
+				logger.debug("File found, reusing");
+				return f;
+				
+			}
+		//}
+	}
+
+	private static Path generatePath(String prefix, String suffix, Path dir) {
+		Path name = dir.getFileSystem().getPath(prefix + suffix);
+		// the generated name should be a simple file name
+		if (name.getParent() != null)
+			throw new IllegalArgumentException("Invalid prefix or suffix");
+		return dir.resolve(name);
+	}
 }
diff --git a/plugins/org.eclipse.epsilon.dependencies/META-INF/MANIFEST.MF b/plugins/org.eclipse.epsilon.dependencies/META-INF/MANIFEST.MF
index ec84001..c640bdd 100644
--- a/plugins/org.eclipse.epsilon.dependencies/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epsilon.dependencies/META-INF/MANIFEST.MF
@@ -4,6 +4,7 @@
 Bundle-SymbolicName: org.eclipse.epsilon.dependencies
 Bundle-Version: 1.6.0.qualifier
 Bundle-Vendor: Eclipse Modeling Project
-Require-Bundle: org.antlr.runtime;bundle-version="[3.1.1,3.3.0]";visibility:=reexport
+Require-Bundle: org.antlr.runtime;bundle-version="[3.1.1,3.3.0]";visibility:=reexport,
+ org.slf4j.api;bundle-version="1.7.2";visibility:=reexport
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: org.eclipse.epsilon.dependencies
diff --git a/plugins/org.eclipse.epsilon.emc.emf/src/org/eclipse/epsilon/emc/emf/EmfUtil.java b/plugins/org.eclipse.epsilon.emc.emf/src/org/eclipse/epsilon/emc/emf/EmfUtil.java
index 6495b4e..1e9a8d1 100644
--- a/plugins/org.eclipse.epsilon.emc.emf/src/org/eclipse/epsilon/emc/emf/EmfUtil.java
+++ b/plugins/org.eclipse.epsilon.emc.emf/src/org/eclipse/epsilon/emc/emf/EmfUtil.java
@@ -37,8 +37,12 @@
 import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
 import org.eclipse.epsilon.common.util.OperatingSystem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class EmfUtil {
+	
+	private static Logger logger = LoggerFactory.getLogger(EmfUtil.class);
 		
 	public static EStructuralFeature getEStructuralFeature(EClass eClass, String featureName) {
 		try {
@@ -184,6 +188,7 @@
 				
 				adjustNsAndPrefix(metamodel, p, useUriForResource);
 				registry.put(p.getNsURI(), p);
+				logger.debug("Registered metamodel with URI {}", p.getNsURI());
 				ePackages.add(p);
 			}
 		}
diff --git a/plugins/org.eclipse.epsilon.targetplatform/org.eclipse.epsilon.targetplatform-neon.target b/plugins/org.eclipse.epsilon.targetplatform/org.eclipse.epsilon.targetplatform-neon.target
index 8946de6..d9e88cb 100644
--- a/plugins/org.eclipse.epsilon.targetplatform/org.eclipse.epsilon.targetplatform-neon.target
+++ b/plugins/org.eclipse.epsilon.targetplatform/org.eclipse.epsilon.targetplatform-neon.target
@@ -29,8 +29,6 @@
 <unit id="org.apache.commons.math3.source" version="3.5.0.v20160301-1110"/>
 <unit id="org.dom4j" version="1.6.1.v201312101416"/>
 <unit id="org.dom4j.source" version="1.6.1.v201312101416"/>
-<unit id="org.hamcrest.core" version="1.3.0.v201303031735"/>
-<unit id="org.hamcrest.core.source" version="1.3.0.v201303031735"/>
 <unit id="org.hamcrest.library" version="1.3.0.v201505072020"/>
 <unit id="org.hamcrest.library.source" version="1.3.0.v201505072020"/>
 <unit id="org.slf4j.api" version="1.7.2.v20121108-1250"/>
diff --git a/tests/org.eclipse.epsilon.commons.test/src/org/eclipse/epsilon/commons/util/MultimapTests.java b/tests/org.eclipse.epsilon.commons.test/src/org/eclipse/epsilon/commons/util/MultimapTests.java
index 237709c..454012b 100644
--- a/tests/org.eclipse.epsilon.commons.test/src/org/eclipse/epsilon/commons/util/MultimapTests.java
+++ b/tests/org.eclipse.epsilon.commons.test/src/org/eclipse/epsilon/commons/util/MultimapTests.java
@@ -21,7 +21,6 @@
 import java.util.Arrays;
 import java.util.Collections;
 import org.eclipse.epsilon.common.util.Multimap;
-import org.hamcrest.collection.IsEmptyCollection;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/tests/org.eclipse.epsilon.concordance.core.test/src/org/eclipse/epsilon/concordance/model/UriContentReaderTests.java b/tests/org.eclipse.epsilon.concordance.core.test/src/org/eclipse/epsilon/concordance/model/UriContentReaderTests.java
index 332a3b7..0043b4d 100644
--- a/tests/org.eclipse.epsilon.concordance.core.test/src/org/eclipse/epsilon/concordance/model/UriContentReaderTests.java
+++ b/tests/org.eclipse.epsilon.concordance.core.test/src/org/eclipse/epsilon/concordance/model/UriContentReaderTests.java
@@ -25,7 +25,7 @@
 public class UriContentReaderTests {
 
 	private static final String NEW_LINE = System.getProperty("line.separator");
-	private static final File file = FileUtil.getFile("example.txt", UriContentReaderTests.class);
+	private static final File file = FileUtil.createTempFile("example", ".txt");
 	
 	@BeforeClass
 	public static void setupOnce() throws Exception {
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 a3a18ab..d632870 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
@@ -13,6 +13,7 @@
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.nio.file.Paths;
 import java.util.Collection;
 
 import org.eclipse.epsilon.common.parse.problem.ParseProblem;
@@ -42,7 +43,12 @@
 		NonExistentImport = FileUtil.getFile("NonExistentImport.egl", Engine.class);
 		
 		runtimeExceptionProgram = FileUtil.getFile("RuntimeException.egl", Engine.class);
-		invalidPath             = FileUtil.getFile("Inva*lid.egl",         Engine.class);
+		// FIXME We want a temp file
+		// invalidPath             = FileUtil.getFile("Inva*lid.egl",         Engine.class);
+		invalidPath = Paths.get("Inva*lid.egl").toFile();	
+		// Create imported files
+		FileUtil.getFile("Operations.eol", Engine.class);
+		FileUtil.getFile("Operations.egl", Engine.class);
 	}
 	
 	@Test
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/subtemplates/InvokingSubtemplates.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/subtemplates/InvokingSubtemplates.java
index 25e7228..96c8254 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/subtemplates/InvokingSubtemplates.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/engine/subtemplates/InvokingSubtemplates.java
@@ -40,6 +40,9 @@
 		factory.getTemplateExecutionListeners().add(listener);
 		
 		final File driver = getFile("Driver.egl", InvokingSubtemplates.class);
+		// Load imported files
+		getFile("first/First.egl", InvokingSubtemplates.class);
+		getFile("second/Second.egl", InvokingSubtemplates.class);
 		actual = AcceptanceTestUtil.run(factory, driver, new IModel[]{});
 	}
 	
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/extensibility/Extensibility.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/extensibility/Extensibility.java
index 7ef4d9f..74ae509 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/extensibility/Extensibility.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/extensibility/Extensibility.java
@@ -30,19 +30,23 @@
 	@BeforeClass
 	public static void setUpOnce() {
 		Driver = FileUtil.getFile("Driver.egl", Extensibility.class);
+		// Load imported files
+		FileUtil.getFile("GenerateClasses.egl", Extensibility.class);
+		FileUtil.getFile("GenerateFields.egl", Extensibility.class);
 	}
 	
 	@Test
 	public void testValid() throws Exception {
 		AcceptanceTestUtil.run(initialiseFactory(), Driver, Model.OOInstance);
 		
-		final File generatedFile = FileUtil.getFile("Pet.java", Extensibility.class);
+		final File generatedFile = FileUtil.createTempFile("Pet", ".java");
 		assertEquals(2, CountingTemplate.countFor(generatedFile));
 	}
 
 	private static CountingTemplateFactory initialiseFactory() throws EglRuntimeException {
 		final CountingTemplateFactory factory = new CountingTemplateFactory();
-		factory.setOutputRoot(FileUtil.getDirectoryOf(Extensibility.class).getAbsolutePath());
+		factory.setOutputRoot(FileUtil.createTempDir(Extensibility.class.getSimpleName()).getAbsolutePath());
+		//factory.setOutputRoot(FileUtil.getDirectoryOf(Extensibility.class).getAbsolutePath());
 		return factory;
 	}
 }
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/formatters/Formatters.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/formatters/Formatters.java
index 551c308..566ccb7 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/formatters/Formatters.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/formatters/Formatters.java
@@ -41,6 +41,10 @@
 		
 		TemplateSpecificFormatterGroup         = FileUtil.getFile("TemplateSpecificFormatterGroup.egl", Formatters.class);
 		TemplateSpecificFormatterGroupExpected = FileUtil.getFile("TemplateSpecificFormatterGroup.txt", Formatters.class);
+		
+		// Load imported files
+		FileUtil.getFile("FirstSubtemplate.egl", Formatters.class);
+		FileUtil.getFile("SecondSubtemplate.egl", Formatters.class);
 	}
 	
 	@Test
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/merge/Merge.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/merge/Merge.java
index e1dca48..9a9bd63 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/merge/Merge.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/merge/Merge.java
@@ -64,7 +64,10 @@
 		ExpectedGenerate       = FileUtil.getFile("Expected_generate.txt", Merge.class);
 		ExpectedGenerateAbsent = FileUtil.getFile("Expected_generateAbsent.txt", Merge.class);
 		ExpectedOverwrite      = FileUtil.getFile("Expected_overwrite.txt", Merge.class);
-		
+			
+		// Load imported files
+		FileUtil.getFile("OOClass2JavaClass.egl", Merge.class);
+		FileUtil.getFile("OOClass2JavaClassUnprotected.egl", Merge.class);
 		
 		org.eclipse.epsilon.egl.util.FileUtil.write(PetStore,          ExpectedStore);
 		org.eclipse.epsilon.egl.util.FileUtil.write(PetOverwrite,      ExpectedStore);
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/Output.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/Output.java
index 08f4dbd..9799bea 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/Output.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/Output.java
@@ -27,6 +27,12 @@
 	public static void setUpOnce() {
 		process  = FileUtil.getFile("Process.egl",  Output.class);
 		hierachy = FileUtil.getFile("Hierachy.egl", Output.class);
+		// Create imported files
+		FileUtil.getFile("SubTemplate1.egl", Output.class);
+		FileUtil.getFile("SubTemplate2.egl", Output.class);
+		FileUtil.getFile("SubTemplate3.egl", Output.class);
+		FileUtil.getFile("HierachySubTemplate.egl", Output.class);
+		FileUtil.getFile("HierachySubSubTemplate.egl", Output.class);
 	}
 	
 	@Test
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/lineNumbers/CurrentLineNumber.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/lineNumbers/CurrentLineNumber.java
index 8640284..0c3bb65 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/lineNumbers/CurrentLineNumber.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/output/lineNumbers/CurrentLineNumber.java
@@ -47,6 +47,8 @@
 	
 	
 	private static File getParentTemplate() {
+		// Load imported file
+		FileUtil.getFile("Child.egl",  CurrentLineNumber.class);
 		return FileUtil.getFile("Parent.egl",  CurrentLineNumber.class);
 	}
 
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/traceability/Traceability.java b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/traceability/Traceability.java
index 74f660e..e20f786 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/traceability/Traceability.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.acceptance/src/org/eclipse/epsilon/egl/test/acceptance/traceability/Traceability.java
@@ -32,8 +32,8 @@
 	private static final File program          = FileUtil.getFile("Hierachy.egl", Traceability.class);
 	private static final File subProgram       = FileUtil.getFile("Traceability.egl", Traceability.class);
 	private static final File subSubProgram    = FileUtil.getFile("OOClass2JavaClass.egl", Traceability.class);
-	private static final File programOutput    = FileUtil.getFile("Traceability.txt", Traceability.class);
-	private static final File subProgramOutput = FileUtil.getFile("OO2Java.txt", Traceability.class);
+	private static final File programOutput    = FileUtil.createTempFile("Traceability", ".txt");
+	private static final File subProgramOutput = FileUtil.createTempFile("OO2Java", ".txt");
 	
 	@Before
 	public void setUp() throws IOException {
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglFileGeneratingTemplate.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglFileGeneratingTemplate.java
index a6cf990..0a848f4 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglFileGeneratingTemplate.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglFileGeneratingTemplate.java
@@ -37,15 +37,15 @@
 	
 	@BeforeClass
 	public static void setUpOnce() throws IOException {
-		PROGRAM   = org.eclipse.epsilon.common.util.FileUtil.getFile("Generate.egl",  TestEglFileGeneratingTemplate.class);
-		OUTPUT1   = org.eclipse.epsilon.common.util.FileUtil.getFile("Output1.txt",   TestEglFileGeneratingTemplate.class);
-		OUTPUT2   = org.eclipse.epsilon.common.util.FileUtil.getFile("Output2.txt",   TestEglFileGeneratingTemplate.class);
-		OUTPUT3   = org.eclipse.epsilon.common.util.FileUtil.getFile("Output3.txt",   TestEglFileGeneratingTemplate.class);
-		OUTPUT4   = org.eclipse.epsilon.common.util.FileUtil.getFile("Output4.txt",   TestEglFileGeneratingTemplate.class);
-		OUTPUT5   = org.eclipse.epsilon.common.util.FileUtil.getFile("Output5.txt",   TestEglFileGeneratingTemplate.class);
-		OUTPUT6   = org.eclipse.epsilon.common.util.FileUtil.getFile("Output6.txt",   TestEglFileGeneratingTemplate.class);
-		EXISTING  = org.eclipse.epsilon.common.util.FileUtil.getFile("Existing.txt",  TestEglFileGeneratingTemplate.class);
-		GENERATED = org.eclipse.epsilon.common.util.FileUtil.getFile("Generated.txt", TestEglFileGeneratingTemplate.class);
+		PROGRAM   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Generate", ".egl");
+		OUTPUT1   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Output1", ".txt");
+		OUTPUT2   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Output2", ".txt");
+		OUTPUT3   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Output3", ".txt");
+		OUTPUT4   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Output4", ".txt");
+		OUTPUT5   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Output5", ".txt");
+		OUTPUT6   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Output6", ".txt");
+		EXISTING  = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Existing", ".txt");
+		GENERATED = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Generated", ".txt");
 		
 		if (!EXISTING.exists()) EXISTING.createNewFile();
 	}
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglTemplate.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglTemplate.java
index 5ed221d..0220429 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglTemplate.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestEglTemplate.java
@@ -44,13 +44,13 @@
 	
 	@BeforeClass
 	public static void setUpOnce() {
-		SIMPLE   = org.eclipse.epsilon.common.util.FileUtil.getFile("Simple.egl", TestEglTemplate.class);
-		ABSENT   = org.eclipse.epsilon.common.util.FileUtil.getFile("Absent.egl", TestEglTemplate.class);
+		SIMPLE   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Simple", ".egl");
+		ABSENT   = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Absent", ".egl");
 		
-		POPULATE = org.eclipse.epsilon.common.util.FileUtil.getFile("Populate.egl", TestEglTemplate.class);
+		POPULATE = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Populate", ".egl");
 		
-		MERGE    = org.eclipse.epsilon.common.util.FileUtil.getFile("Merge.egl", TestEglTemplate.class);
-		EXISTING = org.eclipse.epsilon.common.util.FileUtil.getFile("Existing.txt", TestEglTemplate.class);
+		MERGE    = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Merge", ".egl");
+		EXISTING = org.eclipse.epsilon.common.util.FileUtil.createTempFile("Existing", ".txt");
 		
 		if (ABSENT.exists()) ABSENT.delete();
 	}
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestTemplateFactoryModuleAdapter.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestTemplateFactoryModuleAdapter.java
index e30b49e..a9e5c66 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestTemplateFactoryModuleAdapter.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/TestTemplateFactoryModuleAdapter.java
@@ -38,9 +38,9 @@
 	
 	@BeforeClass
 	public static void setUpOnce() throws IOException {	
-		VALID_PATH           = FileUtil.getFile("Valid.txt",          TestTemplateFactoryModuleAdapter.class);
-		INVALID_PATH         = FileUtil.getFile("Invalid.txt",        TestTemplateFactoryModuleAdapter.class);
-		INVALID_RUNTIME_PATH = FileUtil.getFile("InvalidRuntime.txt", TestTemplateFactoryModuleAdapter.class);
+		VALID_PATH           = FileUtil.createTempFile("Valid", ".txt");
+		INVALID_PATH         = FileUtil.createTempFile("Invalid.", "t.xt");
+		INVALID_RUNTIME_PATH = FileUtil.createTempFile("InvalidRuntime", ".txt");
 		
 		org.eclipse.epsilon.egl.util.FileUtil.write(VALID_PATH,           valid);
 		org.eclipse.epsilon.egl.util.FileUtil.write(INVALID_PATH,         invalid);
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLConfigFileReader.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLConfigFileReader.java
index dd5d1d3..3cbbdf5 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLConfigFileReader.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLConfigFileReader.java
@@ -56,30 +56,30 @@
 	
 	@BeforeClass
 	public static void setUpOnce() throws UnsupportedEncodingException {
-		invalidPath      = FileUtil.getPath("In*alid.xml", TestXMLConfigFileReader.class);
-		nonExistentPath  = FileUtil.getPath("Absent.xml", TestXMLConfigFileReader.class);
+		invalidPath      = "In*alid.xml";
+		nonExistentPath  = "Absent.xml";
 		
-		empty          = FileUtil.getPath("Empty.xml", TestXMLConfigFileReader.class);
-		incorrectRoot  = FileUtil.getPath("IncorrectRoot.xml", TestXMLConfigFileReader.class);
+		empty          = FileUtil.getFile("Empty.xml", TestXMLConfigFileReader.class).getPath();
+		incorrectRoot  = FileUtil.getFile("IncorrectRoot.xml", TestXMLConfigFileReader.class).getPath();
 		
-		contentTypesContainingCDATA      = FileUtil.getPath("ContentTypesContainingCDATA.xml", TestXMLConfigFileReader.class);
-		contentTypesContainingWrongChild = FileUtil.getPath("ContentTypesContainingWrongChild.xml", TestXMLConfigFileReader.class);
-		contentTypesExtraAttributes      = FileUtil.getPath("ContentTypesExtraAttributes.xml", TestXMLConfigFileReader.class);
-		emptyContentTypes                = FileUtil.getPath("EmptyContentTypes.xml", TestXMLConfigFileReader.class);
+		contentTypesContainingCDATA      = FileUtil.getFile("ContentTypesContainingCDATA.xml", TestXMLConfigFileReader.class).getPath();
+		contentTypesContainingWrongChild = FileUtil.getFile("ContentTypesContainingWrongChild.xml", TestXMLConfigFileReader.class).getPath();
+		contentTypesExtraAttributes      = FileUtil.getFile("ContentTypesExtraAttributes.xml", TestXMLConfigFileReader.class).getPath();
+		emptyContentTypes                = FileUtil.getFile("EmptyContentTypes.xml", TestXMLConfigFileReader.class).getPath();
 		
-		contentTypeContainingCDATA      = FileUtil.getPath("ContentTypeContainingCDATA.xml", TestXMLConfigFileReader.class);
-		contentTypeContainingWrongChild = FileUtil.getPath("ContentTypeContainingWrongChild.xml", TestXMLConfigFileReader.class);
-		contentTypeExtraAttributes      = FileUtil.getPath("ContentTypeExtraAttributes.xml", TestXMLConfigFileReader.class);
-		emptyContentType                = FileUtil.getPath("EmptyContentType.xml", TestXMLConfigFileReader.class);
-		unnamedContentType              = FileUtil.getPath("UnnamedContentType.xml", TestXMLConfigFileReader.class);
+		contentTypeContainingCDATA      = FileUtil.getFile("ContentTypeContainingCDATA.xml", TestXMLConfigFileReader.class).getPath();
+		contentTypeContainingWrongChild = FileUtil.getFile("ContentTypeContainingWrongChild.xml", TestXMLConfigFileReader.class).getPath();
+		contentTypeExtraAttributes      = FileUtil.getFile("ContentTypeExtraAttributes.xml", TestXMLConfigFileReader.class).getPath();
+		emptyContentType                = FileUtil.getFile("EmptyContentType.xml", TestXMLConfigFileReader.class).getPath();
+		unnamedContentType              = FileUtil.getFile("UnnamedContentType.xml", TestXMLConfigFileReader.class).getPath();
 		
-		commentStyleContainingCDATA = FileUtil.getPath("CommentStyleContainingCDATA.xml", TestXMLConfigFileReader.class);
-		commentStyleEmptyEndsWith   = FileUtil.getPath("CommentStyleEmptyEndsWith.xml", TestXMLConfigFileReader.class);
-		commentStyleEmptyStartsWith = FileUtil.getPath("CommentStyleEmptyStartsWith.xml", TestXMLConfigFileReader.class);
-		commentStyleExtraAttributes = FileUtil.getPath("CommentStyleExtraAttributes.xml", TestXMLConfigFileReader.class);
-		emptyCommentStyle           = FileUtil.getPath("EmptyCommentStyle.xml", TestXMLConfigFileReader.class);
+		commentStyleContainingCDATA = FileUtil.getFile("CommentStyleContainingCDATA.xml", TestXMLConfigFileReader.class).getPath();
+		commentStyleEmptyEndsWith   = FileUtil.getFile("CommentStyleEmptyEndsWith.xml", TestXMLConfigFileReader.class).getPath();
+		commentStyleEmptyStartsWith = FileUtil.getFile("CommentStyleEmptyStartsWith.xml", TestXMLConfigFileReader.class).getPath();
+		commentStyleExtraAttributes = FileUtil.getFile("CommentStyleExtraAttributes.xml", TestXMLConfigFileReader.class).getPath();
+		emptyCommentStyle           = FileUtil.getFile("EmptyCommentStyle.xml", TestXMLConfigFileReader.class).getPath();
 		
-		valid = FileUtil.getPath("Valid.xml", TestXMLConfigFileReader.class);
+		valid = FileUtil.getFile("Valid.xml", TestXMLConfigFileReader.class).getPath();
 	}
 	
 	private Map<String, CompositePartitioner> read(String path) throws FileNotFoundException, PersistenceException {
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLContentTypeRepository.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLContentTypeRepository.java
index 643f8c4..d3c0da8 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLContentTypeRepository.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/config/TestXMLContentTypeRepository.java
@@ -14,6 +14,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.nio.file.Paths;
 
 import org.eclipse.epsilon.egl.EglTemplateFactory;
 import org.eclipse.epsilon.egl.execute.context.EglContext;
@@ -34,9 +35,9 @@
 	
 	@BeforeClass
 	public static void setUpOnce() {
-		invalidPath     = FileUtil.getPath("In*alid.xml", TestXMLContentTypeRepository.class);
-		nonExistentPath = FileUtil.getPath("Absent.xml", TestXMLContentTypeRepository.class);
-		valid           = FileUtil.getPath("Valid.xml", TestXMLContentTypeRepository.class);
+		invalidPath     = Paths.get("Inva*lid.xml").toString();
+		nonExistentPath = "Absent.xml";
+		valid           = FileUtil.getFile("Valid.xml", TestXMLContentTypeRepository.class).getPath();
 	}
 	
 	
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/output/TestWriter.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/output/TestWriter.java
index 0825107..9a3d58c 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/output/TestWriter.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/output/TestWriter.java
@@ -30,10 +30,13 @@
 	
 	@BeforeClass
 	public static void setUpOnce() throws IOException {	
-		VALID_PATH     = FileUtil.getFile("Valid.txt", TestWriter.class);
-		READ_ONLY_PATH = FileUtil.getFile("ReadOnly.txt", TestWriter.class);
+		// FIXME What we actually want is some temp paths
+		//VALID_PATH     = FileUtil.getFile("Valid.txt", TestWriter.class);
+		//READ_ONLY_PATH = FileUtil.getFile("ReadOnly.txt", TestWriter.class);
+		VALID_PATH     = FileUtil.createTempFile("Valid.txt");
+		READ_ONLY_PATH = FileUtil.createTempFile("ReadOnly.txt");
 		
-		READ_ONLY_PATH.createNewFile();
+		// READ_ONLY_PATH.createNewFile();
 		READ_ONLY_PATH.setReadOnly();
 	}
 	
diff --git a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/parse/TestEglLexer.java b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/parse/TestEglLexer.java
index 16184f3..5c1ba37 100644
--- a/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/parse/TestEglLexer.java
+++ b/tests/org.eclipse.epsilon.egl.engine.test.unit/src/org/eclipse/epsilon/egl/parse/TestEglLexer.java
@@ -35,7 +35,9 @@
 	
 	@BeforeClass
 	public static void setUpOnce() throws IOException {
-		TEST_FILE = FileUtil.getFile("Test.txt", TestEglLexer.class);
+		// FIXME We want a temp file
+		//TEST_FILE = FileUtil.getFile("Test.txt", TestEglLexer.class);
+		TEST_FILE = FileUtil.createTempFile("Test.txt");
 		
 		final String program = "[% for(i in Sequence(1..10) { %]" + NEWLINE +
 		                       "i is [%=i%]" + NEWLINE +
diff --git a/tests/org.eclipse.epsilon.egl.traceability.fine.test.acceptance/src/org/eclipse/epsilon/egl/engine/traceability/fine/test/acceptance/EglFineGrainedTraceabilityAcceptanceTest.java b/tests/org.eclipse.epsilon.egl.traceability.fine.test.acceptance/src/org/eclipse/epsilon/egl/engine/traceability/fine/test/acceptance/EglFineGrainedTraceabilityAcceptanceTest.java
index ee7161c..c076bda 100644
--- a/tests/org.eclipse.epsilon.egl.traceability.fine.test.acceptance/src/org/eclipse/epsilon/egl/engine/traceability/fine/test/acceptance/EglFineGrainedTraceabilityAcceptanceTest.java
+++ b/tests/org.eclipse.epsilon.egl.traceability.fine.test.acceptance/src/org/eclipse/epsilon/egl/engine/traceability/fine/test/acceptance/EglFineGrainedTraceabilityAcceptanceTest.java
@@ -41,7 +41,7 @@
 	}
 	
 	protected static String getOutputPath() {
-		return FileUtil.getDirectoryOf(EglFineGrainedTraceabilityAcceptanceTest.class).getAbsolutePath();
+		return FileUtil.createTempDir(EglFineGrainedTraceabilityAcceptanceTest.class.getSimpleName(), true).getAbsolutePath();
 	}
 	
 	protected static boolean deleteOutputFile(String relativePath) {
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 9859bce..768627e 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
@@ -55,7 +55,9 @@
 	public static Collection<EgxRunConfiguration> getScenarios(
 		List<String[]> testInputs,
 		Collection<Supplier<? extends IEgxModule>> moduleGetters) {
-			return getScenarios(EgxRunConfiguration.class, testInputs, moduleGetters, null);
+			// Load thrift-helper-functions.eol
+			FileUtil.getFile("thrift/thrift-helper-functions.eol", EgxAcceptanceTestUtil.class);
+			return getScenarios(EgxRunConfiguration.class, testInputs, moduleGetters, null, EgxAcceptanceTestUtil.class);
 	}
 	
 	public static void deleteOutputDirectories() throws IOException {
diff --git a/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/util/EgxAcceptanceTest.java b/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/util/EgxAcceptanceTest.java
index 49dbede..67aea85 100644
--- a/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/util/EgxAcceptanceTest.java
+++ b/tests/org.eclipse.epsilon.egx.engine.test.acceptance/src/org/eclipse/epsilon/egx/engine/test/acceptance/util/EgxAcceptanceTest.java
@@ -44,8 +44,9 @@
 		for (Template template : templates) {
 			factory.addVirtualTemplate(template.name, template.content);
 		}
-		
-		File egxFile = FileUtil.getFile("base.egx", EgxAcceptanceTest.class);
+		// FIXME We want a temp file or reuse the previous one
+		//File egxFile = FileUtil.getFile("base.egx", EgxAcceptanceTest.class);
+		File egxFile = FileUtil.createTempFile("base",  "egx");
 		factory.setRoot(egxFile.getParentFile().toURI());
 		return egxFile;
 	}
diff --git a/tests/org.eclipse.epsilon.emc.emf.test/src/org/eclipse/epsilon/emc/emf/EmfModelPackageForNameTests.java b/tests/org.eclipse.epsilon.emc.emf.test/src/org/eclipse/epsilon/emc/emf/EmfModelPackageForNameTests.java
index a098e65..4a8666f 100644
--- a/tests/org.eclipse.epsilon.emc.emf.test/src/org/eclipse/epsilon/emc/emf/EmfModelPackageForNameTests.java
+++ b/tests/org.eclipse.epsilon.emc.emf.test/src/org/eclipse/epsilon/emc/emf/EmfModelPackageForNameTests.java
@@ -47,8 +47,8 @@
 		for (EPackage p : metamodel) {
 			EPackage.Registry.INSTANCE.put(p.getNsURI(), p);
 		}
-		
-		final File modelFile = FileUtil.getFile("Test.model", EmfModelPackageForNameTests.class);
+		// final File modelFile = FileUtil.getFile("Test.model", EmfModelPackageForNameTests.class);
+		final File modelFile = FileUtil.createTempFile("Test.model");
 		model = EmfModelFactory.getInstance().loadEmfModel("Test", modelFile, metamodel, AccessMode.WRITE_ONLY);
 	}
 	
diff --git a/tests/org.eclipse.epsilon.emc.hutn.test/src/org/eclipse/epsilon/emc/hutn/HutnModelTests.java b/tests/org.eclipse.epsilon.emc.hutn.test/src/org/eclipse/epsilon/emc/hutn/HutnModelTests.java
index 350d863..725de0b 100644
--- a/tests/org.eclipse.epsilon.emc.hutn.test/src/org/eclipse/epsilon/emc/hutn/HutnModelTests.java
+++ b/tests/org.eclipse.epsilon.emc.hutn.test/src/org/eclipse/epsilon/emc/hutn/HutnModelTests.java
@@ -23,9 +23,11 @@
 import org.junit.Test;
 
 public class HutnModelTests extends HutnTestWithFamiliesMetaModel {
-
-	private static final String MODEL_PATH = FileUtil.getPath("temp.model", HutnModelTests.class);
-
+	
+	// FIXME We want a temp file
+	//private static final String MODEL_PATH = FileUtil.getPath("temp.model", HutnModelTests.class);
+	private static final String MODEL_PATH = FileUtil.createTempFile("temp.model").getAbsolutePath();
+	
 	private static final String hutn = families("Person \"p\" {" +
 	                                            "  name: \"John\" " +
 	                                            "}");
diff --git a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/EolAcceptanceTestSuite.java b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/EolAcceptanceTestSuite.java
index a0db26c..5d5b0ce 100644
--- a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/EolAcceptanceTestSuite.java
+++ b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/EolAcceptanceTestSuite.java
@@ -25,7 +25,7 @@
 import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
-@SuiteClasses({AssignmentTests.class, CollectionPropertyTests.class, ComparisonTests.class, CreateDeleteTests.class, EqualityTests.class, CollectionsTests.class, MathTests.class, StringTests.class, AnnotatedOperationTests.class, IsDefinedTests.class, IterableTests.class,
+@SuiteClasses({AssignmentTests.class,CollectionPropertyTests.class, ComparisonTests.class, CreateDeleteTests.class, EqualityTests.class, CollectionsTests.class, MathTests.class, StringTests.class, AnnotatedOperationTests.class, IsDefinedTests.class, IterableTests.class,
 	           EqualityBecomesAssignmentInStatements.class, ReturnTypeTests.class, BuiltInVariablesTests.class, ModelElementTypeResolutionTests.class, BooleanTests.class, PropertyAccessRecording.class, ScopeTests.class, ContextlessFirstOrderOperationTests.class, DomTests.class,
 	           OperationOrderTests.class, PostfixOperatorTests.class, CompositeAssignmentTests.class, SwitchTests.class, TransactionTests.class, ModelElementConstructorTests.class,
 	           FirstOrderOperationTests.class, ParallelFirstOrderOperationTests.class, ParallelFirstOrderOperationEquivalenceTests.class, FirstOrderOperationAdvancedTests.class, FirstOrderOperationExceptionHandlingTests.class, NestedParallelOperationTests.class,
diff --git a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/EUnitRunner.java b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/EUnitRunner.java
index 46c19f8..ad2fb9a 100644
--- a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/EUnitRunner.java
+++ b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/EUnitRunner.java
@@ -38,9 +38,13 @@
 import org.junit.runner.Runner;
 import org.junit.runner.notification.Failure;
 import org.junit.runner.notification.RunNotifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class EUnitRunner extends Runner {
 	
+	private static Logger logger = LoggerFactory.getLogger(EUnitRunner.class);
+	
 	protected Class<?> clazz;
 	protected EUnitModule module;
 	protected HashMap<String, Description> descriptions = new HashMap<>();
@@ -59,6 +63,7 @@
 		
 		try {
 			eolFile = FileUtil.getFile(clazz.getSimpleName() + ".eol", clazz);
+			logger.debug("Test file is: {}", eolFile);
 			module.parse(eolFile);
 		} catch (Exception e) {
 			return testSuiteDescription;
diff --git a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/ModelManager.java b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/ModelManager.java
index 7327153..76096ad 100644
--- a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/ModelManager.java
+++ b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/eunit/ModelManager.java
@@ -9,8 +9,10 @@
  ******************************************************************************/
 package org.eclipse.epsilon.eol.engine.test.acceptance.eunit;
 
-import static org.eclipse.epsilon.common.util.FileUtil.getPath;
+import static org.eclipse.epsilon.common.util.FileUtil.copyToTemp;
+import static org.eclipse.epsilon.common.util.FileUtil.getFile;
 
+import java.io.File;
 import java.util.List;
 
 import org.eclipse.emf.common.util.URI;
@@ -23,14 +25,16 @@
 import org.eclipse.epsilon.eol.models.IModel;
 
 public class ModelManager {
-
+	
 	private final IEolContext context;
 	
 	public ModelManager(IEolContext context) throws Exception {
 		this.context = context;
-		
-		register(getPath("ecore_lite.ecore", ModelManager.class));
-		register(getPath("fruits.ecore",     ModelManager.class));
+		// We need to copy the metamodels cause EMF cant read from Jars
+		File ecoreLite = getFile("ecore_lite.ecore", ModelManager.class);
+		File fruits = getFile("fruits.ecore",     ModelManager.class);
+		register(copyToTemp(ecoreLite).getAbsolutePath());
+		register(copyToTemp(fruits).getAbsolutePath());
 	}
 	
 	private List<EPackage> register(String metamodelPath) throws Exception {
diff --git a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/util/EolAcceptanceTestUtil.java b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/util/EolAcceptanceTestUtil.java
index c36ab35..8596ec1 100644
--- a/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/util/EolAcceptanceTestUtil.java
+++ b/tests/org.eclipse.epsilon.eol.engine.test.acceptance/src/org/eclipse/epsilon/eol/engine/test/acceptance/util/EolAcceptanceTestUtil.java
@@ -108,17 +108,20 @@
 			Class<C> clazz,
 			List<String[]> testInputs,
 			Collection<Supplier<? extends M>> moduleGetters,
-			Function<String[], Integer> idCalculator) {
+			Function<String[], Integer> idCalculator,
+			Class<?> inputResourceOWner) {
 
 		if (idCalculator == null) idCalculator = EolAcceptanceTestUtil::getScenarioID;
 		
 		List<C> scenarios = new ArrayList<>(moduleGetters.size()*(testInputs.size()+2));
 		
 		for (String[] testInput : testInputs) {
-			Path eolScript = Paths.get(testInput[0]);
-			
-			Path modelFile = Paths.get(testInput[1]);
-			Path metamodelFile = Paths.get(testInput[2]);
+//			Path eolScript = Paths.get(testInput[0]);
+//			Path modelFile = Paths.get(testInput[1]);
+//			Path metamodelFile = Paths.get(testInput[2]);
+			Path eolScript = Paths.get(FileUtil.getFile(testInput[0], inputResourceOWner).toURI());
+			Path modelFile = Paths.get(FileUtil.getFile(testInput[1], inputResourceOWner).toURI());
+			Path metamodelFile = Paths.get(FileUtil.getFile(testInput[2], inputResourceOWner).toURI());
 			
 			for (Supplier<? extends M> moduleGetter : moduleGetters) {
 				scenarios.add(IEolRunConfiguration.Builder(clazz)
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 92d4ae0..8a92b52 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
@@ -18,6 +18,7 @@
 import java.util.function.Function;
 import java.util.function.Supplier;
 import org.eclipse.epsilon.common.util.CollectionUtil;
+import org.eclipse.epsilon.common.util.FileUtil;
 import org.eclipse.epsilon.eol.engine.test.acceptance.util.EolAcceptanceTestUtil;
 import org.eclipse.epsilon.eol.launch.IEolRunConfiguration;
 import org.eclipse.epsilon.evl.*;
@@ -35,7 +36,7 @@
 	
 	public static final String
 		// Core
-		testsBase = getTestBaseDir(EvlAcceptanceTestUtil.class),
+		testsBase = "", // getTestBaseDir(EvlAcceptanceTestUtil.class),
 		metamodelsRoot = testsBase+"metamodels/",
 		scriptsRoot = testsBase+"scripts/",
 		modelsRoot = testsBase+"models/",
@@ -107,7 +108,7 @@
 	public static Collection<EvlRunConfiguration> getScenarios(List<String[]> testInputs, boolean includeTest, Collection<Supplier<? extends IEvlModule>> moduleGetters, Function<String[], Integer> idCalculator) {
 		if (testInputs == null) testInputs = allInputs;
 		if (moduleGetters == null) moduleGetters = modules();
-		Collection<EvlRunConfiguration> scenarios = EolAcceptanceTestUtil.getScenarios(EvlRunConfiguration.class, testInputs, moduleGetters, idCalculator);
+		Collection<EvlRunConfiguration> scenarios = EolAcceptanceTestUtil.getScenarios(EvlRunConfiguration.class, testInputs, moduleGetters, idCalculator, EvlAcceptanceTestUtil.class);
 		
 		if (includeTest) {
 			for (Supplier<? extends IEvlModule> moduleGetter : moduleGetters) {
@@ -150,6 +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);
 		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 1c251be..ba0dd5e 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
@@ -11,6 +11,7 @@
 
 import static org.junit.Assert.*;
 import java.io.File;
+import java.nio.file.FileSystemNotFoundException;
 import java.util.*;
 import java.util.Map.Entry;
 import java.util.function.Supplier;
@@ -42,14 +43,14 @@
 @RunWith(Parameterized.class)
 public class EvlTests {
 
-	private static final IModel
-		TEST_MODEL = setUpModel("test.xml"),
-		OPTIMISED_MODEL = setUpModel("optimised.xml");
+//	private static final IModel
+//		TEST_MODEL = setUpModel("test.xml"),
+//		OPTIMISED_MODEL = setUpModel("optimised.xml");
 	
 	@BeforeClass
 	public static void setUpBeforeClass() throws Exception {
-		TEST_MODEL.load();
-		OPTIMISED_MODEL.load();
+//		TEST_MODEL.load();
+//		OPTIMISED_MODEL.load();
 	}
 	
 	@Parameter
@@ -65,14 +66,23 @@
 	
 	private static IModel setUpModel(String modelName) {
 		PlainXmlModel model = new PlainXmlModel();
-		model.setFile(new File(EvlAcceptanceTestUtil.modelsRoot+modelName));
+		try {
+			File modelFile = FileUtil.getFile(EvlAcceptanceTestUtil.modelsRoot+modelName, EvlAcceptanceTestUtil.class);
+			model.setFile(modelFile);
+		}
+		catch (FileSystemNotFoundException ex) {
+			System.err.println(EvlAcceptanceTestUtil.modelsRoot+modelName);
+		}
+		
 		model.setName(FileUtil.removeExtension(model.getFile().getName()));
 		//model.setCachingEnabled(true);
 		return model;
 	}
 	
 	public static IModel getTestModel(boolean optimised) {
-		return optimised ? OPTIMISED_MODEL : TEST_MODEL;
+		String modelName = optimised ? "optimised.xml" : "test.xml";
+		
+		return setUpModel(modelName);
 	}
 	
 	public static File getTestScript(IEvlModule module) {
@@ -87,7 +97,9 @@
 				Variable.createReadOnlyVariable("blackboard", new HashMap<>())
 			);
 		}
-		return new File(EvlAcceptanceTestUtil.scriptsRoot+scriptName+".evl");
+		// Load utils in case its needed
+		FileUtil.getFile(EvlAcceptanceTestUtil.scriptsRoot + "utils.eol", EvlAcceptanceTestUtil.class);
+		return FileUtil.getFile(EvlAcceptanceTestUtil.scriptsRoot+scriptName + ".evl", EvlAcceptanceTestUtil.class);
 	}
 	
 	public static void loadEVL(IEvlModule module, boolean optimised) throws Exception {
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 c62117e..1a78864 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
@@ -11,10 +11,13 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.io.File;
+
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.epsilon.common.util.FileUtil;
 import org.eclipse.epsilon.emc.emf.InMemoryEmfModel;
 import org.eclipse.epsilon.eol.EolEvaluator;
 import org.eclipse.epsilon.flexmi.FlexmiResource;
@@ -26,7 +29,8 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("flexmi", new FlexmiResourceFactory());
 		resourceSet.getPackageRegistry().put(EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE);
-		FlexmiResource resource = (FlexmiResource) resourceSet.createResource(URI.createURI(FlexmiTestSuite.class.getResource("models/" + filename).toURI().toString()));
+		File resourceFile = FileUtil.getFile("models/" + filename, FlexmiTestSuite.class);
+		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/TemplateTests.java b/tests/org.eclipse.epsilon.flexmi.test/src/org/eclipse/epsilon/flexmi/test/TemplateTests.java
index 2337fe7..5dd07da 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,6 +9,7 @@
 **********************************************************************/
 package org.eclipse.epsilon.flexmi.test;
 
+import org.eclipse.epsilon.common.util.FileUtil;
 import org.eclipse.epsilon.flexmi.FlexmiResource;
 import static org.junit.Assert.*;
 
@@ -21,7 +22,7 @@
 	@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 2f1f413..8aabaab 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
@@ -22,7 +22,9 @@
 
 public class ExternalObjectReferenceRelative extends HutnAcceptanceTest {
 	
-	private static File hutnSource = FileUtil.getFile("temp.hutn", ExternalObjectReferenceRelative.class);
+	// FIXME We want a temp file
+	//private static File hutnSource = FileUtil.getFile("temp.hutn", ExternalObjectReferenceRelative.class);
+	private static File hutnSource = FileUtil.createTempFile("temp.hutn");
 	
 	@BeforeClass
 	public static void executeHutn() throws Exception {
diff --git a/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF b/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF
index 11375ef..613183e 100644
--- a/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.epsilon.test.dependencies/META-INF/MANIFEST.MF
@@ -4,15 +4,16 @@
 Bundle-Name: Epsilon Test Dependencies (Incubation)
 Bundle-SymbolicName: org.eclipse.epsilon.test.dependencies
 Bundle-Version: 1.6.0.qualifier
-Require-Bundle: org.hamcrest.library;bundle-version="1.3.0";visibility:=reexport,
+Require-Bundle: org.slf4j.api;bundle-version="1.7.2";visibility:=reexport,
+ org.hamcrest.library;bundle-version="1.3.0";visibility:=reexport,
+ org.mockito_1.8.4;visibility:=reexport,
+ org.easymock_2.4;visibility:=reexport,
  org.junit;bundle-version="4.12.0";visibility:=reexport,
  org.eclipse.epsilon.dependencies;visibility:=reexport,
  org.eclipse.epsilon.eol.engine;visibility:=reexport,
  org.eclipse.epsilon.eunit.engine;visibility:=reexport,
  org.eclipse.epsilon.emc.emf;visibility:=reexport,
  org.eclipse.epsilon.hutn.engine;visibility:=reexport,
- org.mockito_1.8.4;visibility:=reexport,
- org.easymock_2.4;visibility:=reexport,
  org.eclipse.epsilon.emc.plainxml;visibility:=reexport
 Bundle-Vendor: Eclipse.org
 Export-Package: org.antlr.gunit,
diff --git a/tests/org.eclipse.epsilon.test.unit/.classpath b/tests/org.eclipse.epsilon.test.unit/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<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="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.epsilon.test.unit/.gitignore b/tests/org.eclipse.epsilon.test.unit/.gitignore
new file mode 100644
index 0000000..2941331
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/.gitignore
@@ -0,0 +1,2 @@
+bin/
+target/
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.test.unit/EPL-2.0.html b/tests/org.eclipse.epsilon.test.unit/EPL-2.0.html
new file mode 100644
index 0000000..637a181
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/EPL-2.0.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>Eclipse Public License - Version 2.0</title>
+    <style type="text/css">
+      body {
+        margin: 1.5em 3em;
+      }
+      h1{
+        font-size:1.5em;
+      }
+      h2{
+        font-size:1em;
+        margin-bottom:0.5em;
+        margin-top:1em;
+      }
+      p {
+        margin-top:  0.5em;
+        margin-bottom: 0.5em;
+      }
+      ul, ol{
+        list-style-type:none;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Eclipse Public License - v 2.0</h1>
+    <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+      PUBLIC LICENSE (&ldquo;AGREEMENT&rdquo;). ANY USE, REPRODUCTION OR DISTRIBUTION
+      OF THE PROGRAM CONSTITUTES RECIPIENT&#039;S ACCEPTANCE OF THIS AGREEMENT.
+    </p>
+    <h2 id="definitions">1. DEFINITIONS</h2>
+    <p>&ldquo;Contribution&rdquo; means:</p>
+    <ul>
+      <li>a) in the case of the initial Contributor, the initial content
+        Distributed under this Agreement, and
+      </li>
+      <li>
+        b) in the case of each subsequent Contributor:
+        <ul>
+          <li>i) changes to the Program, and</li>
+          <li>ii) additions to the Program;</li>
+        </ul>
+        where such changes and/or additions to the Program originate from
+        and are Distributed by that particular Contributor. A Contribution
+        &ldquo;originates&rdquo; from a Contributor if it was added to the Program by such
+        Contributor itself or anyone acting on such Contributor&#039;s behalf.
+        Contributions do not include changes or additions to the Program that
+        are not Modified Works.
+      </li>
+    </ul>
+    <p>&ldquo;Contributor&rdquo; means any person or entity that Distributes the Program.</p>
+    <p>&ldquo;Licensed Patents&rdquo; mean patent claims licensable by a Contributor which
+      are necessarily infringed by the use or sale of its Contribution alone
+      or when combined with the Program.
+    </p>
+    <p>&ldquo;Program&rdquo; means the Contributions Distributed in accordance with this
+      Agreement.
+    </p>
+    <p>&ldquo;Recipient&rdquo; means anyone who receives the Program under this Agreement
+      or any Secondary License (as applicable), including Contributors.
+    </p>
+    <p>&ldquo;Derivative Works&rdquo; shall mean any work, whether in Source Code or other
+      form, that is based on (or derived from) the Program and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship.
+    </p>
+    <p>&ldquo;Modified Works&rdquo; shall mean any work in Source Code or other form that
+      results from an addition to, deletion from, or modification of the
+      contents of the Program, including, for purposes of clarity any new file
+      in Source Code form that contains any contents of the Program. Modified
+      Works shall not include works that contain only declarations, interfaces,
+      types, classes, structures, or files of the Program solely in each case
+      in order to link to, bind by name, or subclass the Program or Modified
+      Works thereof.
+    </p>
+    <p>&ldquo;Distribute&rdquo; means the acts of a) distributing or b) making available
+      in any manner that enables the transfer of a copy.
+    </p>
+    <p>&ldquo;Source Code&rdquo; means the form of a Program preferred for making
+      modifications, including but not limited to software source code,
+      documentation source, and configuration files.
+    </p>
+    <p>&ldquo;Secondary License&rdquo; means either the GNU General Public License,
+      Version 2.0, or any later versions of that license, including any
+      exceptions or additional permissions as identified by the initial
+      Contributor.
+    </p>
+    <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
+    <ul>
+      <li>a) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free copyright
+        license to reproduce, prepare Derivative Works of, publicly display,
+        publicly perform, Distribute and sublicense the Contribution of such
+        Contributor, if any, and such Derivative Works.
+      </li>
+      <li>b) Subject to the terms of this Agreement, each Contributor hereby
+        grants Recipient a non-exclusive, worldwide, royalty-free patent
+        license under Licensed Patents to make, use, sell, offer to sell,
+        import and otherwise transfer the Contribution of such Contributor,
+        if any, in Source Code or other form. This patent license shall
+        apply to the combination of the Contribution and the Program if,
+        at the time the Contribution is added by the Contributor, such
+        addition of the Contribution causes such combination to be covered
+        by the Licensed Patents. The patent license shall not apply to any
+        other combinations which include the Contribution. No hardware per
+        se is licensed hereunder.
+      </li>
+      <li>c) Recipient understands that although each Contributor grants the
+        licenses to its Contributions set forth herein, no assurances are
+        provided by any Contributor that the Program does not infringe the
+        patent or other intellectual property rights of any other entity.
+        Each Contributor disclaims any liability to Recipient for claims
+        brought by any other entity based on infringement of intellectual
+        property rights or otherwise. As a condition to exercising the rights
+        and licenses granted hereunder, each Recipient hereby assumes sole
+        responsibility to secure any other intellectual property rights needed,
+        if any. For example, if a third party patent license is required to
+        allow Recipient to Distribute the Program, it is Recipient&#039;s
+        responsibility to acquire that license before distributing the Program.
+      </li>
+      <li>d) Each Contributor represents that to its knowledge it has sufficient
+        copyright rights in its Contribution, if any, to grant the copyright
+        license set forth in this Agreement.
+      </li>
+      <li>e) Notwithstanding the terms of any Secondary License, no Contributor
+        makes additional grants to any Recipient (other than those set forth
+        in this Agreement) as a result of such Recipient&#039;s receipt of the
+        Program under the terms of a Secondary License (if permitted under
+        the terms of Section 3).
+      </li>
+    </ul>
+    <h2 id="requirements">3. REQUIREMENTS</h2>
+    <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
+    <ul>
+      <li>a) the Program must also be made available as Source Code, in
+        accordance with section 3.2, and the Contributor must accompany
+        the Program with a statement that the Source Code for the Program
+        is available under this Agreement, and informs Recipients how to
+        obtain it in a reasonable manner on or through a medium customarily
+        used for software exchange; and
+      </li>
+      <li>
+        b) the Contributor may Distribute the Program under a license
+        different than this Agreement, provided that such license:
+        <ul>
+          <li>i) effectively disclaims on behalf of all other Contributors all
+            warranties and conditions, express and implied, including warranties
+            or conditions of title and non-infringement, and implied warranties
+            or conditions of merchantability and fitness for a particular purpose;
+          </li>
+          <li>ii) effectively excludes on behalf of all other Contributors all
+            liability for damages, including direct, indirect, special, incidental
+            and consequential damages, such as lost profits;
+          </li>
+          <li>iii) does not attempt to limit or alter the recipients&#039; rights in the
+            Source Code under section 3.2; and
+          </li>
+          <li>iv) requires any subsequent distribution of the Program by any party
+            to be under a license that satisfies the requirements of this section 3.
+          </li>
+        </ul>
+      </li>
+    </ul>
+    <p>3.2 When the Program is Distributed as Source Code:</p>
+    <ul>
+      <li>a) it must be made available under this Agreement, or if the Program (i)
+        is combined with other material in a separate file or files made available
+        under a Secondary License, and (ii) the initial Contributor attached to
+        the Source Code the notice described in Exhibit A of this Agreement,
+        then the Program may be made available under the terms of such
+        Secondary Licenses, and
+      </li>
+      <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
+    </ul>
+    <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
+      attribution notices, disclaimers of warranty, or limitations of liability
+      (&lsquo;notices&rsquo;) contained within the Program from any copy of the Program which
+      they Distribute, provided that Contributors may add their own appropriate
+      notices.
+    </p>
+    <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
+    <p>Commercial distributors of software may accept certain responsibilities
+      with respect to end users, business partners and the like. While this
+      license is intended to facilitate the commercial use of the Program, the
+      Contributor who includes the Program in a commercial product offering should
+      do so in a manner which does not create potential liability for other
+      Contributors. Therefore, if a Contributor includes the Program in a
+      commercial product offering, such Contributor (&ldquo;Commercial Contributor&rdquo;)
+      hereby agrees to defend and indemnify every other Contributor
+      (&ldquo;Indemnified Contributor&rdquo;) against any losses, damages and costs
+      (collectively &ldquo;Losses&rdquo;) arising from claims, lawsuits and other legal actions
+      brought by a third party against the Indemnified Contributor to the extent
+      caused by the acts or omissions of such Commercial Contributor in connection
+      with its distribution of the Program in a commercial product offering.
+      The obligations in this section do not apply to any claims or Losses relating
+      to any actual or alleged intellectual property infringement. In order to
+      qualify, an Indemnified Contributor must: a) promptly notify the
+      Commercial Contributor in writing of such claim, and b) allow the Commercial
+      Contributor to control, and cooperate with the Commercial Contributor in,
+      the defense and any related settlement negotiations. The Indemnified
+      Contributor may participate in any such claim at its own expense.
+    </p>
+    <p>For example, a Contributor might include the Program
+      in a commercial product offering, Product X. That Contributor is then a
+      Commercial Contributor. If that Commercial Contributor then makes performance
+      claims, or offers warranties related to Product X, those performance claims
+      and warranties are such Commercial Contributor&#039;s responsibility alone.
+      Under this section, the Commercial Contributor would have to defend claims
+      against the other Contributors related to those performance claims and
+      warranties, and if a court requires any other Contributor to pay any damages
+      as a result, the Commercial Contributor must pay those damages.
+    </p>
+    <h2 id="warranty">5. NO WARRANTY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN &ldquo;AS IS&rdquo; BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+      WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
+      solely responsible for determining the appropriateness of using and
+      distributing the Program and assumes all risks associated with its
+      exercise of rights under this Agreement, including but not limited to the
+      risks and costs of program errors, compliance with applicable laws, damage
+      to or loss of data, programs or equipment, and unavailability or
+      interruption of operations.
+    </p>
+    <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
+    <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
+      BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
+      LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+      OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+      LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+      OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+      GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+    </p>
+    <h2 id="general">7. GENERAL</h2>
+    <p>If any provision of this Agreement is invalid or unenforceable under
+      applicable law, it shall not affect the validity or enforceability of the
+      remainder of the terms of this Agreement, and without further action by the
+      parties hereto, such provision shall be reformed to the minimum extent
+      necessary to make such provision valid and enforceable.
+    </p>
+    <p>If Recipient institutes patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+      (excluding combinations of the Program with other software or hardware)
+      infringes such Recipient&#039;s patent(s), then such Recipient&#039;s rights granted
+      under Section 2(b) shall terminate as of the date such litigation is filed.
+    </p>
+    <p>All Recipient&#039;s rights under this Agreement shall terminate if it fails to
+      comply with any of the material terms or conditions of this Agreement and
+      does not cure such failure in a reasonable period of time after becoming
+      aware of such noncompliance. If all Recipient&#039;s rights under this Agreement
+      terminate, Recipient agrees to cease use and distribution of the Program
+      as soon as reasonably practicable. However, Recipient&#039;s obligations under
+      this Agreement and any licenses granted by Recipient relating to the
+      Program shall continue and survive.
+    </p>
+    <p>Everyone is permitted to copy and distribute copies of this Agreement,
+      but in order to avoid inconsistency the Agreement is copyrighted and may
+      only be modified in the following manner. The Agreement Steward reserves
+      the right to publish new versions (including revisions) of this Agreement
+      from time to time. No one other than the Agreement Steward has the right
+      to modify this Agreement. The Eclipse Foundation is the initial Agreement
+      Steward. The Eclipse Foundation may assign the responsibility to serve as
+      the Agreement Steward to a suitable separate entity. Each new version of
+      the Agreement will be given a distinguishing version number. The Program
+      (including Contributions) may always be Distributed subject to the version
+      of the Agreement under which it was received. In addition, after a new
+      version of the Agreement is published, Contributor may elect to Distribute
+      the Program (including its Contributions) under the new version.
+    </p>
+    <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+      receives no rights or licenses to the intellectual property of any
+      Contributor under this Agreement, whether expressly, by implication,
+      estoppel or otherwise. All rights in the Program not expressly granted
+      under this Agreement are reserved. Nothing in this Agreement is intended
+      to be enforceable by any entity that is not a Contributor or Recipient.
+      No third-party beneficiary rights are created under this Agreement.
+    </p>
+    <h2 id="exhibit-a">Exhibit A &ndash; Form of Secondary Licenses Notice</h2>
+    <p>&ldquo;This Source Code may also be made available under the following 
+    	Secondary Licenses when the conditions for such availability set forth 
+    	in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+    	version(s), and exceptions or additional permissions here}.&rdquo;
+    </p>
+    <blockquote>
+      <p>Simply including a copy of this Agreement, including this Exhibit A
+        is not sufficient to license the Source Code under Secondary Licenses.
+      </p>
+      <p>If it is not possible or desirable to put the notice in a particular file,
+        then You may include the notice in a location (such as a LICENSE file in a
+        relevant directory) where a recipient would be likely to look for
+        such a notice.
+      </p>
+      <p>You may add additional accurate notices of copyright ownership.</p>
+    </blockquote>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.test.unit/EpsilonPluggedInTestSuite.launch b/tests/org.eclipse.epsilon.test.unit/EpsilonPluggedInTestSuite.launch
new file mode 100644
index 0000000..7be5dfe
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/EpsilonPluggedInTestSuite.launch
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.epsilon.test/src/org/eclipse/epsilon/test/EpsilonPluggedInTestSuite.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"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.epsilon.test.EpsilonPluggedInTestSuite"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.epsilon.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx4g"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.emf.cdo.server.product"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.epsilon.test.unit/META-INF/MANIFEST.MF b/tests/org.eclipse.epsilon.test.unit/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fa7dd19
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/META-INF/MANIFEST.MF
@@ -0,0 +1,54 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Epsilon Test Suite (Incubation)
+Bundle-SymbolicName: org.eclipse.epsilon.test.unit
+Bundle-Version: 1.6.0.qualifier
+Bundle-Vendor: Eclipse.org
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: org.eclipse.epsilon.test
+Require-Bundle: org.eclipse.epsilon.test.dependencies,
+ org.eclipse.epsilon.eol.engine.test.acceptance,
+ org.eclipse.epsilon.egl.engine.test,
+ org.eclipse.epsilon.egx.engine.test.acceptance,
+ org.eclipse.epsilon.egl.dt.test,
+ org.eclipse.epsilon.hutn.test,
+ org.eclipse.epsilon.hutn.unparser.test.unit,
+ org.eclipse.epsilon.hutn.xmi.test,
+ org.eclipse.epsilon.emc.emf.test,
+ org.eclipse.epsilon.flock.engine.test,
+ org.eclipse.epsilon.eol.engine.test.unit,
+ org.eclipse.epsilon.common.dt.test,
+ org.eclipse.epsilon.concordance.test,
+ org.eclipse.epsilon.etl.engine.test.acceptance,
+ org.eclipse.epsilon.emc.hutn.test,
+ org.eclipse.epsilon.emc.plainxml.test,
+ org.eclipse.epsilon.common.test,
+ org.eclipse.epsilon.workflow.test,
+ org.eclipse.epsilon.evl.engine.test.acceptance,
+ org.eclipse.epsilon.ecl.engine.test.acceptance,
+ org.eclipse.epsilon.eml.engine.test.acceptance,
+ org.eclipse.epsilon.ewl.engine.test.acceptance,
+ org.eclipse.epsilon.emc.bibtex.test,
+ org.eclipse.epsilon.egl.dt.traceability.editor.tests,
+ org.eclipse.epsilon.egl.traceability.fine.test.acceptance,
+ org.eclipse.epsilon.egl.traceability.fine.test.unit,
+ org.eclipse.epsilon.emc.graphml.tests;bundle-version="1.0.0",
+ org.eclipse.epsilon.epl.engine.test.acceptance,
+ org.eclipse.epsilon.emc.spreadsheets.test;bundle-version="1.5.0",
+ org.eclipse.epsilon.workflow;bundle-version="1.5.0",
+ org.eclipse.epsilon.workflow.csv;bundle-version="1.5.0",
+ org.eclipse.epsilon.workflow.emf;bundle-version="1.5.0",
+ org.eclipse.epsilon.workflow.eugenia;bundle-version="1.5.0",
+ org.eclipse.epsilon.eunit.dt;bundle-version="1.5.0",
+ org.eclipse.epsilon.eunit.dt.cmp.emf;bundle-version="1.5.0",
+ org.eclipse.epsilon.eunit.dt.diff.emf;bundle-version="1.5.0",
+ org.eclipse.epsilon.eunit.dt.diff.files;bundle-version="1.5.0",
+ org.eclipse.epsilon.concordance.clients;bundle-version="1.5.0",
+ org.eclipse.epsilon.concordance.core;bundle-version="1.5.0",
+ org.eclipse.epsilon.concordance.core.hashing;bundle-version="1.5.0",
+ org.eclipse.emf.emfatic.core;bundle-version="0.8.0",
+ org.eclipse.gmf.bridge,
+ org.eclipse.gmf.bridge.trace;bundle-version="1.3.0",
+ org.eclipse.epsilon.emc.csv.test,
+ org.eclipse.epsilon.flexmi.test,
+ org.eclipse.epsilon.emc.simulink.test
diff --git a/tests/org.eclipse.epsilon.test.unit/build.properties b/tests/org.eclipse.epsilon.test.unit/build.properties
new file mode 100644
index 0000000..9d822f5
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               EPL-2.0.html,\
+               .,\
+               logback.xml
+jre.compilation.profile = JavaSE-1.8
diff --git a/tests/org.eclipse.epsilon.test.unit/foo.ecore b/tests/org.eclipse.epsilon.test.unit/foo.ecore
new file mode 100644
index 0000000..19fc3c2
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/foo.ecore
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hutnConfig:Configuration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:hutnConfig="http://www.eclipse.org/gmt/epsilon/hutnConfig">
+  <rules xsi:type="hutnConfig:DefaultValueRule" classifier="Family" attribute="nuclear"
+      defaultValue="4"/>
+</hutnConfig:Configuration>
diff --git a/tests/org.eclipse.epsilon.test.unit/logback.xml b/tests/org.eclipse.epsilon.test.unit/logback.xml
new file mode 100644
index 0000000..7d2c519
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/logback.xml
@@ -0,0 +1,11 @@
+<configuration>
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
+    </encoder>
+  </appender>
+
+  <root level="DEBUG">
+    <appender-ref ref="STDOUT" />
+  </root>
+</configuration>
\ No newline at end of file
diff --git a/tests/org.eclipse.epsilon.test.unit/pom.xml b/tests/org.eclipse.epsilon.test.unit/pom.xml
new file mode 100644
index 0000000..e679881
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.epsilon</groupId>
+		<artifactId>tests</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+
+	<groupId>org.eclipse.epsilon</groupId>
+	<artifactId>org.eclipse.epsilon.test.unit</artifactId>
+	<version>1.6.0-SNAPSHOT</version>
+	<packaging>eclipse-test-plugin</packaging>
+	<dependencies>
+		<dependency>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+			<version>1.0.13</version>
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest-library</artifactId>
+			<version>1.3</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+
+	</dependencies>
+	<build>
+		<testSourceDirectory>${project.basedir}/src</testSourceDirectory>
+		<testOutputDirectory>${project.basedir}/target/classes</testOutputDirectory>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<version>3.0.0-M3</version>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>3.0.0-M3</version>
+				<configuration>
+					<includes>
+						<include>EpsilonTestSuite.java</include>
+					</includes>
+					<!-->argLine>-Xmx4096m</argLine -->
+				</configuration>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/tests/org.eclipse.epsilon.test.unit/src/org/eclipse/epsilon/test/EpsilonTestSuite.java b/tests/org.eclipse.epsilon.test.unit/src/org/eclipse/epsilon/test/EpsilonTestSuite.java
new file mode 100644
index 0000000..9460591
--- /dev/null
+++ b/tests/org.eclipse.epsilon.test.unit/src/org/eclipse/epsilon/test/EpsilonTestSuite.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2009-2011 The University of York.
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * Contributors:
+ *     Louis Rose - initial API and implementation
+ *     Antonio Garcia-Dominguez - added WorkflowTestSuite
+ ******************************************************************************
+ *
+ * $Id$
+ */
+package org.eclipse.epsilon.test;
+
+import org.eclipse.epsilon.commons.test.CommonsTestSuite;
+import org.eclipse.epsilon.concordance.test.ConcordanceTestSuite;
+import org.eclipse.epsilon.ecl.engine.test.acceptance.EclAcceptanceTestSuite;
+import org.eclipse.epsilon.egl.dt.test.EglDevelopmentToolsTestSuite;
+import org.eclipse.epsilon.egl.dt.traceability.editor.EglTraceabilityEditorTestSuite;
+import org.eclipse.epsilon.egl.engine.traceability.fine.test.acceptance.EglFineGrainedTraceabilityAcceptanceTestSuite;
+import org.eclipse.epsilon.egl.engine.traceability.fine.test.unit.EglFineGrainedTraceabilityUnitTestSuite;
+import org.eclipse.epsilon.egl.test.EglTestSuite;
+import org.eclipse.epsilon.egx.engine.test.acceptance.EgxAcceptanceTestSuite;
+import org.eclipse.epsilon.emc.bibtex.BibtexModelTestSuite;
+import org.eclipse.epsilon.emc.csv.test.CsvModelTestSuite;
+import org.eclipse.epsilon.emc.emf.test.EmfTestSuite;
+import org.eclipse.epsilon.emc.graphml.tests.GraphmlTestSuite;
+import org.eclipse.epsilon.emc.hutn.test.HutnEmcDriverTestSuite;
+import org.eclipse.epsilon.emc.plainxml.test.PlainXmlTestSuite;
+import org.eclipse.epsilon.emc.simulink.test.suite.SimulinkTestSuite;
+import org.eclipse.epsilon.emc.spreadsheets.test.SpreadsheetDriverTestSuite;
+import org.eclipse.epsilon.eml.engine.test.acceptance.EmlAcceptanceTestSuite;
+import org.eclipse.epsilon.eol.engine.test.acceptance.EolAcceptanceTestSuite;
+import org.eclipse.epsilon.eol.test.unit.EolUnitTestSuite;
+import org.eclipse.epsilon.epl.engine.test.acceptance.EplAcceptanceTestSuite;
+import org.eclipse.epsilon.etl.engine.test.acceptance.EtlAcceptanceTestSuite;
+import org.eclipse.epsilon.evl.engine.test.acceptance.EvlAcceptanceTestSuite;
+import org.eclipse.epsilon.ewl.engine.test.acceptance.EwlAcceptanceTestSuite;
+import org.eclipse.epsilon.flexmi.test.FlexmiTestSuite;
+import org.eclipse.epsilon.flock.test.EpsilonFlockEngineTestSuite;
+import org.eclipse.epsilon.hutn.test.HutnTestSuite;
+import org.eclipse.epsilon.hutn.unparser.HutnUnparserUnitTestSuite;
+import org.eclipse.epsilon.hutn.xmi.test.HutnXmiTestSuite;
+import org.eclipse.epsilon.workflow.test.WorkflowTestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+import junit.framework.JUnit4TestAdapter;
+import junit.framework.Test;
+
+@RunWith(Suite.class)
+@SuiteClasses({CommonsTestSuite.class,
+               EolUnitTestSuite.class, 
+               EolAcceptanceTestSuite.class,
+               EvlAcceptanceTestSuite.class,
+               EtlAcceptanceTestSuite.class,
+               EclAcceptanceTestSuite.class,
+               EmlAcceptanceTestSuite.class,
+               EwlAcceptanceTestSuite.class,
+               EglTestSuite.class,
+               EplAcceptanceTestSuite.class,
+               EglDevelopmentToolsTestSuite.class,
+               EglTraceabilityEditorTestSuite.class,
+               EglFineGrainedTraceabilityAcceptanceTestSuite.class,
+               EglFineGrainedTraceabilityUnitTestSuite.class,
+               EgxAcceptanceTestSuite.class,
+               HutnTestSuite.class,
+               HutnUnparserUnitTestSuite.class,
+               HutnXmiTestSuite.class,
+               HutnEmcDriverTestSuite.class,
+               PlainXmlTestSuite.class,
+               BibtexModelTestSuite.class,
+               EpsilonFlockEngineTestSuite.class,
+               ConcordanceTestSuite.class,
+               WorkflowTestSuite.class,
+               GraphmlTestSuite.class,
+               EmfTestSuite.class,
+               SimulinkTestSuite.class,
+               SpreadsheetDriverTestSuite.class,
+               CsvModelTestSuite.class,
+               FlexmiTestSuite.class
+               })
+
+public class EpsilonTestSuite {
+	public static Test suite() {
+		return new JUnit4TestAdapter(EpsilonTestSuite.class);
+	}
+}
diff --git a/tests/pom.xml b/tests/pom.xml
index 1de936c..7678e19 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -68,7 +68,8 @@
     <module>org.eclipse.epsilon.hutn.xmi.test.dependencies</module>
     <module>org.eclipse.epsilon.hutn.xmi.test.integration</module>
     <module>org.eclipse.epsilon.hutn.xmi.test.unit</module>
-    <module>org.eclipse.epsilon.test</module>
+    <module>org.eclipse.epsilon.test</module>  
+    <module>org.eclipse.epsilon.test.unit</module>
     <module>org.eclipse.epsilon.test.dependencies</module>
     <module>org.eclipse.epsilon.test.fixtures.hutn</module>
     <module>org.eclipse.epsilon.workflow.test</module>
