diff --git a/src/main/scala/leon/Main.scala b/src/main/scala/leon/Main.scala
index 3cac21a4d260e3a134fdbeb2dc27a44aaad04c49..325ba92decae62eb4ee43bc91966cc010294e068 100644
--- a/src/main/scala/leon/Main.scala
+++ b/src/main/scala/leon/Main.scala
@@ -10,6 +10,7 @@ object Main {
     List(
       frontends.scalac.ExtractionPhase,
       utils.TypingPhase,
+      FileOutputPhase,
       xlang.ArrayTransformation,
       xlang.EpsilonElimination,
       xlang.ImperativeCodeElimination,
@@ -32,6 +33,7 @@ object Main {
       LeonFlagOptionDef ("xlang",       "--xlang",              "Support for extra program constructs (imperative,...)"),
       LeonFlagOptionDef ("library",     "--library",            "Inject Leon standard library"),
       LeonValueOptionDef("debug",       "--debug=<sections..>", "Enables specific messages"),
+      LeonFlagOptionDef ("noop",        "--noop",               "No operation performed, just output program"),
       LeonFlagOptionDef ("help",        "--help",               "Show help")
     )
 
@@ -156,6 +158,8 @@ object Main {
           }
         }
         settings = settings.copy(debugSections = debugSections.toSet)
+      case LeonFlagOption("noop", true) =>
+        settings = settings.copy(verify = false)
       case LeonFlagOption("help", true) =>
         displayHelp(initReporter)
       case _ =>
@@ -207,7 +211,7 @@ object Main {
       } else if (settings.verify) {
         AnalysisPhase
       } else {
-        NoopPhase()
+        utils.FileOutputPhase
       }
     }
 
diff --git a/src/main/scala/leon/purescala/Definitions.scala b/src/main/scala/leon/purescala/Definitions.scala
index 54b43592e361d96f61a752e39671962b497ad84b..32f21b0e7747824b0b3b2b31ab2bd659733a2e9a 100644
--- a/src/main/scala/leon/purescala/Definitions.scala
+++ b/src/main/scala/leon/purescala/Definitions.scala
@@ -58,6 +58,15 @@ object Definitions {
         case d => d
       })))
     }
+    
+    def writeScalaFile(filename: String) {
+      import java.io.FileWriter
+      import java.io.BufferedWriter
+      val fstream = new FileWriter(filename)
+      val out = new BufferedWriter(fstream)
+      out.write(ScalaPrinter(this))
+      out.close
+    }
   }
 
   object Program {
diff --git a/src/main/scala/leon/utils/FileOutputPhase.scala b/src/main/scala/leon/utils/FileOutputPhase.scala
new file mode 100644
index 0000000000000000000000000000000000000000..e6b02b7afe45b794278f454d313c2446494de2ed
--- /dev/null
+++ b/src/main/scala/leon/utils/FileOutputPhase.scala
@@ -0,0 +1,27 @@
+package leon.utils
+
+import leon._
+import purescala.Definitions.Program
+import java.io.File
+
+object FileOutputPhase extends UnitPhase[Program] {
+  
+  val name = "File output"
+  val description = "Output parsed/generated program into a file (default: memo.out.scala)"
+    
+  override val definedOptions : Set[LeonOptionDef] = Set( 
+     LeonValueOptionDef("o", "--o=<file>",  "Output file")
+  )
+
+  def apply(ctx:LeonContext, p : Program) {
+    // Get the output file name from command line, or use default
+    val outputFile = ( for (LeonValueOption("o", file) <- ctx.options) yield file ).lastOption.getOrElse("memo.out.scala")
+    try {
+      p.writeScalaFile(outputFile)
+    } catch {
+      case _ : java.io.IOException => ctx.reporter.fatalError("Could not write on " + outputFile)
+    }
+    ctx.reporter.info("Output written on " + outputFile)
+  }
+  
+}