diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp
index 6d7c6a8..ce3e841 100644
--- a/lib/Frontend/FrontendActions.cpp
+++ b/lib/Frontend/FrontendActions.cpp
@@ -134,6 +134,23 @@
     FixItRewrite.addFixItLocation(Requested);
   }
 
+  const std::string &OutputFile = CI.getFrontendOpts().OutputFile;
+  if (Locs.empty() && !OutputFile.empty()) {
+    // FIXME: we will issue "FIX-IT applied suggested code changes" for every
+    // input, but only the main file will actually be rewritten.
+    const std::vector<std::pair<FrontendOptions::InputKind, std::string> > &Inputs =
+      CI.getFrontendOpts().Inputs;
+    for (unsigned i = 0, e = Inputs.size(); i != e; ++i) {
+      const FileEntry *File = CI.getFileManager().getFile(Inputs[i].second);
+      assert(File && "Input file not found in FileManager");
+      RequestedSourceLocation Requested;
+      Requested.File = File;
+      Requested.Line = 0;
+      Requested.Column = 0;
+      FixItRewrite.addFixItLocation(Requested);
+    }
+  }
+
   return true;
 }
 
@@ -149,7 +166,34 @@
 
 void FixItAction::EndSourceFileAction() {
   const FrontendOptions &FEOpts = getCompilerInstance().getFrontendOpts();
-  Rewriter->WriteFixedFile(getCurrentFile(), FEOpts.OutputFile);
+  if (!FEOpts.OutputFile.empty()) {
+    // When called with 'clang -fixit -o filename' output only the main file.
+
+    const SourceManager &SM = getCompilerInstance().getSourceManager();
+    FileID MainFileID = SM.getMainFileID();
+    if (!Rewriter->IsModified(MainFileID)) {
+      getCompilerInstance().getDiagnostics().Report(
+          diag::note_fixit_main_file_unchanged);
+      return;
+    }
+
+    llvm::OwningPtr<llvm::raw_ostream> OwnedStream;
+    llvm::raw_ostream *OutFile;
+    if (FEOpts.OutputFile == "-") {
+      OutFile = &llvm::outs();
+    } else {
+      std::string Err;
+      OutFile = new llvm::raw_fd_ostream(FEOpts.OutputFile.c_str(), Err,
+                                         llvm::raw_fd_ostream::F_Binary);
+      OwnedStream.reset(OutFile);
+    }
+
+    Rewriter->WriteFixedFile(MainFileID, *OutFile);
+    return;
+  }
+
+  // Otherwise rewrite all files.
+  Rewriter->WriteFixedFiles();
 }
 
 ASTConsumer *RewriteObjCAction::CreateASTConsumer(CompilerInstance &CI,
