diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 8ea917c..3ba1f80 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1729,13 +1729,15 @@
     return Context->getObjCQualifiedInterfaceType(ItfD, Protos.data(), NumProtos);
   }
 
-  case pch::TYPE_OBJC_QUALIFIED_ID: {
+  case pch::TYPE_OBJC_OBJECT_POINTER: {
     unsigned Idx = 0;
+    ObjCInterfaceDecl *ItfD = 
+      cast_or_null<ObjCInterfaceDecl>(GetDecl(Record[Idx++]));
     unsigned NumProtos = Record[Idx++];
     llvm::SmallVector<ObjCProtocolDecl*, 4> Protos;
     for (unsigned I = 0; I != NumProtos; ++I)
       Protos.push_back(cast<ObjCProtocolDecl>(GetDecl(Record[Idx++])));
-    return Context->getObjCQualifiedIdType(Protos.data(), NumProtos);
+    return Context->getObjCObjectPointerType(ItfD, Protos.data(), NumProtos);
   }
   }
   // Suppress a GCC warning
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp
index 765fecb..3b1eb08 100644
--- a/lib/Frontend/PCHWriter.cpp
+++ b/lib/Frontend/PCHWriter.cpp
@@ -229,12 +229,14 @@
   Code = pch::TYPE_OBJC_QUALIFIED_INTERFACE;
 }
 
-void PCHTypeWriter::VisitObjCQualifiedIdType(const ObjCQualifiedIdType *T) {
+void
+PCHTypeWriter::VisitObjCObjectPointerType(const ObjCObjectPointerType *T) {
+  Writer.AddDeclRef(T->getDecl(), Record);
   Record.push_back(T->getNumProtocols());
-  for (ObjCQualifiedIdType::qual_iterator I = T->qual_begin(),
+  for (ObjCInterfaceType::qual_iterator I = T->qual_begin(),
        E = T->qual_end(); I != E; ++I)
     Writer.AddDeclRef(*I, Record);
-  Code = pch::TYPE_OBJC_QUALIFIED_ID;
+  Code = pch::TYPE_OBJC_OBJECT_POINTER;
 }
 
 //===----------------------------------------------------------------------===//
@@ -407,7 +409,7 @@
   RECORD(TYPE_ENUM);
   RECORD(TYPE_OBJC_INTERFACE);
   RECORD(TYPE_OBJC_QUALIFIED_INTERFACE);
-  RECORD(TYPE_OBJC_QUALIFIED_ID);
+  RECORD(TYPE_OBJC_OBJECT_POINTER);
   // Statements and Exprs can occur in the Types block.
   AddStmtsExprs(Stream, Record);
 
diff --git a/lib/Frontend/RewriteBlocks.cpp b/lib/Frontend/RewriteBlocks.cpp
index 8393574..d20d5cd 100644
--- a/lib/Frontend/RewriteBlocks.cpp
+++ b/lib/Frontend/RewriteBlocks.cpp
@@ -132,7 +132,7 @@
       
     if (const PointerType *PT = OCT->getAsPointerType()) {
       if (isa<ObjCInterfaceType>(PT->getPointeeType()) || 
-          isa<ObjCQualifiedIdType>(PT->getPointeeType()))
+          PT->getPointeeType()->isObjCQualifiedIdType())
         return true;
     }
     return false;
diff --git a/lib/Frontend/RewriteObjC.cpp b/lib/Frontend/RewriteObjC.cpp
index f382704..dce2710 100644
--- a/lib/Frontend/RewriteObjC.cpp
+++ b/lib/Frontend/RewriteObjC.cpp
@@ -356,7 +356,7 @@
         
       if (const PointerType *PT = OCT->getAsPointerType()) {
         if (isa<ObjCInterfaceType>(PT->getPointeeType()) || 
-            isa<ObjCQualifiedIdType>(PT->getPointeeType()))
+            PT->getPointeeType()->isObjCQualifiedIdType())
           return true;
       }
       return false;
