diff --git a/lib/Frontend/AnalysisConsumer.cpp b/lib/Frontend/AnalysisConsumer.cpp
index 44d79be..5af6c01 100644
--- a/lib/Frontend/AnalysisConsumer.cpp
+++ b/lib/Frontend/AnalysisConsumer.cpp
@@ -88,6 +88,8 @@
     StoreManagerCreator CreateStoreMgr;
     ConstraintManagerCreator CreateConstraintMgr;
 
+    llvm::OwningPtr<AnalysisManager> Mgr;
+
     AnalysisConsumer(Diagnostic &diags, Preprocessor* pp,
                      PreprocessorFactory* ppf,
                      const LangOptions& lopts,
@@ -152,6 +154,12 @@
     
     virtual void Initialize(ASTContext &Context) {
       Ctx = &Context;
+      Mgr.reset(new AnalysisManager(*Ctx, Diags, LOpts, PD.get(), 
+                                    CreateStoreMgr, CreateConstraintMgr,
+                                    Opts.AnalyzerDisplayProgress, 
+                                    Opts.VisualizeEGDot, Opts.VisualizeEGUbi, 
+                                    Opts.PurgeDead, Opts.EagerlyAssume,
+                                    Opts.TrimGraph));
     }
     
     virtual void HandleTopLevelDecl(DeclGroupRef D) {
@@ -215,14 +223,9 @@
 void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) {
 
   if(!TranslationUnitActions.empty()) {
-    AnalysisManager mgr(*Ctx, Diags, LOpts, PD.get(), 
-                        CreateStoreMgr, CreateConstraintMgr,
-                        Opts.AnalyzerDisplayProgress, Opts.VisualizeEGDot,
-                        Opts.VisualizeEGUbi, Opts.PurgeDead, Opts.EagerlyAssume,
-                        Opts.TrimGraph);
     for (Actions::iterator I = TranslationUnitActions.begin(), 
          E = TranslationUnitActions.end(); I != E; ++I)
-      (*I)(mgr);  
+      (*I)(*Mgr);  
   }
 
   if (!ObjCImplementationActions.empty()) {
@@ -253,17 +256,11 @@
       !Ctx->getSourceManager().isFromMainFile(D->getLocation()))
     return;  
 
-  // Create an AnalysisManager that will manage the state for analyzing
-  // this method/function.
-  AnalysisManager mgr(D, *Ctx, Diags, LOpts, PD.get(), 
-                      CreateStoreMgr, CreateConstraintMgr,
-                      Opts.AnalyzerDisplayProgress, Opts.VisualizeEGDot,
-                      Opts.VisualizeEGUbi, Opts.PurgeDead, Opts.EagerlyAssume,
-                      Opts.TrimGraph);
+  Mgr->setContext(D);
   
   // Dispatch on the actions.  
   for (Actions::iterator I = actions.begin(), E = actions.end(); I != E; ++I)
-    (*I)(mgr);  
+    (*I)(*Mgr);  
 }
 
 //===----------------------------------------------------------------------===//
