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();
         }
         
