diff --git a/include/clang/AST/ASTConsumer.h b/include/clang/AST/ASTConsumer.h
index 545192c..70daebf 100644
--- a/include/clang/AST/ASTConsumer.h
+++ b/include/clang/AST/ASTConsumer.h
@@ -16,7 +16,6 @@
 
 namespace clang {
   class ASTContext;
-  class TranslationUnit;
   class Decl;
   class TagDecl;
   class HandleTagDeclDefinition;
@@ -40,7 +39,7 @@
   
   /// HandleTranslationUnit - This method is called when the ASTs for entire
   ///  translation unit have been parsed.
-  virtual void HandleTranslationUnit(TranslationUnit& TU) {}    
+  virtual void HandleTranslationUnit(ASTContext &Ctx) {}    
   
   /// HandleTagDeclDefinition - This callback is invoked each time a TagDecl
   /// (e.g. struct, union, enum, class) is completed.  This allows the client to
diff --git a/lib/CodeGen/ModuleBuilder.cpp b/lib/CodeGen/ModuleBuilder.cpp
index 6c0b68b..d41f133 100644
--- a/lib/CodeGen/ModuleBuilder.cpp
+++ b/lib/CodeGen/ModuleBuilder.cpp
@@ -74,7 +74,7 @@
       Builder->UpdateCompletedType(D);
     }
 
