diff --git a/lib/System/Cygwin/Path.cpp b/lib/System/Cygwin/Path.cpp
index 3b95665..01a40da 100644
--- a/lib/System/Cygwin/Path.cpp
+++ b/lib/System/Cygwin/Path.cpp
@@ -43,7 +43,7 @@
   free(pathname);
   assert(result.isValid() && "tempnam didn't create a valid pathname!");
   if (0 != mkdir(result.c_str(), S_IRWXU))
-    ThrowErrno(result.get() + ": Can't create temporary directory");
+    ThrowErrno(result.toString() + ": Can't create temporary directory");
   return result;
 }
 
diff --git a/lib/System/SunOS/Path.cpp b/lib/System/SunOS/Path.cpp
index 7fac37d..db6db19 100644
--- a/lib/System/SunOS/Path.cpp
+++ b/lib/System/SunOS/Path.cpp
@@ -43,7 +43,7 @@
   free(pathname);
   assert(result.isValid() && "tempnam didn't create a valid pathname!");
   if (0 != mkdir(result.c_str(), S_IRWXU))
-    ThrowErrno(result.get() + ": Can't create temporary directory");
+    ThrowErrno(result.toString() + ": Can't create temporary directory");
   return result;
 }
 
diff --git a/lib/System/Win32/MappedFile.cpp b/lib/System/Win32/MappedFile.cpp
index 237e196..d81ef6a 100644
--- a/lib/System/Win32/MappedFile.cpp
+++ b/lib/System/Win32/MappedFile.cpp
@@ -42,7 +42,7 @@
   if (info_->hFile == INVALID_HANDLE_VALUE) {
     delete info_;
     info_ = NULL;
-    ThrowError(std::string("Can't open file: ") + path_.get());
+    ThrowError(std::string("Can't open file: ") + path_.toString());
   }
 
   LARGE_INTEGER size;
@@ -51,7 +51,7 @@
     CloseHandle(info_->hFile);
     delete info_;
     info_ = NULL;
-    ThrowError(std::string("Can't get size of file: ") + path_.get());
+    ThrowError(std::string("Can't get size of file: ") + path_.toString());
   }
 }
 
@@ -84,14 +84,14 @@
       prot = PAGE_READWRITE;
     info_->hMapping = CreateFileMapping(info_->hFile, NULL, prot, 0, 0, NULL);
     if (info_->hMapping == NULL)
-      ThrowError(std::string("Can't map file: ") + path_.get());
+      ThrowError(std::string("Can't map file: ") + path_.toString());
 
     prot = (options_ & WRITE_ACCESS) ? FILE_MAP_WRITE : FILE_MAP_READ;
     base_ = MapViewOfFileEx(info_->hMapping, prot, 0, 0, 0, NULL);
     if (base_ == NULL) {
       CloseHandle(info_->hMapping);
       info_->hMapping = NULL;
-      ThrowError(std::string("Can't map file: ") + path_.get());
+      ThrowError(std::string("Can't map file: ") + path_.toString());
     }
   }
   return base_;
@@ -117,9 +117,9 @@
     LARGE_INTEGER eof;
     eof.QuadPart = new_size;
     if (!SetFilePointerEx(info_->hFile, eof, NULL, FILE_BEGIN))
-      ThrowError(std::string("Can't set end of file: ") + path_.get());
+      ThrowError(std::string("Can't set end of file: ") + path_.toString());
     if (!SetEndOfFile(info_->hFile))
-      ThrowError(std::string("Can't set end of file: ") + path_.get());
+      ThrowError(std::string("Can't set end of file: ") + path_.toString());
     info_->size = new_size;
   }
 
diff --git a/lib/System/Win32/MappedFile.inc b/lib/System/Win32/MappedFile.inc
index 237e196..d81ef6a 100644
--- a/lib/System/Win32/MappedFile.inc
+++ b/lib/System/Win32/MappedFile.inc
@@ -42,7 +42,7 @@
   if (info_->hFile == INVALID_HANDLE_VALUE) {
     delete info_;
     info_ = NULL;
-    ThrowError(std::string("Can't open file: ") + path_.get());
+    ThrowError(std::string("Can't open file: ") + path_.toString());
   }
 
   LARGE_INTEGER size;
@@ -51,7 +51,7 @@
     CloseHandle(info_->hFile);
     delete info_;
     info_ = NULL;
-    ThrowError(std::string("Can't get size of file: ") + path_.get());
+    ThrowError(std::string("Can't get size of file: ") + path_.toString());
   }
 }
 
