diff --git a/src/main/scala/leon/synthesis/Rules.scala b/src/main/scala/leon/synthesis/Rules.scala
index cbc6f2974f90e66ac65ce2e6ddf8da185bc1a28b..986feb80be957fa9ef3e8525b915f49feac04882 100644
--- a/src/main/scala/leon/synthesis/Rules.scala
+++ b/src/main/scala/leon/synthesis/Rules.scala
@@ -164,8 +164,6 @@ class UnusedInput(synth: Synthesizer) extends Rule("UnusedInput", synth) {
 }
 
 class UnconstrainedOutput(synth: Synthesizer) extends Rule("Unconstr.Output", synth) {
-  def defaultValueFor(id: Identifier): Expr = IntLiteral(0)
-
   def isApplicable(task: Task): List[DecomposedTask] = {
     val p = task.problem
     val unconstr = p.xs.toSet -- variablesOf(p.phi)
@@ -174,7 +172,14 @@ class UnconstrainedOutput(synth: Synthesizer) extends Rule("Unconstr.Output", sy
       val sub = p.copy(xs = p.xs.filterNot(unconstr))
 
       val onSuccess: List[Solution] => Solution = { 
-        case List(s) => Solution(s.pre, LetTuple(sub.xs, s.term, Tuple(p.xs.map(id => if (unconstr(id)) defaultValueFor(id) else Variable(id) ))))
+        case List(s) => 
+          synth.solveSAT(And(unconstr.map(id => Equals(Variable(id), Variable(id))).toSeq)) match {
+            case (Some(true), model) =>
+              Solution(s.pre, LetTuple(sub.xs, s.term, Tuple(p.xs.map(id => if (unconstr(id)) model(id) else Variable(id)))))
+            case _ =>
+              Solution.none
+          }
+        
         case _ => Solution.none
       }
 
diff --git a/testcases/Choose.scala b/testcases/Choose.scala
index 85b6225d727b8016b3fc9e2c30dc4c98c59b46f2..bf9ef06fa146a5afffca2acc62fafddc42d7cea3 100644
--- a/testcases/Choose.scala
+++ b/testcases/Choose.scala
@@ -13,6 +13,8 @@ object ChooseTest {
   def c4(a: Int): (Int, Int, Int, Int) = choose{ (x1: Int, x2: Int, x3: Int, x4: Int) => x1 > a && x2 > a }
   def c5(a: Int): (Int, Int, Int, Int, Int) = choose{ (x1: Int, x2: Int, x3: Int, x4: Int, x5: Int) => x1 > a && x2 > a }
 
+  def z0(a: Int): (Int, Int, List) = choose{ (x1: Int, x2: Int, x3: List) => x1 > a && x2 > a }
+
 
   sealed abstract class List
   case class Nil() extends List