diff --git a/src/purescala/Z3Solver.scala b/src/purescala/Z3Solver.scala
index 9c0292deb8fbd5e36bc9c40d4b42e3ca7b250ef9..eb25332cc46f52973855e91f045448e6c2cb6441 100644
--- a/src/purescala/Z3Solver.scala
+++ b/src/purescala/Z3Solver.scala
@@ -14,6 +14,9 @@ class Z3Solver(reporter: Reporter) extends Solver(reporter) {
   // this is fixed
   private val z3cfg = new Z3Config()
   z3cfg.setParamValue("MODEL", "true")
+  z3cfg.setParamValue("SOFT_TIMEOUT", "5000") // this one doesn't work apparently
+  z3cfg.setParamValue("TYPE_CHECK", "true")
+  z3cfg.setParamValue("WELL_SORTED_CHECK", "true")
   Z3Global.toggleWarningMessages(true)
 
   // we restart Z3 for each new program
@@ -151,6 +154,7 @@ class Z3Solver(reporter: Reporter) extends Solver(reporter) {
 
             val fOfT: Expr = FunctionInvocation(funDef, List(CaseClass(ccd, subids.map(Variable(_)))))
             val toConvert = Equals(fOfT, rhs)
+            //println(toConvert)
             val initialMap: Map[String,Z3AST] = Map((subids.map(_.uniqueName) zip boundVars):_*) + (pid.uniqueName -> matcher) + (funDef.args(0).id.uniqueName -> matcher)
             toZ3Formula(z3, toConvert, initialMap) match {
               case Some(axiomTree) => {
@@ -159,7 +163,7 @@ class Z3Solver(reporter: Reporter) extends Solver(reporter) {
                 } else {
                   z3.mkForAll(0, List(pattern), nameTypePairs, axiomTree)
                 }
-                // z3.printAST(toAssert)
+                //z3.printAST(toAssert)
                 z3.assertCnstr(toAssert)
               }
               case None => {
@@ -169,32 +173,32 @@ class Z3Solver(reporter: Reporter) extends Solver(reporter) {
             }
           })
           case _ => {
-            // Newly introduced variables should in fact
-            // probably also be universally quantified.
-            val argSorts: Seq[Z3Sort] = funDef.args.map(vd => typeToSort(vd.getType))
-            val boundVars = argSorts.zipWithIndex.map(p => z3.mkBound(p._2, p._1))
-            val pattern: Z3Pattern = z3.mkPattern(functionDefToDef(funDef)(boundVars: _*))
-            val nameTypePairs = argSorts.map(s => (z3.mkIntSymbol(nextIntForSymbol()), s))
-            val fOfX: Expr = FunctionInvocation(funDef, funDef.args.map(_.toVariable))
-            val toConvert: Expr = if(funDef.hasPrecondition) {
-              Implies(funDef.precondition.get, Equals(fOfX, funDef.body.get))
-            } else {
-              Equals(fOfX, funDef.body.get)
-            }
-            val finalToConvert = Analysis.rewriteSimplePatternMatching(toConvert)
-            val initialMap: Map[String,Z3AST] = Map((funDef.args.map(_.id.uniqueName) zip boundVars):_*)
-            toZ3Formula(z3, finalToConvert, initialMap) match {
-              case Some(axiomTree) => {
-                val quantifiedAxiom = z3.mkForAll(0, List(pattern), nameTypePairs, axiomTree)
-                //z3.printAST(quantifiedAxiom)
-                z3.assertCnstr(quantifiedAxiom)
-              }
-              case None => {
-                reporter.warning("Could not generate forall axiom for " + funDef.id.name)
-                reporter.warning(toConvert)
-                reporter.warning(finalToConvert)
-              }
-            }
+            // // Newly introduced variables should in fact
+            // // probably also be universally quantified.
+            // val argSorts: Seq[Z3Sort] = funDef.args.map(vd => typeToSort(vd.getType))
+            // val boundVars = argSorts.zipWithIndex.map(p => z3.mkBound(p._2, p._1))
+            // val pattern: Z3Pattern = z3.mkPattern(functionDefToDef(funDef)(boundVars: _*))
+            // val nameTypePairs = argSorts.map(s => (z3.mkIntSymbol(nextIntForSymbol()), s))
+            // val fOfX: Expr = FunctionInvocation(funDef, funDef.args.map(_.toVariable))
+            // val toConvert: Expr = if(funDef.hasPrecondition) {
+            //   Implies(funDef.precondition.get, Equals(fOfX, funDef.body.get))
+            // } else {
+            //   Equals(fOfX, funDef.body.get)
+            // }
+            // val finalToConvert = Analysis.rewriteSimplePatternMatching(toConvert)
+            // val initialMap: Map[String,Z3AST] = Map((funDef.args.map(_.id.uniqueName) zip boundVars):_*)
+            // toZ3Formula(z3, finalToConvert, initialMap) match {
+            //   case Some(axiomTree) => {
+            //     val quantifiedAxiom = z3.mkForAll(0, List(pattern), nameTypePairs, axiomTree)
+            //     //z3.printAST(quantifiedAxiom)
+            //     z3.assertCnstr(quantifiedAxiom)
+            //   }
+            //   case None => {
+            //     reporter.warning("Could not generate forall axiom for " + funDef.id.name)
+            //     reporter.warning(toConvert)
+            //     reporter.warning(finalToConvert)
+            //   }
+            // }
           }
         }
       }