diff --git a/AST/Type.cpp b/AST/Type.cpp
index ae04c4e..1c61c68 100644
--- a/AST/Type.cpp
+++ b/AST/Type.cpp
@@ -70,6 +70,7 @@
 
 // FIXME: move inline
 bool Type::isPointerType() const { return isa<PointerType>(CanonicalType); }
+bool Type::isReferenceType() const { return isa<ReferenceType>(CanonicalType); }
 
 const PointerType *Type::getAsPointerType() const {
   // If this is directly a pointer type, return it.
@@ -83,7 +84,7 @@
   return 0;
 }
 
-const ReferenceType *Type::isReferenceType() const {
+const ReferenceType *Type::getAsReferenceType() const {
   // If this is directly a reference type, return it.
   if (const ReferenceType *RTy = dyn_cast<ReferenceType>(this))
     return RTy;
diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp
index 89aef4e..0db9879 100644
--- a/Sema/SemaExpr.cpp
+++ b/Sema/SemaExpr.cpp
@@ -700,7 +700,7 @@
   QualType t = e->getType();
   assert(!t.isNull() && "DefaultFunctionArrayConversion - missing type");
 
-  if (const ReferenceType *ref = t->isReferenceType()) {
+  if (const ReferenceType *ref = t->getAsReferenceType()) {
     promoteExprToType(e, ref->getReferenceeType()); // C++ [expr]
     t = e->getType();
   }
@@ -719,7 +719,7 @@
   QualType t = expr->getType();
   assert(!t.isNull() && "UsualUnaryConversions - missing type");
   
-  if (const ReferenceType *ref = t->isReferenceType()) {
+  if (const ReferenceType *ref = t->getAsReferenceType()) {
     promoteExprToType(expr, ref->getReferenceeType()); // C++ [expr]
     t = expr->getType();
   }
diff --git a/Sema/SemaType.cpp b/Sema/SemaType.cpp
index d700023..7085d83 100644
--- a/Sema/SemaType.cpp
+++ b/Sema/SemaType.cpp
@@ -136,7 +136,7 @@
       T = Context.getPointerType(T).getQualifiedType(DeclType.Ptr.TypeQuals);
       break;
     case DeclaratorChunk::Reference:
-      if (const ReferenceType *RT = T->isReferenceType()) {
+      if (const ReferenceType *RT = T->getAsReferenceType()) {
         // C++ 8.3.2p4: There shall be no references to references ...
         Diag(D.getIdentifierLoc(),
              diag::err_illegal_decl_reference_to_reference,
@@ -166,7 +166,7 @@
         Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_functions,
              D.getIdentifier()->getName());
         T = Context.getPointerType(T);
-      } else if (const ReferenceType *RT = T->isReferenceType()) {
+      } else if (const ReferenceType *RT = T->getAsReferenceType()) {
         // C++ 8.3.2p4: There shall be no ... arrays of references ...
         Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_of_references,
              D.getIdentifier()->getName());
diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h
index b35e19f..c109655 100644
--- a/include/clang/AST/Type.h
+++ b/include/clang/AST/Type.h
@@ -240,9 +240,11 @@
   /// Derived types (C99 6.2.5p20).
   bool isDerivedType() const;
   const FunctionType *isFunctionType() const;   
+
   bool isPointerType() const;
+  bool isReferenceType() const;
   const PointerType *getAsPointerType() const;
-  const ReferenceType *isReferenceType() const;
+  const ReferenceType *getAsReferenceType() const;
   const ArrayType *isArrayType() const;
   const RecordType *isRecordType() const;
   const TagType *isStructureType() const;   