-    virtual void HandleTranslationUnit(TranslationUnit& TU) {
+    virtual void HandleTranslationUnit(ASTContext &Ctx) {
       if (Diags.hasErrorOccurred()) {
         M.reset();
         return;
diff --git a/lib/Sema/ParseAST.cpp b/lib/Sema/ParseAST.cpp
index bbca551..756a398 100644
--- a/lib/Sema/ParseAST.cpp
+++ b/lib/Sema/ParseAST.cpp
@@ -56,7 +56,7 @@
     }
   };
   
-  Consumer->HandleTranslationUnit(TU);
+  Consumer->HandleTranslationUnit(TU.getContext());
 
   if (PrintStats) {
     fprintf(stderr, "\nSTATISTICS:\n");
diff --git a/tools/clang-cc/ASTConsumers.cpp b/tools/clang-cc/ASTConsumers.cpp
index 288225d..18b4246 100644
--- a/tools/clang-cc/ASTConsumers.cpp
+++ b/tools/clang-cc/ASTConsumers.cpp
@@ -658,8 +658,8 @@
 public:
   DeclContextPrinter() : Out(llvm::errs()) {}
 
-  void HandleTranslationUnit(TranslationUnit& TU) {
-    PrintDeclContext(TU.getContext().getTranslationUnitDecl(), 4);
+  void HandleTranslationUnit(ASTContext &C) {
+    PrintDeclContext(C.getTranslationUnitDecl(), 4);
   }
 
   void PrintDeclContext(const DeclContext* DC, unsigned Indentation);
@@ -935,8 +935,7 @@
 public:
   InheritanceViewer(const std::string& cname) : clsname(cname) {}
   
-  void HandleTranslationUnit(TranslationUnit& TU) {
-    ASTContext& C = TU.getContext();
+  void HandleTranslationUnit(ASTContext &C) {
     for (ASTContext::type_iterator I=C.types_begin(),E=C.types_end(); I!=E; ++I)
       if (RecordType *T = dyn_cast<RecordType>(*I)) {
         if (CXXRecordDecl *D = dyn_cast<CXXRecordDecl>(T->getDecl())) {
@@ -974,7 +973,7 @@
   SingleFileSerializer(const llvm::sys::Path& F, Diagnostic& diags)
     : ASTSerializer(diags), FName(F) {}    
   
-  virtual void HandleTranslationUnit(TranslationUnit& TU) {
+  virtual void HandleTranslationUnit(ASTContext &Ctx) {
     if (Diags.hasErrorOccurred())
       return;
     
@@ -982,7 +981,7 @@
     std::vector<unsigned char> Buffer;
     Buffer.reserve(256*1024);
     
-    EmitASTBitcodeBuffer(TU.getContext(), Buffer);
+    EmitASTBitcodeBuffer(Ctx, Buffer);
     
     // Write the bits to disk. 
     if (FILE* fp = fopen(FName.c_str(),"wb")) {
@@ -998,11 +997,11 @@
   BuildSerializer(const llvm::sys::Path& dir, Diagnostic& diags)
     : ASTSerializer(diags), EmitDir(dir) {}
   
-  virtual void HandleTranslationUnit(TranslationUnit& TU) {
+  virtual void HandleTranslationUnit(ASTContext &Ctx) {
     if (Diags.hasErrorOccurred())
       return;
     
-    SourceManager& SourceMgr = TU.getContext().getSourceManager();
+    SourceManager& SourceMgr = Ctx.getSourceManager();
     FileID ID = SourceMgr.getMainFileID();
     assert(!ID.isInvalid() && "MainFileID not set!");
     const FileEntry* FE = SourceMgr.getFileEntryForID(ID);
@@ -1033,7 +1032,7 @@
     std::vector<unsigned char> Buffer;
     Buffer.reserve(256*1024);
     
-    EmitASTBitcodeBuffer(TU.getContext(), Buffer);
+    EmitASTBitcodeBuffer(Ctx, Buffer);
     
     // Write the bits to disk. 
     if (FILE* fp = fopen(FName.c_str(),"wb")) {
diff --git a/tools/clang-cc/AnalysisConsumer.cpp b/tools/clang-cc/AnalysisConsumer.cpp
index bda3df0..03e7ecc 100644
--- a/tools/clang-cc/AnalysisConsumer.cpp
+++ b/tools/clang-cc/AnalysisConsumer.cpp
@@ -223,7 +223,7 @@
     }
     
     virtual void HandleTopLevelDecl(Decl *D);
-    virtual void HandleTranslationUnit(TranslationUnit &TU);
+    virtual void HandleTranslationUnit(ASTContext &C);
     
     void HandleCode(Decl* D, Stmt* Body, Actions& actions);
   };
@@ -444,7 +444,7 @@
   }
 }
 
-void AnalysisConsumer::HandleTranslationUnit(TranslationUnit& TU) {
+void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) {
 
   if(!TranslationUnitActions.empty()) {
     AnalysisManager mgr(*this, AnalyzerDisplayProgress);
@@ -454,7 +454,7 @@
   }
 
   if (!ObjCImplementationActions.empty()) {
-    TranslationUnitDecl *TUD = TU.getContext().getTranslationUnitDecl();
+    TranslationUnitDecl *TUD = C.getTranslationUnitDecl();
     
     for (DeclContext::decl_iterator I = TUD->decls_begin(),E = TUD->decls_end();
          I != E; ++I)
diff --git a/tools/clang-cc/Backend.cpp b/tools/clang-cc/Backend.cpp
index 39d5c90..ee2d0c5 100644
--- a/tools/clang-cc/Backend.cpp
+++ b/tools/clang-cc/Backend.cpp
@@ -131,13 +131,13 @@
         LLVMIRGeneration.stopTimer();
     }
     
-    virtual void HandleTranslationUnit(TranslationUnit& TU) {
+    virtual void HandleTranslationUnit(ASTContext &C) {
       {
         PrettyStackTraceString CrashInfo("Per-file LLVM IR generation");
         if (CompileOpts.TimePasses)
           LLVMIRGeneration.startTimer();
 
-        Gen->HandleTranslationUnit(TU);
+        Gen->HandleTranslationUnit(C);
 
         if (CompileOpts.TimePasses)
           LLVMIRGeneration.stopTimer();
diff --git a/tools/clang-cc/RewriteObjC.cpp b/tools/clang-cc/RewriteObjC.cpp
index 2a34604..ee2334b 100644
--- a/tools/clang-cc/RewriteObjC.cpp
+++ b/tools/clang-cc/RewriteObjC.cpp
@@ -15,7 +15,6 @@
 #include "clang/Rewrite/Rewriter.h"
 #include "clang/AST/AST.h"
 #include "clang/AST/ASTConsumer.h"
-#include "clang/AST/TranslationUnit.h"
 #include "clang/AST/ParentMap.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/IdentifierTable.h"
@@ -134,7 +133,7 @@
 
     ~RewriteObjC() {}
     
-    virtual void HandleTranslationUnit(TranslationUnit& TU);
+    virtual void HandleTranslationUnit(ASTContext &C);
     
     void ReplaceStmt(Stmt *Old, Stmt *New) {
       Stmt *ReplacingStmt = ReplacedNodes[Old];
@@ -4516,7 +4515,7 @@
   // Nothing yet.
 }
 
-void RewriteObjC::HandleTranslationUnit(TranslationUnit& TU) {
+void RewriteObjC::HandleTranslationUnit(ASTContext &C) {
   // Get the top-level buffer that this corresponds to.
   
   // Rewrite tabs if we care.
diff --git a/tools/clang-cc/SerializationTest.cpp b/tools/clang-cc/SerializationTest.cpp
index 770f9b3..d12a0af 100644
--- a/tools/clang-cc/SerializationTest.cpp
+++ b/tools/clang-cc/SerializationTest.cpp
@@ -42,7 +42,7 @@
   
   ~SerializationTest() {}
   
-  virtual void HandleTranslationUnit(TranslationUnit& TU);
+  virtual void HandleTranslationUnit(ASTContext &C);
   
 private:
   bool Serialize(llvm::sys::Path& Filename, llvm::sys::Path& FNameDeclPrint,
@@ -142,7 +142,7 @@
   };
 }
 
-void SerializationTest::HandleTranslationUnit(TranslationUnit& TU) {
+void SerializationTest::HandleTranslationUnit(ASTContext &Ctx) {
 
   std::string ErrMsg;
   llvm::sys::Path Dir = llvm::sys::Path::GetTemporaryDirectory(&ErrMsg);
@@ -157,7 +157,7 @@
   llvm::sys::Path FNameDeclBefore = Dir;
   FNameDeclBefore.appendComponent("test.decl_before.txt");
 
-  if (FNameDeclBefore.makeUnique(true,&ErrMsg)) {
+  if (FNameDeclBefore.makeUnique(true, &ErrMsg)) {
     llvm::cerr << "Error: " << ErrMsg << "\n";
     return;
   }
@@ -165,7 +165,7 @@
   llvm::sys::Path FNameDeclAfter = Dir;
   FNameDeclAfter.appendComponent("test.decl_after.txt");
   
-  if (FNameDeclAfter.makeUnique(true,&ErrMsg)) {
+  if (FNameDeclAfter.makeUnique(true, &ErrMsg)) {
     llvm::cerr << "Error: " << ErrMsg << "\n";
     return;
   }
@@ -173,13 +173,13 @@
   llvm::sys::Path ASTFilename = Dir;
   ASTFilename.appendComponent("test.ast");
   
-  if (ASTFilename.makeUnique(true,&ErrMsg)) {
+  if (ASTFilename.makeUnique(true, &ErrMsg)) {
     llvm::cerr << "Error: " << ErrMsg << "\n";
     return;
   }
   
   // Serialize and then deserialize the ASTs.
-  bool status = Serialize(ASTFilename, FNameDeclBefore, TU.getContext());
+  bool status = Serialize(ASTFilename, FNameDeclBefore, Ctx);
   assert (status && "Serialization failed.");  
   status = Deserialize(ASTFilename, FNameDeclAfter);
   assert (status && "Deserialization failed.");
