diff --git a/src/main/scala/leon/datagen/NaiveDataGen.scala b/src/main/scala/leon/datagen/NaiveDataGen.scala
index 6460ec4910a0ee7ac06478fb4e1dd8473da95f2f..9726d1876529d0717113a07823eeee2c11a7cb2b 100644
--- a/src/main/scala/leon/datagen/NaiveDataGen.scala
+++ b/src/main/scala/leon/datagen/NaiveDataGen.scala
@@ -63,14 +63,10 @@ class NaiveDataGen(ctx: LeonContext, p: Program, evaluator: Evaluator, _bounds :
         val sortedConss = conss sortBy { _.fields.count{ _.getType.isInstanceOf[ClassType]}}
 
         // The stream for leafs...
-        val leafsStream = leafs.toStream.flatMap { cct =>
-          generate(cct)
-        }
+        val leafsStream = leafs.toStream.flatMap(generate)
 
         // ...to which we append the streams for constructors.
-        leafsStream.append(interleave(sortedConss.map { cct =>
-          generate(cct)
-        }))
+        leafsStream.append(interleave(sortedConss.map(generate)))
 
       case cct : CaseClassType =>
         if(cct.fields.isEmpty) {
diff --git a/src/main/scala/leon/evaluators/RecursiveEvaluator.scala b/src/main/scala/leon/evaluators/RecursiveEvaluator.scala
index ff2e8309103d117aa8738c20803e485547186561..1c3a6fd4876751e1ffc2534a83d52110288d3040 100644
--- a/src/main/scala/leon/evaluators/RecursiveEvaluator.scala
+++ b/src/main/scala/leon/evaluators/RecursiveEvaluator.scala
@@ -623,19 +623,15 @@ abstract class RecursiveEvaluator(ctx: LeonContext, prog: Program, maxSteps: Int
 
     caze match {
       case SimpleCase(p, rhs) =>
-        matchesPattern(p, scrut).map( r =>
+        matchesPattern(p, scrut).map(r =>
           (caze, r)
         )
 
       case GuardedCase(p, g, rhs) =>
-        matchesPattern(p, scrut).flatMap( r =>
-          e(g)(rctx.withNewVars(r), gctx) match {
-            case BooleanLiteral(true) =>
-              Some((caze, r))
-            case _ =>
-              None
-          }
-        )
+        for {
+          r <- matchesPattern(p, scrut)
+          BooleanLiteral(true) = e(g)(rctx.withNewVars(r), gctx)
+        } yield (caze, r)
     }
   }
 
diff --git a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala
index 3586bfc5539fcb2bf02289ed56aeb1f504efa03e..d95d4530eed390f8e74dec670fd572bd70fe7034 100644
--- a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala
+++ b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala
@@ -48,14 +48,13 @@ trait CodeExtraction extends ASTExtractors {
   def annotationsOf(s: Symbol): Set[String] = {
     val actualSymbol = s.accessedOrSelf
 
-    (for(a <- actualSymbol.annotations ++ actualSymbol.owner.annotations) yield {
-      val name = a.atp.safeToString.replaceAll("\\.package\\.", ".")
-      if (name startsWith "leon.annotation.") {
-        Some(name.split("\\.", 3)(2))
-      } else {
-        None
-      }
-    }).flatten.toSet
+    (for {
+      a <- actualSymbol.annotations ++ actualSymbol.owner.annotations
+      name = a.atp.safeToString.replaceAll("\\.package\\.", ".")
+      if (name startsWith "leon.annotation.")
+    } yield {
+      name.split("\\.", 3)(2)
+    }).toSet
   }
 
   implicit def scalaPosToLeonPos(p: global.Position): LeonPosition = {
diff --git a/src/main/scala/leon/purescala/TreeNormalizations.scala b/src/main/scala/leon/purescala/TreeNormalizations.scala
index 8b264756d3d9b7de38645bf600fd6989e95a79b6..d3dff445cc0b5151a75776b583b2d864a77952db 100644
--- a/src/main/scala/leon/purescala/TreeNormalizations.scala
+++ b/src/main/scala/leon/purescala/TreeNormalizations.scala
@@ -70,7 +70,10 @@ object TreeNormalizations {
   //multiply two sums together and distribute in a larger sum
   //do not keep the evaluation order
   def multiply(es1: Seq[Expr], es2: Seq[Expr]): Seq[Expr] = {
-    es1.flatMap(e1 => es2.map(e2 => Times(e1, e2)))
+    for {
+      e1 <- es1
+      e2 <- es2
+    } yield Times(e1,e2)
   }
 
   //expand the expr in a sum of "atoms", each atom being a product of literal and variable
diff --git a/src/main/scala/leon/termination/ChainBuilder.scala b/src/main/scala/leon/termination/ChainBuilder.scala
index 11874f798ed07ce751e0c20a56be65fc1f344770..be8b27f3cfaceba92677e96d7182aa22b81235b6 100644
--- a/src/main/scala/leon/termination/ChainBuilder.scala
+++ b/src/main/scala/leon/termination/ChainBuilder.scala
@@ -100,14 +100,14 @@ final case class Chain(relations: List[Relation]) {
     val tmap = that.relations.zipWithIndex.map(p => p._1.funDef -> p._2).groupBy(_._1).mapValues(_.map(_._2))
     val keys = map.keys.toSet & tmap.keys.toSet
 
-    keys.flatMap(fd => map(fd).flatMap { i1 =>
-      val (start1, end1) = relations.splitAt(i1)
-      val called = if (start1.isEmpty) relations.head.funDef else start1.last.call.tfd.fd
-      tmap(called).map { i2 =>
-        val (start2, end2) = that.relations.splitAt(i2)
-        Chain(start1 ++ end2 ++ start2 ++ end1)
-      }
-    })
+    for {
+      fd <- keys
+      i1 <- map(fd)
+      (start1, end1) = relations.splitAt(i1)
+      called = if (start1.isEmpty) relations.head.funDef else start1.last.call.tfd.fd
+      i2 <- tmap(called)
+      (start2, end2) = that.relations.splitAt(i2)
+    } yield Chain(start1 ++ end2 ++ start2 ++ end1)
   }
 
   lazy val inlined: Seq[Expr] = inlining.map(_._2)
diff --git a/src/main/scala/leon/termination/SimpleTerminationChecker.scala b/src/main/scala/leon/termination/SimpleTerminationChecker.scala
index 2a6c5bcbc81941bf1d1c8834468f6993100deea8..e615fc373f22ce72e4d59b80518d40a6e5a625b5 100644
--- a/src/main/scala/leon/termination/SimpleTerminationChecker.scala
+++ b/src/main/scala/leon/termination/SimpleTerminationChecker.scala
@@ -31,7 +31,10 @@ class SimpleTerminationChecker(context: LeonContext, program: Program) extends T
     v -> (0 until cSize).find(i => sccArray(i)(v)).get).toMap
 
   val sccGraph = (0 until cSize).map({ i =>
-    val dsts = sccArray(i).flatMap(v => callGraph.getOrElse(v, Set.empty)).map(funDefToSCCIndex(_))
+    val dsts = for {
+      v <- sccArray(i)
+      c <- callGraph.getOrElse(v, Set.empty)
+    } yield funDefToSCCIndex(c)
     i -> dsts
   }).toMap
 
diff --git a/src/main/scala/leon/termination/Strengthener.scala b/src/main/scala/leon/termination/Strengthener.scala
index ed77e8bef45e9ab343d83f835c280fa5de3a346d..192e78599edbb4cb9801324a24099a9302001b23 100644
--- a/src/main/scala/leon/termination/Strengthener.scala
+++ b/src/main/scala/leon/termination/Strengthener.scala
@@ -81,7 +81,7 @@ trait Strengthener { self : RelationComparator =>
   }
 
   def strengthenApplications(funDefs: Set[FunDef])(implicit solver: Processor with Solvable) {
-    val transitiveFunDefs = funDefs ++ funDefs.flatMap(fd => checker.program.callGraph.transitiveCallees(fd))
+    val transitiveFunDefs = funDefs ++ funDefs.flatMap(checker.program.callGraph.transitiveCallees)
     val sortedFunDefs = transitiveFunDefs.toSeq.sortWith((fd1, fd2) => checker.program.callGraph.transitivelyCalls(fd2, fd1))
 
     for (funDef <- sortedFunDefs if !strengthenedApp(funDef) && funDef.hasBody && checker.terminates(funDef).isGuaranteed) {
@@ -131,8 +131,11 @@ trait Strengthener { self : RelationComparator =>
 
       val invocations = fiCollector.traverse(funDef)
       val id2invocations : Seq[(Identifier, ((FunDef, Identifier), Expr, Seq[Expr]))] =
-        invocations.flatMap(p => p._3.map(c => c._1 -> ((c._2, p._1, p._2))))
-      val invocationMap  : Map[Identifier, Seq[((FunDef, Identifier), Expr, Seq[Expr])]] = 
+        for {
+          p <- invocations
+          c <- p._3
+        } yield c._1 -> (c._2, p._1, p._2)
+      val invocationMap: Map[Identifier, Seq[((FunDef, Identifier), Expr, Seq[Expr])]] =
         id2invocations.groupBy(_._1).mapValues(_.map(_._2))
 
       def constraint(id: Identifier, passings: Seq[((FunDef, Identifier), Expr, Seq[Expr])]): SizeConstraint = {
diff --git a/src/main/scala/leon/verification/InductionTactic.scala b/src/main/scala/leon/verification/InductionTactic.scala
index ba4039b26743fa73a6daaa712e485c4e1dc388d1..4352adc27a6e877b9607009ed534d1ba93c7e773 100644
--- a/src/main/scala/leon/verification/InductionTactic.scala
+++ b/src/main/scala/leon/verification/InductionTactic.scala
@@ -64,24 +64,27 @@ class InductionTactic(vctx: VerificationContext) extends DefaultTactic(vctx) {
           case fi @ FunctionInvocation(tfd, _) if tfd.hasPrecondition => (fi, tfd.precondition.get)
         }(body)
 
-        calls.flatMap {
-          case ((fi @ FunctionInvocation(tfd, args), pre), path) =>
-            for (cct <- parentType.knownCCDescendents) yield {
-              val selectors = selectorsOfParentType(parentType, cct, arg.toVariable)
+        for {
+          ((fi@FunctionInvocation(tfd, args), pre), path) <- calls
+          cct <- parentType.knownCCDescendents
+        } yield {
+          val selectors = selectorsOfParentType(parentType, cct, arg.toVariable)
 
-              val subCases = selectors.map { sel =>
-                replace(Map(arg.toVariable -> sel),
-                  implies(precOrTrue(fd), replace((tfd.params.map(_.toVariable) zip args).toMap, pre))
-                )
-              }
+          val subCases = selectors.map { sel =>
+            replace(Map(arg.toVariable -> sel),
+              implies(precOrTrue(fd), replace((tfd.params.map(_.toVariable) zip args).toMap, pre))
+            )
+          }
 
-              val vc = implies(and(CaseClassInstanceOf(cct, arg.toVariable), precOrTrue(fd), path), implies(andJoin(subCases), replace((tfd.params.map(_.toVariable) zip args).toMap, pre)))
+          val vc = implies(
+            andJoin(Seq(CaseClassInstanceOf(cct, arg.toVariable), precOrTrue(fd), path) ++ subCases),
+            replace((tfd.params.map(_.toVariable) zip args).toMap, pre)
+          )
 
-              // Crop the call to display it properly
-              val fiS = sizeLimit(fi.toString, 25)
+          // Crop the call to display it properly
+          val fiS = sizeLimit(fi.toString, 25)
 
-              VC(vc, fd, VCKinds.Info(VCKinds.Precondition, s"call $fiS, ind. on ($arg : ${cct.classDef.id})"), this).setPos(fi)
-            }
+          VC(vc, fd, VCKinds.Info(VCKinds.Precondition, s"call $fiS, ind. on ($arg : ${cct.classDef.id})"), this).setPos(fi)
         }
 
       case (body, _) =>