diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabClassLoader.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabClassLoader.java
new file mode 100644
index 0000000..93e106c
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabClassLoader.java
@@ -0,0 +1,58 @@
+package org.eclipse.epsilon.emc.simulink.engine;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+public class MatlabClassLoader {
+
+	private static MatlabClassLoader instance;
+	
+	private String engineJarPath;
+	private URLClassLoader urlClassLoader;
+
+	private MatlabClassLoader(String engineJarPath) {
+		this.engineJarPath = engineJarPath;
+
+		try {
+			URL engineJarPathURL = new File(this.engineJarPath).toURI().toURL();
+			ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
+			if (systemClassLoader instanceof URLClassLoader) {
+				urlClassLoader = (URLClassLoader) systemClassLoader;
+				Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
+				method.setAccessible(true);
+				method.invoke(urlClassLoader, engineJarPathURL);
+			} else {
+				urlClassLoader = new URLClassLoader(new URL[] {engineJarPathURL}, systemClassLoader);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static MatlabClassLoader init(String engineJarPath) {
+		if (instance == null || !engineJarPath.equalsIgnoreCase(instance.getEngineJarPath())) {
+			instance = new MatlabClassLoader(engineJarPath);
+		}
+		
+		return instance;
+	}
+
+	public static MatlabClassLoader getInstance() {
+		return instance;
+	}
+
+	public synchronized Class<?> loadMatlabClass(String classURI) throws ClassNotFoundException {
+		return Class.forName(classURI, true, urlClassLoader);
+		
+//		return urlClassLoader.loadClass(classURI);
+	}
+	
+	public String getEngineJarPath() {
+		return engineJarPath;
+	}
+	
+}
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEngine.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEngine.java
index 8adfb9e..4b0afed 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEngine.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEngine.java
@@ -74,6 +74,7 @@
 	
 	/* ERRORS AND LOGS */
 	private static final String ERROR_INVALID_PARAMETER_NUMBER = "%d parameters were expected but %d were provided";
+
 	
 	/* VARIABLES */
 	protected Object engine;
@@ -130,7 +131,6 @@
 	
 	public void setProject(String project) throws MatlabException {
 		this.project = project;
-		//System.out.println(this.project);
 		if (project.equals("current")) {
 			eval("currentProject;");
 		} else {			
@@ -143,7 +143,6 @@
 	
 	public void addModel(IGenericSimulinkModel model) {
 		this.models.add(model);
-		//System.out.println("adding model " + model.getName());
 	}
 	
 	
@@ -153,12 +152,10 @@
 	
 	public void release(IGenericSimulinkModel model) throws MatlabRuntimeException {
 		if (project != null && !models.isEmpty()) {
-			//System.out.println("Removing model");
 			models.remove(model);
 		}
 		if (models.isEmpty()) {
 			this.project = null;
-			//System.out.println("Releasing to pool");
 			MatlabEnginePool.getInstance().release(this);
 		}
 	}
@@ -232,7 +229,7 @@
 	protected static Class<?> getMatlabClass() {
 		if (engine_class == null) {
 			try {
-				engine_class = ClassLoader.getSystemClassLoader().loadClass(MATLAB_ENGINE_CLASS);
+				engine_class = MatlabClassLoader.getInstance().loadMatlabClass(MATLAB_ENGINE_CLASS);
 			} catch (ClassNotFoundException e) {
 				e.printStackTrace();
 			}
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEnginePool.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEnginePool.java
index b29af7b..653bff5 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEnginePool.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/engine/MatlabEnginePool.java
@@ -11,9 +11,6 @@
 
 import java.io.File;
 import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
@@ -30,7 +27,8 @@
 	private static final String SYS_PATHS = "sys_paths";
 
 	protected static MatlabEnginePool instance;
-	protected static URLClassLoader systemURLClassLoader;
+	protected static MatlabClassLoader matlabClassLoader;
+	
 	protected static String libraryPath;
 	protected static String engineJarPath;
 
@@ -38,9 +36,9 @@
 	protected Class<?> matlabEngineClass;
 	
 	private MatlabEnginePool(String libraryPath, String engineJarPath) throws MatlabRuntimeException {
-
 		MatlabEnginePool.libraryPath = libraryPath;
 		MatlabEnginePool.engineJarPath = engineJarPath;
+		
 		try {
 			final String SEP = System.getProperty("path.separator");
             System.setProperty(JAVA_LIBRARY_PATH, libraryPath + SEP + System.getProperty(JAVA_LIBRARY_PATH));
@@ -49,15 +47,7 @@
 			sysPathsField.setAccessible(true);
 			sysPathsField.set(null, null);
 
-			URL engineJarPathURL = new File(engineJarPath).toURI().toURL();
-
-			systemURLClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
-
-			Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
-			method.setAccessible(true);
-			method.invoke(systemURLClassLoader, engineJarPathURL);
-
-			matlabEngineClass = systemURLClassLoader.loadClass(MATLAB_ENGINE_CLASS);
+			matlabEngineClass = matlabClassLoader.loadMatlabClass(MATLAB_ENGINE_CLASS);
 			MatlabEngine.setEngineClass(matlabEngineClass);
 		}
 		catch (Exception ex) {
@@ -72,6 +62,8 @@
 	public static MatlabEnginePool getInstance(String libraryPath, String engineJarPath) throws MatlabRuntimeException {
 		if (instance == null || (instance != null && (!libraryPath.equalsIgnoreCase(instance.getLibraryPath())
 				|| !engineJarPath.equalsIgnoreCase(instance.getEngineJarPath())))) {
+			
+			matlabClassLoader = MatlabClassLoader.init(engineJarPath);
 			instance = new MatlabEnginePool(libraryPath, engineJarPath);
 		}
 		return instance;
@@ -79,6 +71,7 @@
 	
 	public static MatlabEnginePool getInstance() throws MatlabRuntimeException {
 		if (instance == null) {
+			matlabClassLoader = MatlabClassLoader.init(engineJarPath);
 			instance = new MatlabEnginePool();
 		}
 		return instance;
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/exception/MatlabException.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/exception/MatlabException.java
index 52bfc98..2f65fcd 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/exception/MatlabException.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/exception/MatlabException.java
@@ -12,6 +12,7 @@
 import java.lang.reflect.InvocationTargetException;
 
 import org.eclipse.epsilon.common.module.ModuleElement;
+import org.eclipse.epsilon.emc.simulink.engine.MatlabClassLoader;
 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
 
 public class MatlabException extends Exception {
@@ -45,7 +46,7 @@
 	
 	@SuppressWarnings("unused")
 	private static Class<?> load(String className) throws ClassNotFoundException {
-		return ClassLoader.getSystemClassLoader().loadClass(className);
+		return MatlabClassLoader.getInstance().loadMatlabClass(className);
 	}
 	
 	public static Boolean isEngineException(Throwable e) {
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/CellStr.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/CellStr.java
index d2d2c3f..cb18698 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/CellStr.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/CellStr.java
@@ -12,6 +12,8 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+
+import org.eclipse.epsilon.emc.simulink.engine.MatlabClassLoader;
 import org.eclipse.epsilon.emc.simulink.engine.MatlabEngine;
 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
 
@@ -31,7 +33,7 @@
 	protected static Class<?> getMatlabClass() {
 		if (cell_str_class == null) {
 			try {
-				cell_str_class = ClassLoader.getSystemClassLoader().loadClass(CELL_STR_MATLAB_CLASS);
+				cell_str_class = MatlabClassLoader.getInstance().loadMatlabClass(CELL_STR_MATLAB_CLASS);
 			} catch (ClassNotFoundException e) {
 				e.printStackTrace();
 			}
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Complex.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Complex.java
index 5430925..b05b72a 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Complex.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Complex.java
@@ -11,6 +11,8 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.epsilon.emc.simulink.engine.MatlabClassLoader;
 import org.eclipse.epsilon.emc.simulink.engine.MatlabEngine;
 import org.eclipse.epsilon.emc.simulink.util.ReflectionLocalUtil;
 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
@@ -27,7 +29,7 @@
 	private static Class<?> getMatlabClass() {
 		if (complex_class == null) {
 			try {
-				complex_class = ClassLoader.getSystemClassLoader().loadClass(COMPLEX_MATLAB_CLASS);
+				complex_class = MatlabClassLoader.getInstance().loadMatlabClass(COMPLEX_MATLAB_CLASS);
 			} catch (ClassNotFoundException e) {
 				e.printStackTrace();
 			}
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/HandleObject.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/HandleObject.java
index 160dd94..6136d6e 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/HandleObject.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/HandleObject.java
@@ -9,6 +9,8 @@
 **********************************************************************/
 package org.eclipse.epsilon.emc.simulink.types;
 
+import org.eclipse.epsilon.emc.simulink.engine.MatlabClassLoader;
+
 public class HandleObject{
 
 	private static final String HANDLE_OBJECT_MATLAB_CLASS = "com.mathworks.matlab.types.HandleObject";
@@ -23,7 +25,7 @@
 	public static Class<?> getMatlabClass() {
 		if (handle_object_class == null) {
 			try {
-				handle_object_class = ClassLoader.getSystemClassLoader().loadClass(HANDLE_OBJECT_MATLAB_CLASS);
+				handle_object_class = MatlabClassLoader.getInstance().loadMatlabClass(HANDLE_OBJECT_MATLAB_CLASS);
 			} catch (ClassNotFoundException e) {
 				e.printStackTrace();
 			}
diff --git a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Struct.java b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Struct.java
index 37004fc..81a3457 100644
--- a/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Struct.java
+++ b/plugins/org.eclipse.epsilon.emc.simulink.common/src/org/eclipse/epsilon/emc/simulink/types/Struct.java
@@ -19,6 +19,7 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import org.eclipse.epsilon.emc.simulink.engine.MatlabClassLoader;
 import org.eclipse.epsilon.emc.simulink.engine.MatlabEngine;
 import org.eclipse.epsilon.emc.simulink.util.MatlabEngineUtil;
 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
@@ -51,7 +52,7 @@
 	protected static Class<?> getMatlabClass() {
 		if (struct_class == null) {
 			try {
-				struct_class = ClassLoader.getSystemClassLoader().loadClass(STRUCT_MATLAB_CLASS);
+				struct_class = MatlabClassLoader.getInstance().loadMatlabClass(STRUCT_MATLAB_CLASS);
 			} catch (ClassNotFoundException e) {
 				e.printStackTrace();
 			}
diff --git a/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/AllTests.java b/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/AllTests.java
index 9774694..4848241 100644
--- a/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/AllTests.java
+++ b/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/AllTests.java
@@ -15,7 +15,7 @@
 
 @RunWith(ConditionalMatlabSuite.class)
 @SuiteClasses({ CRUDTests.class, ExampleTests.class, InheritanceTests.class,
-		OperationTests.class, SimulateTests.class, PropertyTests.class, OperatorTest.class,
+		OperationTests.class, /*SimulateTests.class,*/ PropertyTests.class, OperatorTest.class,
 		SimulinkPrimitiveTypeAndStatementTest.class, MatlabEngineTests.class, LoadModelTest.class })
 public class AllTests {
 
diff --git a/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/SimulateTests.java b/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/SimulateTests.java
index f9e6b2e..b427482 100644
--- a/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/SimulateTests.java
+++ b/tests/org.eclipse.epsilon.emc.simulink.test/src/org/eclipse/epsilon/emc/simulink/test/unit/SimulateTests.java
@@ -12,6 +12,11 @@
 import org.eclipse.epsilon.emc.simulink.test.util.AbstractSimulinkTest;
 import org.junit.Test;
 
+/**
+ * These tests no longer work in recent versions of Matlab (e.g. 2021b).
+ * As there are no known use-cases of using the driver to run simulations
+ * or relevant documentation, these tests have been commented out in AllTests
+*/
 public class SimulateTests extends AbstractSimulinkTest {
 
 	@Test
