diff --git a/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala b/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala
index a53a04f3e348dd5ee080dc377c827a03d4282f69..3c53247ae3646e1a577221508dcc65efb8849b4d 100644
--- a/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala
+++ b/src/main/scala/leon/synthesis/utils/ExpressionGrammar.scala
@@ -13,12 +13,10 @@ import purescala.Common._
 import purescala.Definitions._
 import purescala.Types._
 import purescala.ExprOps._
-import purescala.DefOps._
 import purescala.TypeOps._
 import purescala.Extractors._
 import purescala.Constructors._
 import purescala.ScalaPrinter
-import purescala.Constructors.finiteSet
 
 import scala.language.implicitConversions
 
@@ -40,16 +38,15 @@ abstract class ExpressionGrammar[T <% Typed] {
   def computeProductions(t: T): Seq[Gen]
 
   def filter(f: Gen => Boolean) = {
-    val that = this
     new ExpressionGrammar[T] {
-      def computeProductions(t: T) = that.computeProductions(t).filter(f)
+      def computeProductions(t: T) = ExpressionGrammar.this.computeProductions(t).filter(f)
     }
   }
 
   final def ||(that: ExpressionGrammar[T]): ExpressionGrammar[T] = {
     ExpressionGrammars.Or(Seq(this, that))
   }
-
+ 
 
   final def printProductions(printer: String => Unit) {
     for ((t, gs) <- cache; g <- gs) {
@@ -221,11 +218,12 @@ object ExpressionGrammars {
     
     type L = Label[String]
 
-    private var counter = -1
-
-    def getNext(): Int = {
-      counter += 1
-      counter
+    val getNext: () => Int = {
+      var counter = -1
+      () => {
+        counter += 1
+        counter
+      }
     }
 
     lazy val allSimilar = computeSimilar(e).groupBy(_._1).mapValues(_.map(_._2))
@@ -241,7 +239,7 @@ object ExpressionGrammars {
 
       def getLabel(t: TypeTree) = {
         val tpe = bestRealType(t)
-        val c = getNext
+        val c = getNext()
         Label(tpe, "G"+c)
       }