diff --git a/lib/Rewrite/HTMLRewrite.cpp b/lib/Rewrite/HTMLRewrite.cpp
index fd67182..ced8e5e 100644
--- a/lib/Rewrite/HTMLRewrite.cpp
+++ b/lib/Rewrite/HTMLRewrite.cpp
@@ -12,11 +12,13 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "clang/Lex/Preprocessor.h"
 #include "clang/Rewrite/Rewriter.h"
 #include "clang/Rewrite/HTMLRewrite.h"
 #include "clang/Lex/Preprocessor.h"
 #include "clang/Basic/SourceManager.h"
 #include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/OwningPtr.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include <sstream>
 using namespace clang;
@@ -382,23 +384,28 @@
 /// file, to reexpand macros and insert (into the HTML) information about the
 /// macro expansions.  This won't be perfectly perfect, but it will be
 /// reasonably close.
-void html::HighlightMacros(Rewriter &R, unsigned FileID, Preprocessor &PP) {
+void html::HighlightMacros(Rewriter &R, unsigned FileID,
+                           PreprocessorFactory &PPF) {
+  
+  llvm::OwningPtr<Preprocessor> PP(PPF.CreatePreprocessor());
+  
+  
   RewriteBuffer &RB = R.getEditBuffer(FileID);
   
   // Inform the preprocessor that we don't want comments.
-  PP.SetCommentRetentionState(false, false);
+  PP->SetCommentRetentionState(false, false);
   
   // Start parsing the specified input file.
-  PP.EnterMainSourceFile();
+  PP->EnterMainSourceFile();
   
   // Lex all the tokens.
-  const SourceManager &SourceMgr = PP.getSourceManager();
+  const SourceManager &SourceMgr = PP->getSourceManager();
   Token Tok;
-  PP.Lex(Tok);
+  PP->Lex(Tok);
   while (Tok.isNot(tok::eof)) {
     // Ignore non-macro tokens.
     if (!Tok.getLocation().isMacroID()) {
-      PP.Lex(Tok);
+      PP->Lex(Tok);
       continue;
     }
     
@@ -408,7 +415,7 @@
       SourceMgr.getDecomposedFileLoc(LLoc);
     
     if (LLocInfo.first != FileID) {
-      PP.Lex(Tok);
+      PP->Lex(Tok);
       continue;
     }
     
@@ -426,11 +433,11 @@
                        strlen("<span class='macro'>"));
     RB.InsertTextBefore(TokOffs+TokLen, "</span>", strlen("</span>"));
     
-    std::string Expansion = PP.getSpelling(Tok);
+    std::string Expansion = PP->getSpelling(Tok);
     unsigned LineLen = Expansion.size();
     
     // Okay, eat this token, getting the next one.
-    PP.Lex(Tok);
+    PP->Lex(Tok);
     
     // Skip all the rest of the tokens that are part of this macro
     // instantiation.  It would be really nice to pop up a window with all the
@@ -444,9 +451,9 @@
       }
       
       LineLen -= Expansion.size();
-      Expansion += ' ' + PP.getSpelling(Tok);
+      Expansion += ' ' + PP->getSpelling(Tok);
       LineLen += Expansion.size();
-      PP.Lex(Tok);
+      PP->Lex(Tok);
     }
 
     // Insert the information about the expansion inside the macro span.
