diff --git a/src/main/scala/inox/ast/CallGraph.scala b/src/main/scala/inox/ast/CallGraph.scala
index fd00dd08206b7219566d27dd52c4d19d3b6f5adc..11e39b1c7dbefe8f1fc6e51b45483181864f568e 100644
--- a/src/main/scala/inox/ast/CallGraph.scala
+++ b/src/main/scala/inox/ast/CallGraph.scala
@@ -6,7 +6,7 @@ package ast
 import utils.Graphs._
 
 trait CallGraph {
-  val trees: Trees
+  private[ast] val trees: Trees
   import trees._
   import trees.exprOps._
   val symbols: Symbols
diff --git a/src/main/scala/inox/ast/Constructors.scala b/src/main/scala/inox/ast/Constructors.scala
index fed2d4ce1723c20f05a622c2bfe236533ae26ad3..4b6781e83adae1a8dce985cbf424f41b12b76388 100644
--- a/src/main/scala/inox/ast/Constructors.scala
+++ b/src/main/scala/inox/ast/Constructors.scala
@@ -10,7 +10,7 @@ package ast
   * @define encodingof Encoding of
   *  */
 trait Constructors {
-  val trees: Trees
+  private[ast] val trees: Trees
   import trees._
   import trees.exprOps._
   implicit val symbols: Symbols
diff --git a/src/main/scala/inox/ast/Definitions.scala b/src/main/scala/inox/ast/Definitions.scala
index 47903f24f8f180c671f6241444c8dcdee85f73ae..b6d136c2cb1a8b0fe0333e1a3d8d35890ae88312 100644
--- a/src/main/scala/inox/ast/Definitions.scala
+++ b/src/main/scala/inox/ast/Definitions.scala
@@ -87,7 +87,7 @@ trait Definitions { self: Trees =>
         with Constructors
         with Paths {
 
-    val trees: self.type = self
+    private[ast] val trees: self.type = self
     val symbols: this.type = this
 
     // @nv: this is a hack to reinject `this` into the set of implicits
@@ -271,7 +271,7 @@ trait Definitions { self: Trees =>
   }
 
   case class TypedAbstractClassDef(cd: AbstractClassDef, tps: Seq[Type])(implicit val symbols: Symbols) extends TypedClassDef {
-    def descendants: Seq[TypedClassDef] = cd.descendants.map(_.typed(tps))
+    def descendants: Seq[TypedCaseClassDef] = cd.descendants.map(_.typed(tps))
   }
 
   case class TypedCaseClassDef(cd: CaseClassDef, tps: Seq[Type])(implicit val symbols: Symbols) extends TypedClassDef {
diff --git a/src/main/scala/inox/ast/ExprOps.scala b/src/main/scala/inox/ast/ExprOps.scala
index dd88569e7469f58e288ef066ed009faab0e6fd87..c5d3a275ecc5ad53accbbd89cf0331334625e9b2 100644
--- a/src/main/scala/inox/ast/ExprOps.scala
+++ b/src/main/scala/inox/ast/ExprOps.scala
@@ -26,7 +26,6 @@ import scala.reflect._
   *
   */
 trait ExprOps extends GenTreeOps {
-  val trees: Trees
   import trees._
 
   type SubTree = Expr
diff --git a/src/main/scala/inox/ast/GenTreeOps.scala b/src/main/scala/inox/ast/GenTreeOps.scala
index 7e179f003d468a1f1086aba2bc4d880209565229..d757063787cf78dea126d50d055ac1dc2e7ff779 100644
--- a/src/main/scala/inox/ast/GenTreeOps.scala
+++ b/src/main/scala/inox/ast/GenTreeOps.scala
@@ -23,7 +23,7 @@ trait TreeExtractor {
   * @tparam SubTree The type of the tree
   */
 trait GenTreeOps {
-  val trees: Trees
+  private[ast] val trees: Trees
   import trees._
 
   type SubTree <: Tree
diff --git a/src/main/scala/inox/ast/TreeOps.scala b/src/main/scala/inox/ast/TreeOps.scala
index cbd7b36ad8b47d3e948b56de1df8964ea2c793d9..1fbfbf6a056dfbc27e38c49103a11752e895cbf0 100644
--- a/src/main/scala/inox/ast/TreeOps.scala
+++ b/src/main/scala/inox/ast/TreeOps.scala
@@ -3,7 +3,7 @@ package inox
 package ast
 
 trait TreeOps {
-  val trees: Trees
+  private[ast] val trees: Trees
   import trees._
 
   trait TreeTransformer {
diff --git a/src/main/scala/inox/ast/Trees.scala b/src/main/scala/inox/ast/Trees.scala
index a8a6bdf3acfbe0616040e29aef0d37950fe5db84..426a6e9c912f9c89e76c23c1ade899f8338351fa 100644
--- a/src/main/scala/inox/ast/Trees.scala
+++ b/src/main/scala/inox/ast/Trees.scala
@@ -27,7 +27,7 @@ trait Trees extends Expressions with Extractors with Types with Definitions with
   }
 
   object exprOps extends {
-    val trees: Trees.this.type = Trees.this
+    private[ast] val trees: Trees.this.type = Trees.this
   } with ExprOps
 
   /** Represents a unique symbol in Inox.
diff --git a/src/main/scala/inox/ast/TypeOps.scala b/src/main/scala/inox/ast/TypeOps.scala
index d02ceb26c94abf0f67246df4985ad39833e6c61b..44abc861a214db18619372c3436ab821c6e628c9 100644
--- a/src/main/scala/inox/ast/TypeOps.scala
+++ b/src/main/scala/inox/ast/TypeOps.scala
@@ -4,7 +4,7 @@ package inox
 package ast
 
 trait TypeOps {
-  val trees: Trees
+  private[ast] val trees: Trees
   import trees._
   implicit val symbols: Symbols