diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp
index ff4e97b..ea2528b 100644
--- a/lib/Driver/ToolChain.cpp
+++ b/lib/Driver/ToolChain.cpp
@@ -11,12 +11,13 @@
 
 #include "clang/Driver/Action.h"
 #include "clang/Driver/Driver.h"
+#include "clang/Driver/HostInfo.h"
 
 using namespace clang::driver;
 
-ToolChain::ToolChain(Driver &_TheDriver, const char *_Arch, 
+ToolChain::ToolChain(const HostInfo &_Host, const char *_Arch, 
                      const char *_Platform, const char *_OS) 
-  : TheDriver(_TheDriver), Arch(_Arch), Platform(_Platform), OS(_OS) {
+  : Host(_Host), Arch(_Arch), Platform(_Platform), OS(_OS) {
 }
 
 ToolChain::~ToolChain() {
@@ -24,38 +25,38 @@
 
 llvm::sys::Path ToolChain::GetFilePath(const Compilation &C, 
                                        const char *Name) const {
-  return TheDriver.GetFilePath(Name, this);
+  return Host.getDriver().GetFilePath(Name, this);
   
 }
 
 llvm::sys::Path ToolChain::GetProgramPath(const Compilation &C, 
                                           const char *Name) const {
-  return TheDriver.GetProgramPath(Name, this);
+  return Host.getDriver().GetProgramPath(Name, this);
 }
 
 bool ToolChain::ShouldUseClangCompiler(const Compilation &C, 
                                        const JobAction &JA) const {
   // Check if user requested no clang, or clang doesn't understand
   // this type (we only handle single inputs for now).
-  if (TheDriver.CCCNoClang || JA.size() != 1 || 
+  if (Host.getDriver().CCCNoClang || JA.size() != 1 || 
       !types::isAcceptedByClang((*JA.begin())->getType()))
     return false;
 
   // Otherwise make sure this is an action clang undertands.
   if (isa<PreprocessJobAction>(JA)) {
-    if (TheDriver.CCCNoClangCPP)
+    if (Host.getDriver().CCCNoClangCPP)
       return false;
   } else if (!isa<PrecompileJobAction>(JA) && !isa<CompileJobAction>(JA))
     return false;
 
   // Avoid CXX if the user requested.
-  if (TheDriver.CCCNoClangCXX && types::isCXX((*JA.begin())->getType()))
+  if (Host.getDriver().CCCNoClangCXX && types::isCXX((*JA.begin())->getType()))
     return false;
 
   // Finally, don't use clang if this isn't one of the user specified
   // archs to build.
-  if (!TheDriver.CCCClangArchs.empty() && 
-      TheDriver.CCCClangArchs.count(getArchName()))
+  if (!Host.getDriver().CCCClangArchs.empty() && 
+      Host.getDriver().CCCClangArchs.count(getArchName()))
     return false;
 
   return true;
