diff --git a/include/clang/Frontend/PreprocessorOptions.h b/include/clang/Frontend/PreprocessorOptions.h
index b918a74..6ae6843 100644
--- a/include/clang/Frontend/PreprocessorOptions.h
+++ b/include/clang/Frontend/PreprocessorOptions.h
@@ -37,6 +37,9 @@
   /// empty.
   std::string ImplicitPTHInclude;
 
+  /// If given, a PTH cache file to use for speeding up header parsing.
+  std::string TokenCache;
+
 public:
   PreprocessorOptions() : UsePredefines(true) {}
 
@@ -63,6 +66,13 @@
     ImplicitPTHInclude = Value;
   }
 
+  const std::string &getTokenCache() const {
+    return TokenCache;
+  }
+  void setTokenCache(llvm::StringRef Value) {
+    TokenCache = Value;
+  }
+
   void addMacroDef(llvm::StringRef Name) {
     Macros.push_back(std::make_pair(Name, false));
   }
diff --git a/tools/clang-cc/Options.cpp b/tools/clang-cc/Options.cpp
index 2428d3a..e2b4931 100644
--- a/tools/clang-cc/Options.cpp
+++ b/tools/clang-cc/Options.cpp
@@ -491,6 +491,10 @@
 ImplicitIncludePTH("include-pth", llvm::cl::value_desc("file"),
                    llvm::cl::desc("Include file before parsing"));
 
+static llvm::cl::opt<std::string>
+TokenCache("token-cache", llvm::cl::value_desc("path"),
+           llvm::cl::desc("Use specified token cache file"));
+
 static llvm::cl::list<std::string>
 U_macros("U", llvm::cl::value_desc("macro"), llvm::cl::Prefix,
          llvm::cl::desc("Undefine the specified macro"));
@@ -776,6 +780,19 @@
   Opts.setImplicitPCHInclude(ImplicitIncludePCH);
   Opts.setImplicitPTHInclude(ImplicitIncludePTH);
 
+  // Select the token cache file, we don't support more than one currently so we
+  // can't have both an implicit-pth and a token cache file.
+  if (TokenCache.getPosition() && ImplicitIncludePTH.getPosition()) {
+    // FIXME: Don't fail like this.
+    fprintf(stderr, "error: cannot use both -token-cache and -include-pth "
+            "options\n");
+    exit(1);
+  }
+  if (TokenCache.getPosition())
+    Opts.setTokenCache(TokenCache);
+  else
+    Opts.setTokenCache(ImplicitIncludePTH);
+
   // Use predefines?
   Opts.setUsePredefines(!UndefMacros);
 
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index 5803b12..a40dcee 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -254,10 +254,6 @@
            llvm::cl::desc("Print the amount of time each "
                           "phase of compilation takes"));
 
-static llvm::cl::opt<std::string>
-TokenCache("token-cache", llvm::cl::value_desc("path"),
-           llvm::cl::desc("Use specified token cache file"));
-
 static llvm::cl::opt<bool>
 VerifyDiagnostics("verify",
                   llvm::cl::desc("Verify emitted diagnostics and warnings"));
@@ -381,20 +377,12 @@
                    const DependencyOutputOptions &DepOpts,
                    TargetInfo &Target, SourceManager &SourceMgr,
                    FileManager &FileMgr) {
+  // Create a PTH manager if we are using some form of a token cache.
   PTHManager *PTHMgr = 0;
-  if (!TokenCache.empty() && !PPOpts.getImplicitPTHInclude().empty()) {
-    fprintf(stderr, "error: cannot use both -token-cache and -include-pth "
-            "options\n");
-    exit(1);
-  }
+  if (!PPOpts.getTokenCache().empty())
+    PTHMgr = PTHManager::Create(PPOpts.getTokenCache(), Diags);
 
-  // Use PTH?
-  if (!TokenCache.empty() || !PPOpts.getImplicitPTHInclude().empty()) {
-    const std::string& x = TokenCache.empty() ?
-      PPOpts.getImplicitPTHInclude() : TokenCache;
-    PTHMgr = PTHManager::Create(x, Diags);
-  }
-
+  // FIXME: Don't fail like this.
   if (Diags.hasErrorOccurred())
     exit(1);
 
