diff --git a/include/clang/AST/DeclGroup.h b/include/clang/AST/DeclGroup.h
index 9b5aa1c..c9d0d65 100644
--- a/include/clang/AST/DeclGroup.h
+++ b/include/clang/AST/DeclGroup.h
@@ -57,7 +57,6 @@
 };
     
 class DeclGroupRef {
-protected:
   enum Kind { SingleDeclKind=0x0, DeclGroupKind=0x1, Mask=0x1 };  
   Decl* D;
 
diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h
index 2882212..2521721 100644
--- a/include/clang/AST/Stmt.h
+++ b/include/clang/AST/Stmt.h
@@ -225,7 +225,6 @@
 /// the first statement can be an expression or a declaration.
 ///
 class DeclStmt : public Stmt {
-protected:
   DeclGroupRef DG;
   SourceLocation StartLoc, EndLoc;
 public:
@@ -243,6 +242,9 @@
  
   const Decl *getSingleDecl() const { return DG.getSingleDecl(); }
   Decl *getSingleDecl() { return DG.getSingleDecl(); }  
+  
+  const DeclGroupRef getDeclGroup() const { return DG; }
+  DeclGroupRef getDeclGroup() { return DG; }
 
   SourceLocation getStartLoc() const { return StartLoc; }
   SourceLocation getEndLoc() const { return EndLoc; }
diff --git a/lib/AST/CFG.cpp b/lib/AST/CFG.cpp
index 2977583..804c2d2 100644
--- a/lib/AST/CFG.cpp
+++ b/lib/AST/CFG.cpp
@@ -363,15 +363,12 @@
         return WalkAST_VisitDeclSubExpr(DS->getSingleDecl());
       }
       
-      typedef llvm::SmallVector<Decl*,10> BufTy;
-      BufTy Buf;        
       CFGBlock* B = 0;
 
       // FIXME: Add a reverse iterator for DeclStmt to avoid this
       // extra copy.
-      for (DeclStmt::decl_iterator DI=DS->decl_begin(), DE=DS->decl_end();
-           DI != DE; ++DI)
-        Buf.push_back(*DI);
+      typedef llvm::SmallVector<Decl*,10> BufTy;
+      BufTy Buf(DS->decl_begin(), DS->decl_end());
       
       for (BufTy::reverse_iterator I=Buf.rbegin(), E=Buf.rend(); I!=E; ++I) {
         // Get the alignment of the new DeclStmt, padding out to >=8 bytes.
@@ -384,8 +381,7 @@
         Decl* D = *I;
         void* Mem = cfg->getAllocator().Allocate(sizeof(DeclStmt), A);
         
-        DeclStmt* DS = new (Mem) DeclStmt(DG, D->getLocation(),
-                                          GetEndLoc(D));
+        DeclStmt* DS = new (Mem) DeclStmt(DG, D->getLocation(), GetEndLoc(D));
         
         // Append the fake DeclStmt to block.
         Block->appendStmt(DS);