@@ -84,14 +84,14 @@
       prot = PAGE_READWRITE;
     info_->hMapping = CreateFileMapping(info_->hFile, NULL, prot, 0, 0, NULL);
     if (info_->hMapping == NULL)
-      ThrowError(std::string("Can't map file: ") + path_.get());
+      ThrowError(std::string("Can't map file: ") + path_.toString());
 
     prot = (options_ & WRITE_ACCESS) ? FILE_MAP_WRITE : FILE_MAP_READ;
     base_ = MapViewOfFileEx(info_->hMapping, prot, 0, 0, 0, NULL);
     if (base_ == NULL) {
       CloseHandle(info_->hMapping);
       info_->hMapping = NULL;
-      ThrowError(std::string("Can't map file: ") + path_.get());
+      ThrowError(std::string("Can't map file: ") + path_.toString());
     }
   }
   return base_;
@@ -117,9 +117,9 @@
     LARGE_INTEGER eof;
     eof.QuadPart = new_size;
     if (!SetFilePointerEx(info_->hFile, eof, NULL, FILE_BEGIN))
-      ThrowError(std::string("Can't set end of file: ") + path_.get());
+      ThrowError(std::string("Can't set end of file: ") + path_.toString());
     if (!SetEndOfFile(info_->hFile))
-      ThrowError(std::string("Can't set end of file: ") + path_.get());
+      ThrowError(std::string("Can't set end of file: ") + path_.toString());
     info_->size = new_size;
   }
 
diff --git a/lib/System/Win32/Program.cpp b/lib/System/Win32/Program.cpp
index ddc9396..d6bd86a 100644
--- a/lib/System/Win32/Program.cpp
+++ b/lib/System/Win32/Program.cpp
@@ -71,7 +71,7 @@
 Program::ExecuteAndWait(const Path& path, 
                         const std::vector<std::string>& args) {
   if (!path.executable())
-    throw path.get() + " is not executable"; 
+    throw path.toString() + " is not executable"; 
 
   // Windows wants a command line, not an array of args, to pass to the new
   // process.  We have to concatenate them all, while quoting the args that
@@ -124,10 +124,11 @@
   PROCESS_INFORMATION pi;
   memset(&pi, 0, sizeof(pi));
 
-  if (!CreateProcess(path.get().c_str(), command, NULL, NULL, FALSE, 0,
+  if (!CreateProcess(path.c_str(), command, NULL, NULL, FALSE, 0,
                      NULL, NULL, &si, &pi))
   {
-    ThrowError(std::string("Couldn't execute program '") + path.get() + "'");
+    ThrowError(std::string("Couldn't execute program '") + 
+               path.toString() + "'");
   }
 
   // Wait for it to terminate.
@@ -142,7 +143,8 @@
   CloseHandle(pi.hThread);
 
   if (!rc)
-    ThrowError(std::string("Failed getting status for program '") + path.get() + "'");
+    ThrowError(std::string("Failed getting status for program '") + 
+               path.toString() + "'");
 
   return status;
 }
diff --git a/lib/System/Win32/Program.inc b/lib/System/Win32/Program.inc
index ddc9396..d6bd86a 100644
--- a/lib/System/Win32/Program.inc
+++ b/lib/System/Win32/Program.inc
@@ -71,7 +71,7 @@
 Program::ExecuteAndWait(const Path& path, 
                         const std::vector<std::string>& args) {
   if (!path.executable())
-    throw path.get() + " is not executable"; 
+    throw path.toString() + " is not executable"; 
 
   // Windows wants a command line, not an array of args, to pass to the new
   // process.  We have to concatenate them all, while quoting the args that
@@ -124,10 +124,11 @@
   PROCESS_INFORMATION pi;
   memset(&pi, 0, sizeof(pi));
 
-  if (!CreateProcess(path.get().c_str(), command, NULL, NULL, FALSE, 0,
+  if (!CreateProcess(path.c_str(), command, NULL, NULL, FALSE, 0,
                      NULL, NULL, &si, &pi))
   {
-    ThrowError(std::string("Couldn't execute program '") + path.get() + "'");
+    ThrowError(std::string("Couldn't execute program '") + 
+               path.toString() + "'");
   }
 
   // Wait for it to terminate.
@@ -142,7 +143,8 @@
   CloseHandle(pi.hThread);
 
   if (!rc)
-    ThrowError(std::string("Failed getting status for program '") + path.get() + "'");
+    ThrowError(std::string("Failed getting status for program '") + 
+               path.toString() + "'");
 
   return status;
 }
