diff --git a/src/main/scala/leon/LeonFatalError.scala b/src/main/scala/leon/LeonFatalError.scala
new file mode 100644
index 0000000000000000000000000000000000000000..6fc773292fd721b996b2cfadbe964de250e6cc3b
--- /dev/null
+++ b/src/main/scala/leon/LeonFatalError.scala
@@ -0,0 +1,3 @@
+package leon
+
+case class LeonFatalError() extends Exception
diff --git a/src/main/scala/leon/Main.scala b/src/main/scala/leon/Main.scala
index 2e1e6634f9c1a2e07ad594765c44bee97307c5b2..1e4592f5ef838ed6212ca99f1ebf0f22365f025b 100644
--- a/src/main/scala/leon/Main.scala
+++ b/src/main/scala/leon/Main.scala
@@ -157,7 +157,11 @@ object Main {
     // Compute leon pipeline
     val pipeline = computePipeline(ctx.settings)
 
-    // Run pipeline
-    pipeline.run(ctx)(args.toList)
+    try {
+      // Run pipeline
+      pipeline.run(ctx)(args.toList)
+    } catch {
+      case LeonFatalError() => sys.exit(1)
+    }
   }
 }
diff --git a/src/main/scala/leon/Reporter.scala b/src/main/scala/leon/Reporter.scala
index 81ed31be83771e621472502a6426cbb7f41a2f4a..a9bff0440efd659e2d366a03822feb7a31ca8c8e 100644
--- a/src/main/scala/leon/Reporter.scala
+++ b/src/main/scala/leon/Reporter.scala
@@ -53,7 +53,7 @@ class DefaultReporter extends Reporter {
   def errorFunction(msg: Any) = output(reline(errorPfx, msg.toString))
   def warningFunction(msg: Any) = output(reline(warningPfx, msg.toString))
   def infoFunction(msg: Any) = output(reline(infoPfx, msg.toString))
-  def fatalErrorFunction(msg: Any) = { output(reline(fatalPfx, msg.toString)); sys.exit(0) }
+  def fatalErrorFunction(msg: Any) = { output(reline(fatalPfx, msg.toString)); throw LeonFatalError() }
 }
 
 class QuietReporter extends DefaultReporter {
diff --git a/src/main/scala/leon/plugin/AnalysisComponent.scala b/src/main/scala/leon/plugin/AnalysisComponent.scala
index 1cc1cde07699255945ffab7a42dba0c52e586a98..783d86b5c3ed153a9903f45fb5fd16375824d44b 100644
--- a/src/main/scala/leon/plugin/AnalysisComponent.scala
+++ b/src/main/scala/leon/plugin/AnalysisComponent.scala
@@ -24,7 +24,7 @@ class AnalysisComponent(val global: Global, val pluginInstance: LeonPlugin)
   
   protected def stopIfErrors: Unit = {
     if(reporter.hasErrors) {
-      sys.exit(1)
+      throw LeonFatalError()
     }
   }