diff --git a/src/funcheck/CodeExtraction.scala b/src/funcheck/CodeExtraction.scala
index aee9044bbe68572b9c7fb74e26cd08e60bd6c05e..cd63fc299555c81cb3e88b223b3667b47aaa72ed 100644
--- a/src/funcheck/CodeExtraction.scala
+++ b/src/funcheck/CodeExtraction.scala
@@ -90,6 +90,8 @@ trait CodeExtraction extends Extractors {
       var reqCont: Option[Expr] = None
       var ensCont: Option[Expr] = None
 
+      val ps = params.map(p => VarDecl(p.name.toString, st2ps(p.tpt)))
+
       realBody match {
         case ExEnsuredExpression(body2, resId, contract) => {
           varSubsts(resId) = (() => ResultVariable())
@@ -109,7 +111,7 @@ trait CodeExtraction extends Extractors {
         case _ => ;
       }
       
-      FunDef(name, st2ps(tpt), Nil, s2ps(realBody), reqCont, ensCont)
+      FunDef(name, st2ps(tpt), ps, s2ps(realBody), reqCont, ensCont)
     }
 
     // THE EXTRACTION CODE STARTS HERE
@@ -153,7 +155,7 @@ trait CodeExtraction extends Extractors {
     def rec(tr: Tree): Expr = tr match {
       case ExInt32Literal(v) => IntLiteral(v)
       case ExBooleanLiteral(v) => BooleanLiteral(v)
-      case ExIntIdentifier(id) => varSubsts.get(id) match {
+      case ExIdentifier(id,tpt) => varSubsts.get(id) match {
         case Some(fun) => fun()
         case None => Variable(id)
       }
@@ -181,6 +183,7 @@ trait CodeExtraction extends Extractors {
   private def scalaType2PureScala(unit: CompilationUnit, silent: Boolean)(tree: Tree): funcheck.purescala.TypeTrees.TypeTree = {
     tree match {
       case tt: TypeTree if tt.tpe == IntClass.tpe => Int32Type
+      case tt: TypeTree if tt.tpe == BooleanClass.tpe => BooleanType
 
       case _ => {
         if(!silent) {
@@ -190,30 +193,4 @@ trait CodeExtraction extends Extractors {
       }
     }
   }
-
-//  def findContracts(tree: Tree): Unit = tree match {
-//    case DefDef(/*mods*/ _, name, /*tparams*/ _, /*vparamss*/ _, /*tpt*/ _, body) => {
-//      var realBody = body
-//      var reqCont: Option[Tree] = None
-//      var ensCont: Option[Function] = None
-//
-//      body match {
-//        case EnsuredExpression(body2, contract) => realBody = body2; ensCont = Some(contract)
-//        case _ => ;
-//      }
-//
-//      realBody match {
-//        case RequiredExpression(body3, contract) => realBody = body3; reqCont = Some(contract)
-//        case _ => ;
-//      }
-//
-//      println("In: " + name) 
-//      println("  Requires clause: " + reqCont)
-//      println("  Ensures  clause: " + ensCont)
-//      println("  Body:            " + realBody)
-//    }
-//
-//    case _ => ;
-//  }
-
 }
diff --git a/src/funcheck/Extractors.scala b/src/funcheck/Extractors.scala
index 0e0d200dcb80fb7c069f5a25d5b2cabbff7ad863..81e17eaf196b5df21ccf9a5c4e487eb5dda63a26 100644
--- a/src/funcheck/Extractors.scala
+++ b/src/funcheck/Extractors.scala
@@ -120,6 +120,13 @@ trait Extractors {
       }
     }
 
+    object ExIdentifier {
+      def unapply(tree: Tree): Option[(String,Tree)] = tree match {
+        case i: Ident => Some((i.symbol.name.toString, i))
+        case _ => None
+      }
+    }
+
     object ExIntIdentifier {
       def unapply(tree: Tree): Option[String] = tree match {
         case i: Ident if i.symbol.tpe == IntClass.tpe => Some(i.symbol.name.toString)
diff --git a/src/funcheck/purescala/PrettyPrinter.scala b/src/funcheck/purescala/PrettyPrinter.scala
index 35391e4edf679c61949b30d363f567bfddee30c7..6de4afa00952fb4f0f8d932fb98a2207e6d876a0 100644
--- a/src/funcheck/purescala/PrettyPrinter.scala
+++ b/src/funcheck/purescala/PrettyPrinter.scala
@@ -67,7 +67,7 @@ object PrettyPrinter {
     case Or(exprs) => ppNary(sb, exprs, " \u2228 ")             // \lor
     case Not(Equals(l, r)) => ppBinary(sb, l, r, " \u2260 ")    // \neq
     case Not(expr) => ppUnary(sb, expr, "\u00AC")               // \neg
-    case Equals(l,r) => ppBinary(sb, l, r, " = ")
+    case Equals(l,r) => ppBinary(sb, l, r, " == ")
     case IntLiteral(v) => sb.append(v)
     case BooleanLiteral(v) => sb.append(v)
     case Plus(l,r) => ppBinary(sb, l, r, " + ")
@@ -91,7 +91,7 @@ object PrettyPrinter {
       nsb
     }
 
-    case ResultVariable() => sb.append("<res>")
+    case ResultVariable() => sb.append("#res")
 
     case _ => sb.append("Expr?")
   }
@@ -100,6 +100,7 @@ object PrettyPrinter {
   // all type trees are printed in-line
   private def pp(tpe: TypeTree, sb: StringBuffer): StringBuffer = tpe match {
     case Int32Type => sb.append("Int")
+    case BooleanType => sb.append("Boolean")
     case _ => sb.append("Type?")
   }
 
@@ -126,11 +127,15 @@ object PrettyPrinter {
         nsb.append(id)
         nsb.append(" {\n")
 
-        val sz = defs.size
         var c = 0
+        val sz = defs.size
 
         defs.foreach(df => {
-          nsb = pp(df, nsb, lvl+1) 
+          nsb = pp(df, nsb, lvl+1)
+          if(c < sz - 1) {
+            nsb.append("\n")
+          }
+          c = c + 1
         })
 
         ind(nsb); nsb.append("}\n")
@@ -158,8 +163,18 @@ object PrettyPrinter {
         nsb.append(id)
         nsb.append("(")
 
-        args.foreach(a => {
-            nsb.append("ARG ")
+        val sz = args.size
+        var c = 0
+        
+        args.foreach(arg => {
+          nsb.append(arg.id)
+          nsb.append(" : ")
+          nsb = pp(arg.tpe, nsb)
+
+          if(c < sz - 1) {
+            nsb.append(", ")
+          }
+          c = c + 1
         })
 
         nsb.append(") : ")
diff --git a/src/funcheck/purescala/Symbols.scala b/src/funcheck/purescala/Symbols.scala
deleted file mode 100644
index b1c310f8feee1c581a4fbd0b0a0788885468c315..0000000000000000000000000000000000000000
--- a/src/funcheck/purescala/Symbols.scala
+++ /dev/null
@@ -1,103 +0,0 @@
-package funcheck.purescala
-
-import Common._
-import TypeTrees._
-
-object Symbols { /* dummy */ }
-
-/** There's a need for symbols, as we have purely functional trees with
- * potential recursive calls, and we want references to be resolved once and
- * for all. */
-// object Symbols {
-//   trait Symbolic {
-//     self =>
-// 
-//     private var __s: Option[Symbol] = None
-// 
-//     def symbol: Symbol = __s.getOrElse(throw new Exception("Undefined symbol."))
-// 
-//     def setSymbol(s: Symbol): self.type = __s match {
-//       case Some(_) => throw new Exception("Symbol already set.")
-//       case None => { __s = Some(s); this }
-//     }
-//   }
-// 
-//   sealed abstract class Symbol {
-//     val id: Identifier
-//   }
-//   
-//   class VariableSymbol(val id: Identifier, val tpe: TypeTree) extends Typed {
-//     def getType = tpe
-//   }
-// 
-//   // The object and class members have to be known at construction time. The
-//   // typed members can be added anytime.
-//   class ObjectSymbol(
-//     val id: Identifier,
-//     val classes: Seq[ClassSymbol],
-//     val objects: Seq[ObjectSymbol]) extends Symbol {
-// 
-//     private var _fields: List[VariableSymbol] = Nil
-//     private var _functions: List[FunctionSymbol] = Nil
-// 
-//     def fields: Seq[VariableSymbol] = _fields
-//     def  functions: Seq[FunctionSymbol] = _functions
-// 
-//     def registerField(f: VariableSymbol): ObjectSymbol = {
-//       _fields = _fields ::: List(f)
-//       this
-//     }
-// 
-//     def registerFunction(f: FunctionSymbol): ObjectSymbol = {
-//       _functions = _functions ::: List(f)
-//       this
-//     }
-// 
-//     override def toString: String = withInc(0)
-// 
-//     private def withInc(inc: Int): String = {
-//       val ii: String = "    " * inc
-//       ii + "[object: " + id + "\n" +
-//       (if(!fields.isEmpty) {
-//         ii + " fields: " + fields.map(_.toString).mkString("{ ", ", ", " }") + "\n"
-//       } else { "" }) +
-//       (if(!functions.isEmpty) {
-//         ii + " functions: " + functions.map(_.toString).mkString("{ ", ", ", " }") + "\n"
-//       } else { "" }) +
-//       (if(!classes.isEmpty) {
-//         ii + " classes: " + classes.map(_.toString).mkString("{ ", ", ", " }") + "\n" 
-//       } else { "" }) +
-//       (if(!objects.isEmpty) {
-//         ii + " objects: " + objects.map(_.withInc(inc+1)).mkString("{\n", ",\n", "\n" + ii + " }") + "\n"
-//       } else { "" }) +
-//       ii + "]"
-//     }
-//   }
-// 
-//   sealed abstract class ClassSymbol extends Symbol {
-//     val parents: Seq[AbstractClassSymbol]
-// 
-//     protected val _pfx: String
-// 
-//     override def toString = "[" + _pfx + ": " + id + (if (!parents.isEmpty) { " extends " + parents.mkString(", ") } else { "" }) + "]"
-//   }
-// 
-//   /** Symbols for abstract classes (or traits) */
-//   class AbstractClassSymbol(val id: Identifier, val parents: Seq[AbstractClassSymbol]) extends ClassSymbol {
-//     override protected val _pfx = "abstract class"
-//   }
-// 
-//   /** Symbols for "regular" (= non-abstract, non-case) classes */
-//   class RefClassSymbol(val id: Identifier, val parents: Seq[AbstractClassSymbol]) extends ClassSymbol {
-//     override protected val _pfx = "class"
-//   }
-// 
-//   /** Symbols for case classes. */
-//   class CaseClassSymbol(val id: Identifier, val parents: Seq[AbstractClassSymbol]) extends ClassSymbol {
-//     override protected val _pfx = "case class"
-//   }
-// 
-//   class FunctionSymbol(val id: Identifier, val params: Seq[VariableSymbol], val returnType: TypeTree) extends Typed {
-//     def getType = returnType
-//   }
-// }