diff --git a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala
index 7dad7128b429454ccb8cf8aae3ca5159a4f5e8c6..e7c9b6c904fd1ef7690423fe2835480103ec8a82 100644
--- a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala
+++ b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala
@@ -415,32 +415,38 @@ trait CodeExtraction extends ASTExtractors {
 
     private def extractMethodDefs(defs: List[Tree]) = {
       // We collect defined function bodies
-      for (d <- defs) d match {
-        case ExAbstractClass(_, csym, tmpl) =>
-          val cd = classesToClasses(csym)
+      def extractFromClass(csym: Symbol, tmpl: Template) {
+        val cd = classesToClasses(csym)
 
-          val ctparams = csym.tpe match {
-            case TypeRef(_, _, tps) =>
-              extractTypeParams(tps).map(_._1)
-            case _ =>
-              Nil
-          }
+        val ctparams = csym.tpe match {
+          case TypeRef(_, _, tps) =>
+            extractTypeParams(tps).map(_._1)
+          case _ =>
+            Nil
+        }
 
-          val ctparamsMap = ctparams zip cd.tparams.map(_.tp)
+        val ctparamsMap = ctparams zip cd.tparams.map(_.tp)
 
-          for (d <- tmpl.body) d match {
-            case ExFunctionDef(sym, tparams, params, _, body) =>
-              val fd = defsToDefs(sym)
+        for (d <- tmpl.body) d match {
+          case ExFunctionDef(sym, tparams, params, _, body) if !sym.isSynthetic && !sym.isAccessor =>
+            val fd = defsToDefs(sym)
 
-              val tparamsMap = (tparams zip fd.tparams.map(_.tp)).toMap ++ ctparamsMap
+            val tparamsMap = (tparams zip fd.tparams.map(_.tp)).toMap ++ ctparamsMap
 
-              if(body != EmptyTree) {
-                extractFunBody(fd, params, body)(DefContext(tparamsMap))
-              }
+            if(body != EmptyTree) {
+              extractFunBody(fd, params, body)(DefContext(tparamsMap))
+            }
 
-            case _ =>
+          case _ =>
 
-          }
+        }
+      }
+      for (d <- defs) d match {
+        case ExAbstractClass(_, csym, tmpl) =>
+          extractFromClass(csym, tmpl)
+
+        case ExCaseClass(_, csym, _, tmpl) =>
+          extractFromClass(csym, tmpl)
 
         case _ =>
       }