diff --git a/clang/examples/wpa/clang-wpa.cpp b/clang/examples/wpa/clang-wpa.cpp
index a234931..bbb9e14 100644
--- a/clang/examples/wpa/clang-wpa.cpp
+++ b/clang/examples/wpa/clang-wpa.cpp
@@ -14,9 +14,11 @@
 
 #include "clang/Basic/FileManager.h"
 #include "clang/Basic/SourceManager.h"
+#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/TransferFuncs.h"
+#include "clang/StaticAnalyzer/Core/CheckerManager.h"
 #include "clang/StaticAnalyzer/Checkers/LocalCheckers.h"
 #include "clang/Frontend/ASTUnit.h"
 #include "clang/Frontend/CompilerInstance.h"
@@ -26,6 +28,7 @@
 #include "clang/Index/DeclReferenceMap.h"
 #include "clang/Index/SelectorMap.h"
 #include "clang/Lex/Preprocessor.h"
+#include "clang/Basic/TargetInfo.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/raw_ostream.h"
@@ -131,20 +134,41 @@
   // Create an analysis engine.
   Preprocessor &PP = TU->getPreprocessor();
 
-  // Hard code options for now.
+  AnalyzerOptions Opts;
+
+  // Hard code options and checkers for now.
+
+  Opts.MaxNodes = 300000;
+  Opts.MaxLoop = 3;
+  Opts.InlineCall = true;
+  Opts.CFGAddImplicitDtors = true;
+  Opts.EagerlyTrimEGraph = true;
+
+  Opts.CheckersControlList.push_back(std::make_pair("core", true));
+  if (PP.getTargetInfo().getTriple().getOS() != llvm::Triple::Win32)
+    Opts.CheckersControlList.push_back(std::make_pair("unix", true));
+  if (PP.getTargetInfo().getTriple().getVendor() == llvm::Triple::Apple)
+    Opts.CheckersControlList.push_back(std::make_pair("macosx", true));
+
+  // Checks to perform for Objective-C/Objective-C++.
+  if (PP.getLangOptions().ObjC1)
+    Opts.CheckersControlList.push_back(std::make_pair("cocoa", true));
+
+  llvm::OwningPtr<ento::CheckerManager> checkerMgr;
+  checkerMgr.reset(ento::registerCheckers(Opts, PP.getDiagnostics()));
+
   using namespace clang::ento;
   AnalysisManager AMgr(TU->getASTContext(), PP.getDiagnostics(),
                        PP.getLangOptions(), /* PathDiagnostic */ 0,
                        CreateRegionStoreManager,
-                       CreateRangeConstraintManager, &Idxer,
-                       /* MaxNodes */ 300000, /* MaxVisit */ 3,
-                       /* VisualizeEG */ false, /* VisualizeEGUbi */ false,
-                       /* PurgeDead */ true, /* EagerlyAssume */ false,
-                       /* TrimGraph */ false, /* InlineCall */ true, 
-                       /* UseUnoptimizedCFG */ false,
-                       /* addImplicitDtors */ true,
-                       /* addInitializers */ false,
-                       /* reclaimeNodes */ true);
+                       CreateRangeConstraintManager, checkerMgr.get(), &Idxer,
+                       Opts.MaxNodes, Opts.MaxLoop,
+                       Opts.VisualizeEGDot, Opts.VisualizeEGUbi,
+                       Opts.PurgeDead, Opts.EagerlyAssume,
+                       Opts.TrimGraph, Opts.InlineCall,
+                       Opts.UnoptimizedCFG, Opts.CFGAddImplicitDtors,
+                       Opts.CFGAddInitializers,
+                       Opts.EagerlyTrimEGraph);
 
   TransferFuncs* TF = MakeCFRefCountTF(AMgr.getASTContext(), /*GC*/false,
                                          AMgr.getLangOptions());
