diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 51f4a5d..bc548e4 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1418,9 +1418,20 @@
     ClearSourceMgr = true;
     break;
   }
-  
-  if (Consumer)
-    ParseAST(PP, Consumer.get(), Stats, !DisableFree);
+
+  if (Consumer) {
+    TranslationUnit *TU = 0;
+    if (DisableFree) {
+      ASTContext *Context = new ASTContext(PP.getLangOptions(),
+                                           PP.getSourceManager(),
+                                           PP.getTargetInfo(),
+                                           PP.getIdentifierTable(),
+                                           PP.getSelectorTable(),
+                                           /* FreeMemory = */ false);
+      TU = new TranslationUnit(*Context);
+    }
+    ParseAST(PP, Consumer.get(), TU, Stats);
+  }
 
   if (VerifyDiagnostics)
     if (CheckDiagnostics(PP))
diff --git a/include/clang/Sema/ParseAST.h b/include/clang/Sema/ParseAST.h
index 91d7f1a..b18e5a6 100644
--- a/include/clang/Sema/ParseAST.h
+++ b/include/clang/Sema/ParseAST.h
@@ -17,14 +17,17 @@
 namespace clang {
   class Preprocessor;
   class ASTConsumer;
-  
+  class TranslationUnit;
+
   /// ParseAST - Parse the entire file specified, notifying the ASTConsumer as
   /// the file is parsed.
   ///
-  /// \param FreeMemory If false, the memory used for AST elements is
-  /// not released.
+  /// \param TU If 0, then memory used for AST elements will be allocated only
+  /// for the duration of the ParseAST() call. In this case, the client should
+  /// not access any AST elements after ParseAST() returns.
   void ParseAST(Preprocessor &pp, ASTConsumer *C, 
-                bool PrintStats = false, bool FreeMemory = true);
+                TranslationUnit *TU = 0,
+                bool PrintStats = false);
 
 }  // end namespace clang
 
diff --git a/lib/Sema/ParseAST.cpp b/lib/Sema/ParseAST.cpp
index 67af285..6923476 100644
--- a/lib/Sema/ParseAST.cpp
+++ b/lib/Sema/ParseAST.cpp
@@ -11,6 +11,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <llvm/ADT/OwningPtr.h>
 #include "clang/Sema/ParseAST.h"
 #include "clang/AST/ASTConsumer.h"
 #include "clang/AST/Stmt.h"
@@ -26,23 +27,31 @@
 /// ParseAST - Parse the entire file specified, notifying the ASTConsumer as
 /// the file is parsed.
 ///
-/// \param FreeMemory If false, the memory used for AST elements is
-/// not released.
-void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, 
-                     bool PrintStats, bool FreeMemory) {
+/// \param TU If 0, then memory used for AST elements will be allocated only
+/// for the duration of the ParseAST() call. In this case, the client should
+/// not access any AST elements after ParseAST() returns.
+void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer,
+                     TranslationUnit *TU, bool PrintStats) {
   // Collect global stats on Decls/Stmts (until we have a module streamer).
   if (PrintStats) {
     Decl::CollectingStats(true);
     Stmt::CollectingStats(true);
   }
-  
-  ASTContext *Context = 
-    new ASTContext(PP.getLangOptions(), PP.getSourceManager(),
-                   PP.getTargetInfo(),
-                   PP.getIdentifierTable(), PP.getSelectorTable(),
-                   FreeMemory);
-  TranslationUnit *TU = new TranslationUnit(*Context);
-  Sema S(PP, *Context, *Consumer);
+
+  llvm::OwningPtr<ASTContext> ContextOwner;
+  llvm::OwningPtr<TranslationUnit> TranslationUnitOwner;
+  if (TU == 0) {
+    ASTContext *Context = new ASTContext(PP.getLangOptions(),
+                                         PP.getSourceManager(),
+                                         PP.getTargetInfo(),
+                                         PP.getIdentifierTable(),
+                                         PP.getSelectorTable());
+    ContextOwner.reset(Context);
+    TU = new TranslationUnit(*Context);
+    TranslationUnitOwner.reset(TU);
+  }
+
+  Sema S(PP, TU->getContext(), *Consumer);
   Parser P(PP, S);
   PP.EnterMainSourceFile();
     
@@ -68,7 +77,7 @@
   if (PrintStats) {
     fprintf(stderr, "\nSTATISTICS:\n");
     P.getActions().PrintStats();
-    Context->PrintStats();
+    TU->getContext().PrintStats();
     Decl::PrintStats();
     Stmt::PrintStats();
     Consumer->PrintStats();
@@ -76,9 +85,4 @@
     Decl::CollectingStats(false);
     Stmt::CollectingStats(false);
   }
-
-  if (FreeMemory) {
-    delete TU;
-    delete Context;      
-  }
 }
