diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index 16f54ca..f80f364 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -429,42 +429,22 @@
 }
 
 const ObjCInterfaceType *Type::getAsObjCInterfaceType() const {
-  // Are we directly an ObjCInterface type?
-  if (const ObjCInterfaceType *VTy = dyn_cast<ObjCInterfaceType>(this))
-    return VTy;
-  
-  // If the canonical form of this type isn't the right kind, reject it.
-  if (!isa<ObjCInterfaceType>(CanonicalType)) {  
-    // Look through type qualifiers
-    if (isa<ObjCInterfaceType>(CanonicalType.getUnqualifiedType()))
-      return CanonicalType.getUnqualifiedType()->getAsObjCInterfaceType();
-    return 0;
-  }
-  
-  // If this is a typedef for an objc interface type, strip the typedef off
-  // without losing all typedef information.
-  return getDesugaredType()->getAsObjCInterfaceType();
+  // There is no sugar for ObjCInterfaceType's, just return the canonical
+  // type pointer if it is the right class.
+  return dyn_cast<ObjCInterfaceType>(CanonicalType);
 }
 
 const ObjCQualifiedInterfaceType *
 Type::getAsObjCQualifiedInterfaceType() const {
-  // Are we directly an ObjCQualifiedInterfaceType?
-  if (const ObjCQualifiedInterfaceType *VTy =
-         dyn_cast<ObjCQualifiedInterfaceType>(this))
-    return VTy;
-  
-  // If the canonical form of this type isn't the right kind, reject it.
-  if (!isa<ObjCQualifiedInterfaceType>(CanonicalType)) {  
-    // Look through type qualifiers
-    if (isa<ObjCQualifiedInterfaceType>(CanonicalType.getUnqualifiedType()))
-      return CanonicalType.getUnqualifiedType()->
-         getAsObjCQualifiedInterfaceType();
-    return 0;
-  }
-  
-  // If this is a typedef for an objc qual interface type, strip the typedef off
-  // without losing all typedef information.
-  return getDesugaredType()->getAsObjCQualifiedInterfaceType();
+  // There is no sugar for ObjCQualifiedInterfaceType's, just return the canonical
+  // type pointer if it is the right class.
+  return dyn_cast<ObjCQualifiedInterfaceType>(CanonicalType);
+}
+
+const ObjCQualifiedIdType *Type::getAsObjCQualifiedIdType() const {
+  // There is no sugar for ObjCQualifiedIdType's, just return the canonical
+  // type pointer if it is the right class.
+  return dyn_cast<ObjCQualifiedIdType>(CanonicalType);
 }
 
 
