diff --git a/src/main/scala/leon/evaluators/Evaluator.scala b/src/main/scala/leon/evaluators/Evaluator.scala
index 41cff9a053040d9ce4254a679f711d95760ccb0f..c924e8bb5c7b188580dffdd1e4a34038bf20a383 100644
--- a/src/main/scala/leon/evaluators/Evaluator.scala
+++ b/src/main/scala/leon/evaluators/Evaluator.scala
@@ -51,7 +51,7 @@ trait DeterministicEvaluator extends Evaluator {
   final def evalEnvExpr(expr: Expr, mapping: Iterable[(Identifier, Expr)]) : EvaluationResult = {
     if(mapping.forall{ case (key, value) => purescala.ExprOps.isValue(value) }) {
       eval(expr, mapping.toMap)
-    } else (evalEnv(mapping) match {
+    } else (_evalEnv(mapping) match {
       case Left(m) => eval(expr, m)
       case Right(errorMessage) => 
         val m = mapping.filter{ case (k, v) => purescala.ExprOps.isValue(v) }.toMap
@@ -62,9 +62,19 @@ trait DeterministicEvaluator extends Evaluator {
     })
   }
   
+  /** Returns an evaluated environment. If it fails, removes all non-values from the environment. */
+  def evalEnv(mapping: Iterable[(Identifier, Expr)]): Map[Identifier, Value] = {
+    if(mapping.forall{ case (key, value) => purescala.ExprOps.isValue(value) }) {
+      mapping.toMap
+    } else (_evalEnv(mapping) match {
+      case Left(m) => m
+      case Right(msg) => mapping.filter(x => purescala.ExprOps.isValue(x._2)).toMap
+    })
+  }
+  
   /** From a not yet well evaluated context with dependencies between variables, returns a head where all exprs are values (as a Left())
    *  If this does not succeed, it provides an error message as Right()*/
-  private def evalEnv(mapping: Iterable[(Identifier, Expr)]): Either[Map[Identifier, Value], String] = {
+  private def _evalEnv(mapping: Iterable[(Identifier, Expr)]): Either[Map[Identifier, Value], String] = {
     var f= mapping.toSet
     var mBuilder = collection.mutable.ListBuffer[(Identifier, Value)]()
     var changed = true
diff --git a/src/test/scala/leon/test/helpers/WithLikelyEq.scala b/src/test/scala/leon/test/helpers/WithLikelyEq.scala
index 21a97ec48ff9a5926d3e2ebfe50eeac044ab8716..f121f4553809fd7ae5b9e93d15bb1b5b7d3b2de0 100644
--- a/src/test/scala/leon/test/helpers/WithLikelyEq.scala
+++ b/src/test/scala/leon/test/helpers/WithLikelyEq.scala
@@ -44,9 +44,9 @@ trait WithLikelyEq {
       val allValues = freeVars.map(id => values.get(id).map(Seq(_)).getOrElse(typesValues(id.getType)))
 
       cartesianProduct(allValues).foreach { vs =>
-        val m = (freeVars zip vs).toMap
+        val m = evaluator.evalEnv(freeVars zip vs)
         val doTest = pre.map { p =>
-          evaluator.evalEnvExpr(p, m).result match {
+          evaluator.eval(p, m).result match {
             case Some(BooleanLiteral(b)) => b
             case _ => fail("Precondition is not a boolean expression")
           }