diff --git a/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala b/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala
index d3f9e12cc78cea87bd77f638b44190c14b6bb4cd..14fdc53e3ca4d9a2a33da58d2cb35c3df6489881 100644
--- a/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala
+++ b/src/main/scala/inox/solvers/unrolling/LambdaTemplates.scala
@@ -168,20 +168,19 @@ trait LambdaTemplates { self: Templates =>
       * already been found, then the associated instantiations must already appear
       * in those handled by the solver.
       */
-    lazy val (key, instantiation) = {
+    lazy val (key, instantiation, locals) = {
       val (substMap, substInst) = Template.substitution(
         condVars, exprVars, condTree, lambdas, quantifications, Map.empty, pathVar._2)
       val tmplInst = Template.instantiate(clauses, blockers, applications, matchers, substMap)
+      val instantiation = substInst ++ tmplInst
 
       val substituter = mkSubstituter(substMap.mapValues(_.encoded))
-      val key = (lambda, pathVar._2, dependencies.map(substituter))
-      val instantiation = substInst ++ tmplInst
-      (key, instantiation)
-    }
+      val deps = dependencies.map(substituter)
+      val key = (lambda, pathVar._2, deps)
 
-    lazy val locals: Seq[(Variable, Encoded)] = {
       val sortedDeps = exprOps.variablesOf(lambda).toSeq.sortBy(_.id.uniqueName)
-      sortedDeps zip dependencies
+      val locals = sortedDeps zip deps
+      (key, instantiation, locals)
     }
 
     override def equals(that: Any): Boolean = that match {
@@ -297,7 +296,7 @@ trait LambdaTemplates { self: Templates =>
         val idT = encodeSymbol(template.ids._1)
         val newTemplate = template.withId(idT)
 
-        val orderingClauses: Clauses = newTemplate.structure.locals.flatMap {
+        val orderingClauses = newTemplate.structure.locals.flatMap {
           case (v, dep) => registerClosure(newTemplate.start, idT -> newTemplate.tpe, dep -> v.tpe)
         }
 
@@ -321,6 +320,7 @@ trait LambdaTemplates { self: Templates =>
           extClauses ++
           arglessEqClauses
 
+
         byID += idT -> newTemplate
         byType += newTemplate.tpe -> (byType(newTemplate.tpe) + (newTemplate.structure -> newTemplate))
 
@@ -416,12 +416,12 @@ trait LambdaTemplates { self: Templates =>
       mkImplies(
         mkAnd(template.start, that.start),
         if (template.structure.lambda == that.structure.lambda) {
-          val pairs = template.structure.dependencies zip that.structure.dependencies
+          val pairs = template.structure.locals zip that.structure.locals
           val filtered = pairs.filter(p => p._1 != p._2)
           if (filtered.isEmpty) {
             equals
           } else {
-            val eqs = filtered.map(p => mkEquals(p._1, p._2))
+            val eqs = filtered.map(p => mkEquals(p._1._2, p._2._2))
             mkEquals(mkAnd(eqs : _*), equals)
           }
         } else {