diff --git a/plugins/org.eclipse.epsilon.egl.engine/src/org/eclipse/epsilon/egl/EglTemplateFactoryModuleAdapter.java b/plugins/org.eclipse.epsilon.egl.engine/src/org/eclipse/epsilon/egl/EglTemplateFactoryModuleAdapter.java
index 4db7d72..1e9dd04 100644
--- a/plugins/org.eclipse.epsilon.egl.engine/src/org/eclipse/epsilon/egl/EglTemplateFactoryModuleAdapter.java
+++ b/plugins/org.eclipse.epsilon.egl.engine/src/org/eclipse/epsilon/egl/EglTemplateFactoryModuleAdapter.java
@@ -140,7 +140,7 @@
 
 	@Override
 	public IEglContext getContext() {
-		return current.getModule().getContext();
+		return factory.getContext();//current.getModule().getContext();
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/concurrent/experimental/EvlModuleParallelRandom.java b/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/concurrent/experimental/EvlModuleParallelRandom.java
index 8693375..ea5f07d 100644
--- a/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/concurrent/experimental/EvlModuleParallelRandom.java
+++ b/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/concurrent/experimental/EvlModuleParallelRandom.java
@@ -38,7 +38,7 @@
 		IEvlContextParallel context = getContext();
 		
 		List<ConstraintAtom> originalJobs = profileExecutionStage("get initial jobs",
-			() -> ConstraintAtom.getConstraintJobs(context)
+			() -> ConstraintAtom.getConstraintJobs(this)
 		);
 
 		profileExecutionStage("shuffle jobs", () -> Collections.shuffle(originalJobs));
diff --git a/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintAtom.java b/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintAtom.java
index f3eb8a3..8ff0e2f 100644
--- a/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintAtom.java
+++ b/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintAtom.java
@@ -13,6 +13,7 @@
 import java.util.Collection;
 import java.util.Optional;
 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.evl.IEvlModule;
 import org.eclipse.epsilon.evl.dom.Constraint;
 import org.eclipse.epsilon.evl.dom.ConstraintContext;
 import org.eclipse.epsilon.evl.execute.UnsatisfiedConstraint;
@@ -38,10 +39,10 @@
 		return unit.execute(element, context);
 	}
 	
-	public static ArrayList<ConstraintAtom> getConstraintJobs(IEvlContext context) throws EolRuntimeException {
+	public static ArrayList<ConstraintAtom> getConstraintJobs(IEvlModule module) throws EolRuntimeException {
 		ArrayList<ConstraintAtom> atoms = new ArrayList<>();
-		
-		for (ConstraintContext constraintContext : context.getModule().getConstraintContexts()) {
+		IEvlContext context = module.getContext();
+		for (ConstraintContext constraintContext : module.getConstraintContexts()) {
 			Collection<?> allOfKind = constraintContext.getAllOfSourceKind(context);
 			for (Object element : allOfKind) {
 				if (constraintContext.shouldBeChecked(element, context)) {
diff --git a/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintContextAtom.java b/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintContextAtom.java
index 2196cb7..6424a67 100644
--- a/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintContextAtom.java
+++ b/plugins/org.eclipse.epsilon.evl.engine/src/org/eclipse/epsilon/evl/execute/concurrent/ConstraintContextAtom.java
@@ -13,6 +13,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
+import org.eclipse.epsilon.evl.IEvlModule;
 import org.eclipse.epsilon.evl.dom.Constraint;
 import org.eclipse.epsilon.evl.dom.ConstraintContext;
 import org.eclipse.epsilon.evl.execute.UnsatisfiedConstraint;
@@ -55,11 +56,11 @@
 		else return Collections.emptyList();
 	}
 	
-	public static ArrayList<ConstraintContextAtom> getContextJobs(IEvlContext context) throws EolRuntimeException {
+	public static ArrayList<ConstraintContextAtom> getContextJobs(IEvlModule module) throws EolRuntimeException {
 		ArrayList<ConstraintContextAtom> atoms = new ArrayList<>();
 		
-		for (ConstraintContext constraintContext : context.getModule().getConstraintContexts()) {
-			Collection<?> allOfKind = constraintContext.getAllOfSourceKind(context);
+		for (ConstraintContext constraintContext : module.getConstraintContexts()) {
+			Collection<?> allOfKind = constraintContext.getAllOfSourceKind(module.getContext());
 			atoms.ensureCapacity(atoms.size()+allOfKind.size());
 			for (Object element : allOfKind) {
 				atoms.add(new ConstraintContextAtom(constraintContext, element));
