More work on executors

diff --git a/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/EvlExecutor.java b/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/EvlExecutor.java
index bca0bfa..7f6a20e 100644
--- a/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/EvlExecutor.java
+++ b/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/EvlExecutor.java
@@ -9,6 +9,7 @@
 **********************************************************************/
 package org.eclipse.epsilon.executors.evl;
 
+import java.io.PrintWriter;
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
@@ -24,9 +25,8 @@
  */
 public interface EvlExecutor extends EpsilonLanguageExecutor<Collection<UnsatisfiedConstraint>>  {
     
-
     /**
-     * Send the unsatisfied constraints to the log
+     * Send the unsatisfied constraints to the log, using the implementation logger
      */
     void logUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints);
     
@@ -34,6 +34,12 @@
      * Pretty print the unsatisfied constraints
      */
     void printUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints);
+    
+    /**
+     * Pretty print the unsatisfied constraints using the specified printer
+     */
+    void printUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints, PrintWriter writer);
+    
 
 	List<Constraint> getConstraints();
 
diff --git a/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/SimpleEvlExecutor.java b/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/SimpleEvlExecutor.java
index 59f889a..629845b 100644
--- a/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/SimpleEvlExecutor.java
+++ b/plugins/org.eclipse.epsilon.executors/src/org/eclipse/epsilon/executors/evl/SimpleEvlExecutor.java
@@ -10,6 +10,7 @@
 package org.eclipse.epsilon.executors.evl;
 
 import java.io.File;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
@@ -59,12 +60,10 @@
 		this(false, 0, evlFixer);
     }
 	
-	
 	public SimpleEvlExecutor(boolean useParallel) {
 		this(useParallel, 1, new CommandLineFixer());
     }
     
-	  
 	public SimpleEvlExecutor(boolean useParallel, int parallelism, IEvlFixer evlFixer) {
 		this(useParallel ? new EvlModuleParallelElements(parallelism) : new EvlModule());
 		module.setUnsatisfiedConstraintFixer(evlFixer);
@@ -174,9 +173,14 @@
 			logger.info("All constraints have been satisfied.");
 		}
 	}
-
+	
 	@Override
 	public void printUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints) {
+		printUnsatisfied(unsatisfiedConstraints, new PrintWriter(System.out, true));	
+	}
+
+	@Override
+	public void printUnsatisfied(Collection<UnsatisfiedConstraint> unsatisfiedConstraints, PrintWriter writer) {
 		int numUnsatisfied = unsatisfiedConstraints.size();
     	if (numUnsatisfied > 0) {
     		// Separate critiques from constraints
@@ -196,24 +200,31 @@
     		int tabDivision = maxWidth.orElse("        ").length();
 			String msg = "Unsatisfied Contraints";
 			String division = new String(new char[msg.length()]).replace("\0", "=");
-			System.out.println(msg);
-			System.out.println(division);
+			writer.println();
+			writer.println(division);
+			writer.println(msg);
+			writer.println(division);
 			for (UnsatisfiedConstraint uc : consraints) {
-				System.out.format("\u16D6 %-"+tabDivision+"s %s%n", uc.getConstraint().getName(), uc.getMessage());
+				writer.format("\u16D6 %-"+tabDivision+"s %s%n", uc.getConstraint().getName(), uc.getMessage());
 			}
+			writer.println(division);
 			msg = "Unsatisfied Critiques";
 			division = new String(new char[msg.length()]).replace("\0", "=");
-			System.out.println(msg);
-			System.out.println(division);
+			writer.println();
+			writer.println(division);
+			writer.println(msg);
+			writer.println(division);
 			for (UnsatisfiedConstraint uc : consraints) {
-				System.out.format("\u16B9 %-"+tabDivision+"s %s%n", uc.getConstraint().getName(), uc.getMessage());
+				writer.format("\u16B9 %-"+tabDivision+"s %s%n", uc.getConstraint().getName(), uc.getMessage());
 			}
 		}
 		else {
 			String msg = "All constraints have been satisfied";
 			String division = new String(new char[msg.length()]).replace("\0", "=");
-			System.out.println(msg);
-			System.out.println(division);
+			writer.println();
+			writer.println(division);
+			writer.println(msg);
+			writer.println(division);
 		}
 	}