diff --git a/src/main/scala/leon/verification/AnalysisPhase.scala b/src/main/scala/leon/verification/AnalysisPhase.scala
index d4a2b71b7ca348d0797b771e873d84ec90744fdc..d88b7351997c27476f7dc36bf5d4709ac134d634 100644
--- a/src/main/scala/leon/verification/AnalysisPhase.scala
+++ b/src/main/scala/leon/verification/AnalysisPhase.scala
@@ -7,7 +7,7 @@ import purescala.Trees._
 import purescala.TreeOps._
 import purescala.TypeTrees._
 
-import solvers.{Solver,TrivialSolver}
+import solvers.{Solver,TrivialSolver,TimeoutSolver}
 import solvers.z3.FairZ3Solver
 
 import scala.collection.mutable.{Set => MutableSet}
@@ -17,27 +17,40 @@ object AnalysisPhase extends LeonPhase[Program,VerificationReport] {
   val description = "Leon Verification"
 
   override val definedOptions : Set[LeonOptionDef] = Set(
-    LeonValueOptionDef("functions", "--functions=f1:f2", "Limit verification to f1,f2,...")
+    LeonValueOptionDef("functions", "--functions=f1:f2", "Limit verification to f1,f2,..."),
+    LeonValueOptionDef("timeout",   "--timeout=T",       "Timeout after T seconds when trying to prove a verification condition.")
   )
 
   def run(ctx: LeonContext)(program: Program) : VerificationReport = {
     val functionsToAnalyse : MutableSet[String] = MutableSet.empty
+    var timeout: Option[Int] = None
 
     for(opt <- ctx.options) opt match {
       case LeonValueOption("functions", ListValue(fs)) =>
         functionsToAnalyse ++= fs
+      case LeonValueOption("timeout", t) =>
+        try {
+          timeout = Some(t.toInt)
+        } catch {
+          case _: Throwable => 
+        }
       case _ =>
-    } 
+    }
 
     val reporter = ctx.reporter
 
     val trivialSolver = new TrivialSolver(ctx)
     val fairZ3 = new FairZ3Solver(ctx)
 
-    val solvers : Seq[Solver] = trivialSolver :: fairZ3 :: Nil
+    val solvers0 : Seq[Solver] = trivialSolver :: fairZ3 :: Nil
+    val solvers: Seq[Solver] = timeout match {
+      case Some(t) => solvers0.map(s => new TimeoutSolver(s, t))
+      case None => solvers0
+    }
 
     solvers.foreach(_.setProgram(program))
 
+
     val defaultTactic = new DefaultTactic(reporter)
     defaultTactic.setProgram(program)
     val inductionTactic = new InductionTactic(reporter)