diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index b87b1f4..e1b56ad 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -1589,7 +1589,7 @@
   if (SynthesizePID) {
     const ObjCIvarDecl *OID = SynthesizePID->getPropertyIvarDecl();
     S += ",V";
-    S += OID->getName();
+    S += OID->getNameAsString();
   }
 
   // FIXME: OBJCGC: weak & strong
@@ -1695,7 +1695,7 @@
         FieldDecl *FD = RDecl->getMember(i);
         if (NameFields) {
           S += '"';
-          S += FD->getName();
+          S += FD->getNameAsString();
           S += '"';
         }
         
diff --git a/lib/AST/DeclarationName.cpp b/lib/AST/DeclarationName.cpp
index ed4b7c6..649b092 100644
--- a/lib/AST/DeclarationName.cpp
+++ b/lib/AST/DeclarationName.cpp
@@ -125,7 +125,7 @@
   case CXXConstructorName: {
     QualType ClassType = getCXXNameType();
     if (const RecordType *ClassRec = ClassType->getAsRecordType())
-      return ClassRec->getDecl()->getName();
+      return ClassRec->getDecl()->getNameAsString();
     return ClassType.getAsString();
   }
 
@@ -133,7 +133,7 @@
     std::string Result = "~";
     QualType Type = getCXXNameType();
     if (const RecordType *Rec = Type->getAsRecordType())
-      Result += Rec->getDecl()->getName();
+      Result += Rec->getDecl()->getNameAsString();
     else
       Result += Type.getAsString();
     return Result;
@@ -160,7 +160,7 @@
     std::string Result = "operator ";
     QualType Type = getCXXNameType();
     if (const RecordType *Rec = Type->getAsRecordType())
-      Result += Rec->getDecl()->getName();
+      Result += Rec->getDecl()->getNameAsString();
     else
       Result += Type.getAsString();
     return Result;
diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp
index b73dc53..f11536f 100644
--- a/lib/AST/StmtDumper.cpp
+++ b/lib/AST/StmtDumper.cpp
@@ -218,7 +218,7 @@
       }
     }
     
-    std::string Name = VD->getName();
+    std::string Name = VD->getNameAsString();
     VD->getType().getAsStringInternal(Name);
     fprintf(F, "%s", Name.c_str());
     
@@ -296,7 +296,7 @@
     default: fprintf(F,"Decl"); break;
   }
   
-  fprintf(F, "='%s' %p", Node->getDecl()->getName().c_str(), 
+  fprintf(F, "='%s' %p", Node->getDecl()->getNameAsString().c_str(), 
           (void*)Node->getDecl());
 }
 
diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp
index 8a7d3eb..fcebdab 100644
--- a/lib/AST/StmtPrinter.cpp
+++ b/lib/AST/StmtPrinter.cpp
@@ -106,7 +106,7 @@
   // nodes are where they need to be.
   if (TypedefDecl *localType = dyn_cast<TypedefDecl>(D)) {
     OS << "typedef " << localType->getUnderlyingType().getAsString();
-    OS << " " << localType->getName();
+    OS << " " << localType->getNameAsString();
   } else if (ValueDecl *VD = dyn_cast<ValueDecl>(D)) {
     // Emit storage class for vardecls.
     if (VarDecl *V = dyn_cast<VarDecl>(VD)) {
@@ -120,7 +120,7 @@
       }
     }
     
-    std::string Name = VD->getName();
+    std::string Name = VD->getNameAsString();
     VD->getType().getAsStringInternal(Name);
     OS << Name;
     
@@ -483,7 +483,7 @@
 }
 
 void StmtPrinter::VisitDeclRefExpr(DeclRefExpr *Node) {
-  OS << Node->getDecl()->getName();
+  OS << Node->getDecl()->getNameAsString();
 }
 
 void StmtPrinter::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) {
@@ -491,7 +491,7 @@
     PrintExpr(Node->getBase());
     OS << (Node->isArrow() ? "->" : ".");
   }
