diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index f3ba997..c8af349 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -134,9 +134,7 @@
  */
 typedef struct {
   const char *Spelling;
-  /* A 1 value indicates the clang_ indexing API needed to allocate the string
-     (and it must be freed by clang_disposeString()). */
-  int MustFreeString;
+  unsigned private_flags;
 } CXString;
 
 /**
diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c
index edaf116..c0c7a29 100644
--- a/tools/c-index-test/c-index-test.c
+++ b/tools/c-index-test/c-index-test.c
@@ -1306,7 +1306,7 @@
           else {
             CXString x;
             x.Spelling = I[2];
-            x.MustFreeString = 0;
+            x.private_flags = 0;
             print_usr(clang_constructUSR_ObjCIvar(I[1], x));
           }
 
@@ -1333,7 +1333,7 @@
           else {
             CXString x;
             x.Spelling = I[3];
-            x.MustFreeString = 0;
+            x.private_flags = 0;
             print_usr(clang_constructUSR_ObjCMethod(I[1], atoi(I[2]), x));
           }
           I += 4;
@@ -1363,7 +1363,7 @@
           else {
             CXString x;
             x.Spelling = I[2];
-            x.MustFreeString = 0;
+            x.private_flags = 0;
             print_usr(clang_constructUSR_ObjCProperty(I[1], x));
           }
           I += 3;
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index b573c06..a25570e 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -14,6 +14,7 @@
 
 #include "CIndexer.h"
 #include "CXCursor.h"
+#include "CXString.h"
 #include "CXType.h"
 #include "CXSourceLocation.h"
 #include "CIndexDiagnostic.h"
@@ -4575,51 +4576,6 @@
 } // end: extern "C"
 
 //===----------------------------------------------------------------------===//
-// CXString Operations.
-//===----------------------------------------------------------------------===//
-
-extern "C" {
-const char *clang_getCString(CXString string) {
-  return string.Spelling;
-}
-
-void clang_disposeString(CXString string) {
-  if (string.MustFreeString && string.Spelling)
-    free((void*)string.Spelling);
-}
-
-} // end: extern "C"
-
-namespace clang { namespace cxstring {
-CXString createCXString(const char *String, bool DupString){
-  CXString Str;
-  if (DupString) {
-    Str.Spelling = strdup(String);
-    Str.MustFreeString = 1;
-  } else {
-    Str.Spelling = String;
-    Str.MustFreeString = 0;
-  }
-  return Str;
-}
-
-CXString createCXString(llvm::StringRef String, bool DupString) {
-  CXString Result;
-  if (DupString || (!String.empty() && String.data()[String.size()] != 0)) {
-    char *Spelling = (char *)malloc(String.size() + 1);
-    memmove(Spelling, String.data(), String.size());
-    Spelling[String.size()] = 0;
-    Result.Spelling = Spelling;
-    Result.MustFreeString = 1;
-  } else {
-    Result.Spelling = String.data();
-    Result.MustFreeString = 0;
-  }
-  return Result;
-}
-}}
-
-//===----------------------------------------------------------------------===//
 // Misc. utility functions.
 //===----------------------------------------------------------------------===//
 
diff --git a/tools/libclang/CIndexCXX.cpp b/tools/libclang/CIndexCXX.cpp
index 3ade519..fca89ed 100644
--- a/tools/libclang/CIndexCXX.cpp
+++ b/tools/libclang/CIndexCXX.cpp
@@ -18,7 +18,6 @@
 #include "clang/AST/DeclTemplate.h"
 
 using namespace clang;
-using namespace clang::cxstring;
 using namespace clang::cxcursor;
 
 extern "C" {
diff --git a/tools/libclang/CIndexCodeCompletion.cpp b/tools/libclang/CIndexCodeCompletion.cpp
index f22f5ee..7e8cdb2 100644
--- a/tools/libclang/CIndexCodeCompletion.cpp
+++ b/tools/libclang/CIndexCodeCompletion.cpp
@@ -13,6 +13,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "CIndexer.h"
+#include "CXString.h"
 #include "CIndexDiagnostic.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/FileManager.h"
diff --git a/tools/libclang/CIndexDiagnostic.cpp b/tools/libclang/CIndexDiagnostic.cpp
index 036a28b..84f39e3 100644
--- a/tools/libclang/CIndexDiagnostic.cpp
+++ b/tools/libclang/CIndexDiagnostic.cpp
@@ -13,6 +13,7 @@
 #include "CIndexDiagnostic.h"
 #include "CIndexer.h"
 #include "CXSourceLocation.h"
+#include "CXString.h"
 
 #include "clang/Frontend/ASTUnit.h"
 #include "clang/Frontend/FrontendDiagnostic.h"
diff --git a/tools/libclang/CIndexUSRs.cpp b/tools/libclang/CIndexUSRs.cpp
index e22980d..adc77d1 100644
--- a/tools/libclang/CIndexUSRs.cpp
+++ b/tools/libclang/CIndexUSRs.cpp
@@ -13,6 +13,7 @@
 
 #include "CIndexer.h"
 #include "CXCursor.h"
+#include "CXString.h"
 #include "clang/AST/DeclTemplate.h"
 #include "clang/AST/DeclVisitor.h"
 #include "clang/Frontend/ASTUnit.h"
diff --git a/tools/libclang/CIndexer.h b/tools/libclang/CIndexer.h
index 32cfa97..8bcdce3 100644
--- a/tools/libclang/CIndexer.h
+++ b/tools/libclang/CIndexer.h
@@ -24,13 +24,6 @@
   class CrashRecoveryContext;
 }
 
-namespace clang {
-namespace cxstring {
-  CXString createCXString(const char *String, bool DupString = false);
-  CXString createCXString(llvm::StringRef String, bool DupString = true);  
-}
-}
-
 class CIndexer {
   bool OnlyLocalDecls;
   bool DisplayDiagnostics;
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt
index 9a2a2a6..d1d9972 100644
--- a/tools/libclang/CMakeLists.txt
+++ b/tools/libclang/CMakeLists.txt
@@ -27,6 +27,7 @@
   CIndexUSRs.cpp
   CIndexer.cpp
   CXCursor.cpp
+  CXString.cpp
   CXType.cpp
   ../../include/clang-c/Index.h
 )
diff --git a/tools/libclang/CXCursor.cpp b/tools/libclang/CXCursor.cpp
index f5941e7..a8cbca5 100644
--- a/tools/libclang/CXCursor.cpp
+++ b/tools/libclang/CXCursor.cpp
@@ -14,6 +14,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "CXCursor.h"
+#include "CXString.h"
 #include "clang/Frontend/ASTUnit.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/DeclCXX.h"
diff --git a/tools/libclang/CXType.cpp b/tools/libclang/CXType.cpp
index 05912b1..45a5bed 100644
--- a/tools/libclang/CXType.cpp
+++ b/tools/libclang/CXType.cpp
@@ -13,6 +13,7 @@
 
 #include "CIndexer.h"
 #include "CXCursor.h"
+#include "CXString.h"
 #include "CXType.h"
 #include "clang/AST/Expr.h"
 #include "clang/AST/Type.h"
