diff --git a/lib/AST/DeclGroup.cpp b/lib/AST/DeclGroup.cpp
index 34b37da..bd79faf 100644
--- a/lib/AST/DeclGroup.cpp
+++ b/lib/AST/DeclGroup.cpp
@@ -15,6 +15,8 @@
 #include "clang/AST/Decl.h"
 #include "clang/AST/ASTContext.h"
 #include "llvm/Support/Allocator.h"
+#include "llvm/Bitcode/Serialize.h"
+#include "llvm/Bitcode/Deserialize.h"
 
 using namespace clang;
 
@@ -26,6 +28,24 @@
   return static_cast<DeclGroup*>(mem);
 }
 
+/// Emit - Serialize a DeclGroup to Bitcode.
+void DeclGroup::Emit(llvm::Serializer& S) const {
+  S.EmitInt(NumDecls);
+  S.BatchEmitOwnedPtrs(NumDecls, &(*this)[0]);
+}
+
+/// Read - Deserialize a DeclGroup from Bitcode.
+DeclGroup* DeclGroup::Create(llvm::Deserializer& D, ASTContext& C) {
+  unsigned NumDecls = (unsigned) D.ReadInt();
+  unsigned size = sizeof(DeclGroup) + sizeof(Decl*) * NumDecls;
+  unsigned alignment = llvm::AlignOf<DeclGroup>::Alignment;  
+  DeclGroup* DG = (DeclGroup*) C.getAllocator().Allocate(size, alignment);
+  new (DG) DeclGroup();
+  DG->NumDecls = NumDecls;
+  D.BatchReadOwnedPtrs(NumDecls, &(*DG)[0], C);
+  return DG;
+}
+  
 DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) {
   assert (numdecls > 0);
   assert (decls);
@@ -58,3 +78,45 @@
   
   D = 0;
 }
+
+void DeclGroupRef::Emit(llvm::Serializer& S) const {
+  if (getKind() == DeclKind) {
+    S.EmitBool(false);
+    S.EmitPtr(D);
+  }
+  else {
+    S.EmitBool(true);
+    S.EmitPtr(reinterpret_cast<DeclGroup*>(reinterpret_cast<uintptr_t>(D) 
+                                           & ~Mask));        
+  }
+}
+
+DeclGroupRef DeclGroupRef::ReadVal(llvm::Deserializer& D) {
+  if (D.ReadBool())
+    return DeclGroupRef(D.ReadPtr<Decl>());
+  
+  return DeclGroupRef(D.ReadPtr<DeclGroup>());
+}
+
+void DeclGroupOwningRef::Emit(llvm::Serializer& S) const {
+  if (getKind() == DeclKind) {
+    S.EmitBool(false);
+    S.EmitOwnedPtr(D);
+  }
+  else {
+    S.EmitBool(true);
+    S.EmitOwnedPtr(reinterpret_cast<DeclGroup*>(reinterpret_cast<uintptr_t>(D)
+                                                & ~Mask));        
+  }
+}
+
+DeclGroupOwningRef DeclGroupOwningRef::ReadVal(llvm::Deserializer& D,
+                                               ASTContext& C) {
+  if (D.ReadBool()) {
+    DeclGroupOwningRef DG(D.ReadOwnedPtr<Decl>(C));
+    return DG;
+  }
+
+  DeclGroupOwningRef DG(D.ReadOwnedPtr<DeclGroup>(C));
+  return DG;
+}
