diff --git a/lib/Basic/FileManager.cpp b/lib/Basic/FileManager.cpp
index 4484a0d..afc9284 100644
--- a/lib/Basic/FileManager.cpp
+++ b/lib/Basic/FileManager.cpp
@@ -19,6 +19,7 @@
 
 #include "clang/Basic/FileManager.h"
 #include "llvm/ADT/SmallString.h"
+#include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Path.h"
 #include "llvm/Config/config.h"
 using namespace clang;
diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp
index 88da73f..fa1dc4e 100644
--- a/lib/Basic/SourceManager.cpp
+++ b/lib/Basic/SourceManager.cpp
@@ -16,6 +16,7 @@
 #include "clang/Basic/FileManager.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Path.h"
 #include <algorithm>
 using namespace clang;
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index e27e52e..8e26925 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -478,19 +478,19 @@
   // FIXME: The following handlers should use a callback mechanism, we
   // don't know what the client would like to do.
   if (Arg *A = C.getArgs().getLastArg(options::OPT_print_file_name_EQ)) {
-    llvm::outs() << GetFilePath(A->getValue(C.getArgs()), TC).toString() 
+    llvm::outs() << GetFilePath(A->getValue(C.getArgs()), TC).str() 
                  << "\n";
     return false;
   }
 
   if (Arg *A = C.getArgs().getLastArg(options::OPT_print_prog_name_EQ)) {
-    llvm::outs() << GetProgramPath(A->getValue(C.getArgs()), TC).toString() 
+    llvm::outs() << GetProgramPath(A->getValue(C.getArgs()), TC).str() 
                  << "\n";
     return false;
   }
 
   if (C.getArgs().hasArg(options::OPT_print_libgcc_file_name)) {
-    llvm::outs() << GetFilePath("libgcc.a", TC).toString() << "\n";
+    llvm::outs() << GetFilePath("libgcc.a", TC).str() << "\n";
     return false;
   }
 
@@ -1239,7 +1239,7 @@
   P.eraseFromDisk(false, 0);
 
   P.appendSuffix(Suffix);
