diff --git a/src/funcheck/AnalysisComponent.scala b/src/funcheck/AnalysisComponent.scala
index 0502cf070c2dde4c0716e34815db13c37030f54f..dab29a18cda858e27c8febbb1f6340f1f2438491 100644
--- a/src/funcheck/AnalysisComponent.scala
+++ b/src/funcheck/AnalysisComponent.scala
@@ -3,9 +3,12 @@ package funcheck
 import scala.tools.nsc._
 import scala.tools.nsc.plugins._
 
-class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin) extends PluginComponent with Extractors {
+class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin) extends PluginComponent
+  with Extractors
+  // all these traits define functions applied during tree traversals
+  with CodeExtraction
+{
   import global._
-  import global.definitions._
 
   // when we use 2.8.x, swap the following two lines
   val runsAfter = "refchecks"
@@ -19,8 +22,8 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin)
     import StructuralExtractors._
 
     def apply(unit: CompilationUnit): Unit = {
-      (new ForeachTreeTraverser(firstFilter(unit))).traverse(unit.body)
-      stopIfErrors
+      // (new ForeachTreeTraverser(firstFilter(unit))).traverse(unit.body)
+      // stopIfErrors
       (new ForeachTreeTraverser(findContracts)).traverse(unit.body)
       stopIfErrors
       (new ForeachTreeTraverser(mircoTraverser(unit))).traverse(unit.body)
@@ -38,31 +41,6 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin)
       }
     }
 
-    private def findContracts(tree: Tree): Unit = tree match {
-      case DefDef(/*mods*/ _, name, /*tparams*/ _, /*vparamss*/ _, /*tpt*/ _, body) => {
-        var realBody = body
-        var reqCont: Option[Tree] = None
-        var ensCont: Option[Function] = None
-
-        body match {
-          case EnsuredExpression(body2, contract) => realBody = body2; ensCont = Some(contract)
-          case _ => ;
-        }
-
-        realBody match {
-          case RequiredExpression(body3, contract) => realBody = body3; reqCont = Some(contract)
-          case _ => ;
-        }
-
-        println("In: " + name) 
-        println("  Requires clause: " + reqCont)
-        println("  Ensures  clause: " + ensCont)
-        println("  Body:            " + realBody)
-      }
-
-      case _ => ;
-    }
-
     def mircoTraverser(unit: CompilationUnit)(tree: Tree): Unit = {
       lazy val genAnnot: Symbol = definitions.getClass("funcheck.lib.Specs.generator")
 
diff --git a/src/funcheck/CodeExtraction.scala b/src/funcheck/CodeExtraction.scala
new file mode 100644
index 0000000000000000000000000000000000000000..256132b29879d2c84c8fff74e3e4e804d995bc15
--- /dev/null
+++ b/src/funcheck/CodeExtraction.scala
@@ -0,0 +1,38 @@
+package funcheck
+
+import scala.tools.nsc._
+import scala.tools.nsc.plugins._
+
+trait CodeExtraction {
+  self: Extractors =>
+
+  val global: Global
+
+  import global._
+  import StructuralExtractors._
+
+  def findContracts(tree: Tree): Unit = tree match {
+    case DefDef(/*mods*/ _, name, /*tparams*/ _, /*vparamss*/ _, /*tpt*/ _, body) => {
+      var realBody = body
+      var reqCont: Option[Tree] = None
+      var ensCont: Option[Function] = None
+
+      body match {
+        case EnsuredExpression(body2, contract) => realBody = body2; ensCont = Some(contract)
+        case _ => ;
+      }
+
+      realBody match {
+        case RequiredExpression(body3, contract) => realBody = body3; reqCont = Some(contract)
+        case _ => ;
+      }
+
+      println("In: " + name) 
+      println("  Requires clause: " + reqCont)
+      println("  Ensures  clause: " + ensCont)
+      println("  Body:            " + realBody)
+    }
+
+    case _ => ;
+  }
+}