-  OS << Node->getDecl()->getName();
+  OS << Node->getDecl()->getNameAsString();
 }
 
 void StmtPrinter::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) {
@@ -658,7 +658,7 @@
   } else {
     MemberExpr *ME = cast<MemberExpr>(E);
     bool IsFirst = PrintOffsetOfDesignator(ME->getBase());
-    OS << (IsFirst ? "" : ".") << ME->getMemberDecl()->getName();
+    OS << (IsFirst ? "" : ".") << ME->getMemberDecl()->getNameAsString();
     return false;
   }
 }
@@ -705,7 +705,7 @@
   
   FieldDecl *Field = Node->getMemberDecl();
   assert(Field && "MemberExpr should alway reference a field!");
-  OS << Field->getName();
+  OS << Field->getNameAsString();
 }
 void StmtPrinter::VisitExtVectorElementExpr(ExtVectorElementExpr *Node) {
   PrintExpr(Node->getBase());
@@ -984,15 +984,15 @@
 }
 
 void StmtPrinter::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) {
-  OS << "@encode(" << Node->getEncodedType().getAsString() << ")";
+  OS << "@encode(" << Node->getEncodedType().getAsString() << ')';
 }
 
 void StmtPrinter::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) {
-  OS << "@selector(" << Node->getSelector().getAsString() << ")";
+  OS << "@selector(" << Node->getSelector().getAsString() << ')';
 }
 
 void StmtPrinter::VisitObjCProtocolExpr(ObjCProtocolExpr *Node) {
-  OS << "@protocol(" << Node->getProtocol()->getName() << ")";
+  OS << "@protocol(" << Node->getProtocol()->getNameAsString() << ')';
 }
 
 void StmtPrinter::VisitObjCMessageExpr(ObjCMessageExpr *Mess) {
@@ -1009,7 +1009,7 @@
       if (i < selector.getNumArgs()) {
         if (i > 0) OS << ' ';
         if (selector.getIdentifierInfoForSlot(i))
-          OS << selector.getIdentifierInfoForSlot(i)->getName() << ":";
+          OS << selector.getIdentifierInfoForSlot(i)->getName() << ':';
         else
            OS << ":";
       }
@@ -1039,7 +1039,7 @@
     for (BlockDecl::param_iterator AI = BD->param_begin(),
          E = BD->param_end(); AI != E; ++AI) {
       if (AI != BD->param_begin()) OS << ", ";
-      ParamStr = (*AI)->getName();
+      ParamStr = (*AI)->getNameAsString();
       (*AI)->getType().getAsStringInternal(ParamStr);
       OS << ParamStr;
     }
@@ -1054,7 +1054,7 @@
 }
 
 void StmtPrinter::VisitBlockDeclRefExpr(BlockDeclRefExpr *Node) {
-  OS << Node->getDecl()->getName();
+  OS << Node->getDecl()->getNameAsString();
 }
 //===----------------------------------------------------------------------===//
 // Stmt method implementations
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index 3898ba0..6aa3c8e 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -1012,7 +1012,7 @@
                                   std::string &InnerString) const {
   if (!InnerString.empty())    // Prefix the basic type, e.g. 'typedefname X'.
     InnerString = ' ' + InnerString;
-  std::string ObjCQIString = getDecl()->getName();
+  std::string ObjCQIString = getDecl()->getNameAsString();
   ObjCQIString += '<';
   bool isFirst = true;
   for (qual_iterator I = qual_begin(), E = qual_end(); I != E; ++I) {
@@ -1020,7 +1020,7 @@
       isFirst = false;
     else
       ObjCQIString += ',';
-    ObjCQIString += (*I)->getName();
+    ObjCQIString += (*I)->getNameAsString();
   }
   ObjCQIString += '>';
   InnerString = ObjCQIString + InnerString;
@@ -1033,7 +1033,7 @@
   ObjCQIString += '<';
   int num = getNumProtocols();
   for (int i = 0; i < num; i++) {
-    ObjCQIString += getProtocols(i)->getName();
+    ObjCQIString += getProtocols(i)->getNameAsString();
     if (i < num-1)
       ObjCQIString += ',';
   }