-  return P.toString();
+  return P.str();
 }
 
 const HostInfo *Driver::GetHostInfo(const char *TripleStr) const {
diff --git a/lib/Frontend/AnalysisConsumer.cpp b/lib/Frontend/AnalysisConsumer.cpp
index 33097c6..0098681 100644
--- a/lib/Frontend/AnalysisConsumer.cpp
+++ b/lib/Frontend/AnalysisConsumer.cpp
@@ -475,11 +475,10 @@
   if (!ErrMsg.empty())
     return 0;
 
-  llvm::errs() << "Writing '" << Filename << "'.\n";
+  llvm::errs() << "Writing '" << Filename.str() << "'.\n";
   
   llvm::OwningPtr<llvm::raw_fd_ostream> Stream;
-  std::string filename = Filename.toString();
-  Stream.reset(new llvm::raw_fd_ostream(filename.c_str(), ErrMsg,
+  Stream.reset(new llvm::raw_fd_ostream(Filename.c_str(), ErrMsg,
                                         llvm::raw_fd_ostream::F_Force));
 
   if (!ErrMsg.empty())
diff --git a/lib/Frontend/CacheTokens.cpp b/lib/Frontend/CacheTokens.cpp
index 1852e7d..7365882 100644
--- a/lib/Frontend/CacheTokens.cpp
+++ b/lib/Frontend/CacheTokens.cpp
@@ -543,10 +543,10 @@
   
   if (!MainFilePath.isAbsolute()) {
     llvm::sys::Path P = llvm::sys::Path::GetCurrentDirectory();
-    P.appendComponent(MainFilePath.toString());
-    MainFileName = P.toString();
+    P.appendComponent(MainFilePath.str());
+    MainFileName = P.str();
   } else {
-    MainFileName = MainFilePath.toString();
+    MainFileName = MainFilePath.str();
   }
 
   // Create the PTHWriter.
diff --git a/lib/Frontend/FixItRewriter.cpp b/lib/Frontend/FixItRewriter.cpp
index 1499fa9..030efd4 100644
--- a/lib/Frontend/FixItRewriter.cpp
+++ b/lib/Frontend/FixItRewriter.cpp
@@ -55,7 +55,7 @@
     Path.eraseSuffix();
     Path.appendSuffix("fixit." + Suffix);
     std::string Err;
-    OutFile = new llvm::raw_fd_ostream(Path.toString().c_str(), Err,
+    OutFile = new llvm::raw_fd_ostream(Path.c_str(), Err,
                                        llvm::raw_fd_ostream::F_Binary |
                                        llvm::raw_fd_ostream::F_Force);
     OwnedStream.reset(OutFile);
diff --git a/lib/Frontend/HTMLDiagnostics.cpp b/lib/Frontend/HTMLDiagnostics.cpp
index 838b162..4c84548 100644
--- a/lib/Frontend/HTMLDiagnostics.cpp
+++ b/lib/Frontend/HTMLDiagnostics.cpp
@@ -151,7 +151,7 @@
   
     if (!Directory.isDirectory()) {
       llvm::errs() << "warning: could not create directory '"
-                   << Directory.toString() << "'\n"
+                   << Directory.str() << "'\n"
                    << "reason: " << ErrorMsg << '\n'; 
       
       noDir = true;
@@ -236,7 +236,7 @@
   
   if (!llvm::sys::Path(Entry->getName()).isAbsolute()) {
     llvm::sys::Path P = llvm::sys::Path::GetCurrentDirectory();
-    DirName = P.toString() + "/";
+    DirName = P.str() + "/";
   }
     
   // Add the name of the file as an <h1> tag.  
@@ -329,10 +329,10 @@
     H.appendSuffix("html");
     F.renamePathOnDisk(H, NULL);
     
-    os.open(H.toString().c_str());
+    os.open(H.c_str());
     
     if (!os) {
-      llvm::errs() << "warning: could not create file '" << F.toString() << "'\n";
+      llvm::errs() << "warning: could not create file '" << F.str() << "'\n";
       return;
     }
 
diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp
index ad070cd..2172f61 100644
--- a/lib/Frontend/InitHeaderSearch.cpp
+++ b/lib/Frontend/InitHeaderSearch.cpp
@@ -17,10 +17,10 @@
 #include "clang/Basic/LangOptions.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Path.h"
 #include "llvm/Config/config.h"
 #include <cstdio>
-#include <vector>
 using namespace clang;
 
 void InitHeaderSearch::AddPath(const std::string &Path, IncludeDirGroup Group,
diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp
index 877c788..466cbaf 100644
--- a/lib/Frontend/InitPreprocessor.cpp
+++ b/lib/Frontend/InitPreprocessor.cpp
@@ -78,7 +78,7 @@
     
   // Escape double quotes etc.
   Buf.push_back('"');
-  std::string EscapedFile = Lexer::Stringify(Path.toString());
+  std::string EscapedFile = Lexer::Stringify(Path.str());
   Buf.insert(Buf.end(), EscapedFile.begin(), EscapedFile.end());
   Buf.push_back('"');
 }
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp
index 5e1ea0b..dc0ee35 100644
--- a/lib/Frontend/PCHWriter.cpp
+++ b/lib/Frontend/PCHWriter.cpp
@@ -542,10 +542,10 @@
   
     if (!MainFilePath.isAbsolute()) {
       llvm::sys::Path P = llvm::sys::Path::GetCurrentDirectory();
-      P.appendComponent(MainFilePath.toString());
-      MainFileName = P.toString();
+      P.appendComponent(MainFilePath.str());
+      MainFileName = P.str();
     } else {
-      MainFileName = MainFilePath.toString();
+      MainFileName = MainFilePath.str();
     }
 
     const char *MainFileNameStr = MainFileName.c_str();
@@ -895,8 +895,8 @@
         std::string FilenameStr;
         if (!FilePath.isAbsolute()) {
           llvm::sys::Path P = llvm::sys::Path::GetCurrentDirectory();
-          P.appendComponent(FilePath.toString());
-          FilenameStr = P.toString();
+          P.appendComponent(FilePath.str());
+          FilenameStr = P.str();
           Filename = FilenameStr.c_str();
         }
         
