diff --git a/src/main/scala/inox/ast/Extractors.scala b/src/main/scala/inox/ast/Extractors.scala
index cecd9b42674ff9e0bc4c64ac75ed06de229a65e8..4582f9cb07a629e29c090147e95b11f32e6e7cb4 100644
--- a/src/main/scala/inox/ast/Extractors.scala
+++ b/src/main/scala/inox/ast/Extractors.scala
@@ -234,6 +234,9 @@ trait Extractors { self: Trees =>
   val deconstructor: TreeDeconstructor {
     val s: self.type
     val t: self.type
+  } = new TreeDeconstructor {
+    protected val s: self.type = self
+    protected val t: self.type = self
   }
 
   /** Operator Extractor to extract any Expression in a consistent way.
diff --git a/src/main/scala/inox/ast/SimpleSymbols.scala b/src/main/scala/inox/ast/SimpleSymbols.scala
index bd5e6ddf2a18c06dcb52a27d9af6e5f119d28466..36c2afda03c66235ccf6ec13ff43a6c8e5a37e32 100644
--- a/src/main/scala/inox/ast/SimpleSymbols.scala
+++ b/src/main/scala/inox/ast/SimpleSymbols.scala
@@ -5,19 +5,18 @@ package ast
 
 trait SimpleSymbols { self: Trees =>
 
-  val NoSymbols = new Symbols(Map.empty, Map.empty)
+  val NoSymbols = Symbols(Map.empty, Map.empty)
 
-  class Symbols(
-    val functions: Map[Identifier, FunDef],
-    val adts: Map[Identifier, ADTDefinition]
-  ) extends AbstractSymbols {
+  val Symbols: (Map[Identifier, FunDef], Map[Identifier, ADTDefinition]) => Symbols
 
-    def withFunctions(functions: Seq[FunDef]): Symbols = new Symbols(
+  abstract class SimpleSymbols extends AbstractSymbols { self: Symbols =>
+
+    def withFunctions(functions: Seq[FunDef]): Symbols = Symbols(
       this.functions ++ functions.map(fd => fd.id -> fd),
       this.adts
     )
 
-    def withADTs(adts: Seq[ADTDefinition]): Symbols = new Symbols(
+    def withADTs(adts: Seq[ADTDefinition]): Symbols = Symbols(
       this.functions,
       this.adts ++ adts.map(adt => adt.id -> adt)
     )
diff --git a/src/main/scala/inox/package.scala b/src/main/scala/inox/package.scala
index bf2325f005810d67314d6a8a51b84141f4950d0c..14426583e5476ab5fb3d44a21da228063e409060 100644
--- a/src/main/scala/inox/package.scala
+++ b/src/main/scala/inox/package.scala
@@ -42,9 +42,9 @@ package object inox {
   }
 
   object trees extends ast.Trees with ast.SimpleSymbols {
-    object deconstructor extends {
-      protected val s: trees.type = trees
-      protected val t: trees.type = trees
-    } with ast.TreeDeconstructor
+    case class Symbols(
+      functions: Map[Identifier, FunDef],
+      adts: Map[Identifier, ADTDefinition]
+    ) extends SimpleSymbols
   }
 }