diff --git a/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala b/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala
index 79ee4c3cfdf4d2bf6d514df270fef164455c47ac..4bfc179a10bcdb48a697ccd6b8d33ea85161e725 100644
--- a/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala
+++ b/src/main/scala/leon/solvers/combinators/PortfolioSolver.scala
@@ -40,18 +40,22 @@ class PortfolioSolver[S <: Solver with Interruptible](val context: LeonContext,
     // solving
     val fs = solvers.map { s =>
       Future {
-        val result = s.check
-        val model: Model = if (result == Some(true)) {
-          s.getModel
-        } else {
-          Model.empty
+        try {
+          val result = s.check
+          val model: Model = if (result == Some(true)) {
+            s.getModel
+          } else {
+            Model.empty
+          }
+          (s, result, model)
+        } catch {
+          case _: StackOverflowError =>
+            context.reporter.warning("Stack Overflow while running solver.check()!")
+            (s, None, Model.empty)
         }
-        (s, result, model)
       }
     }
 
-    fs.foreach(_ onFailure { case ex: Throwable => ex.printStackTrace() })
-
     val result = Future.find(fs)(_._2.isDefined)
 
     val res = Await.result(result, Duration.Inf) match {