diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 1b26b72..d044fee 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1038,6 +1038,22 @@
                                    (const unsigned char *)BlobStart,
                                    NumStatHits, NumStatMisses));
       break;
+
+    case pch::EXT_VECTOR_DECLS:
+      if (!ExtVectorDecls.empty()) {
+        Error("Duplicate EXT_VECTOR_DECLS record in PCH file");
+        return Failure;
+      }
+      ExtVectorDecls.swap(Record);
+      break;
+
+    case pch::OBJC_CATEGORY_IMPLEMENTATIONS:
+      if (!ObjCCategoryImpls.empty()) {
+        Error("Duplicate OBJC_CATEGORY_IMPLEMENTATIONS record in PCH file");
+        return Failure;
+      }
+      ObjCCategoryImpls.swap(Record);
+      break;
     }
   }
   Error("Premature end of bitstream");
@@ -1703,6 +1719,19 @@
     NamedDecl *D = cast<NamedDecl>(GetDecl(LocallyScopedExternalDecls[I]));
     SemaObj->LocallyScopedExternalDecls[D->getDeclName()] = D;
   }
+
+  // If there were any ext_vector type declarations, deserialize them
+  // and add them to Sema's vector of such declarations.
+  for (unsigned I = 0, N = ExtVectorDecls.size(); I != N; ++I)
+    SemaObj->ExtVectorDecls.push_back(
+                               cast<TypedefDecl>(GetDecl(ExtVectorDecls[I])));
+
+  // If there were any Objective-C category implementations,
+  // deserialize them and add them to Sema's vector of such
+  // definitions.
+  for (unsigned I = 0, N = ObjCCategoryImpls.size(); I != N; ++I)
+    SemaObj->ObjCCategoryImpls.push_back(
+                cast<ObjCCategoryImplDecl>(GetDecl(ObjCCategoryImpls[I])));
 }
 
 IdentifierInfo* PCHReader::get(const char *NameStart, const char *NameEnd) {
diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp
index 8ff688e..8178934 100644
--- a/lib/Frontend/PCHWriter.cpp
+++ b/lib/Frontend/PCHWriter.cpp
@@ -355,6 +355,8 @@
   RECORD(SOURCE_LOCATION_OFFSETS);
   RECORD(SOURCE_LOCATION_PRELOADS);
   RECORD(STAT_CACHE);
+  RECORD(EXT_VECTOR_DECLS);
+  RECORD(OBJC_CATEGORY_IMPLEMENTATIONS);
 
   // SourceManager Block.
   BLOCK(SOURCE_MANAGER_BLOCK);
@@ -1656,6 +1658,17 @@
        TD != TDEnd; ++TD)
     AddDeclRef(TD->second, LocallyScopedExternalDecls);
 
+  // Build a record containing all of the ext_vector declarations.
+  RecordData ExtVectorDecls;
+  for (unsigned I = 0, N = SemaRef.ExtVectorDecls.size(); I != N; ++I)
+    AddDeclRef(SemaRef.ExtVectorDecls[I], ExtVectorDecls);
+
+  // Build a record containing all of the Objective-C category
+  // implementations.
+  RecordData ObjCCategoryImpls;
+  for (unsigned I = 0, N = SemaRef.ObjCCategoryImpls.size(); I != N; ++I)
+    AddDeclRef(SemaRef.ObjCCategoryImpls[I], ObjCCategoryImpls);
+
   // Write the remaining PCH contents.
   RecordData Record;
   Stream.EnterSubblock(pch::PCH_BLOCK_ID, 4);
@@ -1727,6 +1740,14 @@
   if (!LocallyScopedExternalDecls.empty())
     Stream.EmitRecord(pch::LOCALLY_SCOPED_EXTERNAL_DECLS, 
                       LocallyScopedExternalDecls);
+
+  // Write the record containing ext_vector type names.
+  if (!ExtVectorDecls.empty())
+    Stream.EmitRecord(pch::EXT_VECTOR_DECLS, ExtVectorDecls);
+
+  // Write the record containing Objective-C category implementations.
+  if (!ObjCCategoryImpls.empty())
+    Stream.EmitRecord(pch::OBJC_CATEGORY_IMPLEMENTATIONS, ObjCCategoryImpls);
   
   // Some simple statistics
   Record.clear();
