diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp
index 76a9a96..7cf551d 100644
--- a/Parse/ParseObjc.cpp
+++ b/Parse/ParseObjc.cpp
@@ -1175,7 +1175,7 @@
   ExitScope();
   
   // TODO: Pass argument information.
-  Actions.ActOnMethodDefBody(MDecl, FnBody.Val);
+  Actions.ActOnFinishFunctionBody(MDecl, FnBody.Val);
 }
 
 Parser::ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {
diff --git a/Parse/ParseStmt.cpp b/Parse/ParseStmt.cpp
index 6836f10..cb2a691 100644
--- a/Parse/ParseStmt.cpp
+++ b/Parse/ParseStmt.cpp
@@ -1046,5 +1046,5 @@
   ExitScope();
   
   // TODO: Pass argument information.
-  return Actions.ActOnFunctionDefBody(Decl, FnBody.Val);
+  return Actions.ActOnFinishFunctionBody(Decl, FnBody.Val);
 }
\ No newline at end of file
diff --git a/Sema/Sema.h b/Sema/Sema.h
index 190302d..0aea99e2 100644
--- a/Sema/Sema.h
+++ b/Sema/Sema.h
@@ -191,8 +191,8 @@
 
   virtual DeclTy *ActOnStartOfFunctionDef(Scope *S, Declarator &D);
   virtual void ObjcActOnStartOfMethodDef(Scope *S, DeclTy *D);
-  virtual DeclTy *ActOnFunctionDefBody(DeclTy *Decl, StmtTy *Body);
-  virtual void ActOnMethodDefBody(DeclTy *Decl, StmtTy *Body);
+  
+  virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtTy *Body);
   
   /// Scope actions.
   virtual void ActOnPopScope(SourceLocation Loc, Scope *S);
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index e043fa1..c0fb92c 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -996,11 +996,14 @@
   return FD;
 }
 
-Sema::DeclTy *Sema::ActOnFunctionDefBody(DeclTy *D, StmtTy *Body) {
-  FunctionDecl *FD = static_cast<FunctionDecl*>(D);
-  FD->setBody((Stmt*)Body);
-  
-  assert(FD == CurFunctionDecl && "Function parsing confused");
+Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtTy *Body) {
+  Decl *dcl = static_cast<Decl *>(D);
+  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(dcl)) {
+    FD->setBody((Stmt*)Body);
+    assert(FD == CurFunctionDecl && "Function parsing confused");
+  } else if (ObjcMethodDecl *MD = dyn_cast<ObjcMethodDecl>(dcl)) {
+    MD->setBody((Stmt*)Body);
+  }
   CurFunctionDecl = 0;
   
   // Verify and clean out per-function state.
@@ -1025,37 +1028,7 @@
   }
   LabelMap.clear();
   
-  return FD;
-}
-
-void Sema::ActOnMethodDefBody(DeclTy *D, StmtTy *Body) {
-  ObjcMethodDecl *FD = static_cast<ObjcMethodDecl*>(D);
-  FD->setBody((Stmt*)Body);
-  CurFunctionDecl = 0;
-  
-  // Verify and clean out per-function state.
-  
-  // TODO: This code block is common with ActOnFunctionDefBody and need be 
-  // refactored.
-  // Check goto/label use.
-  for (llvm::DenseMap<IdentifierInfo*, LabelStmt*>::iterator
-       I = LabelMap.begin(), E = LabelMap.end(); I != E; ++I) {
-    // Verify that we have no forward references left.  If so, there was a goto
-    // or address of a label taken, but no definition of it.  Label fwd
-    // definitions are indicated with a null substmt.
-    if (I->second->getSubStmt() == 0) {
-      LabelStmt *L = I->second;
-      // Emit error.
-      Diag(L->getIdentLoc(), diag::err_undeclared_label_use, L->getName());
-      
-      // At this point, we have gotos that use the bogus label.  Stitch it into
-      // the function body so that they aren't leaked and that the AST is well
-      // formed.
-      L->setSubStmt(new NullStmt(L->getIdentLoc()));
-      cast<CompoundStmt>((Stmt*)Body)->push_back(L);
-    }
-  }
-  LabelMap.clear();
+  return D;
 }
 
 /// ObjcActOnStartOfMethodDef - This routine sets up parameters; invisible
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 7a725d1..24b3af7 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -141,14 +141,10 @@
   
   /// ActOnFunctionDefBody - This is called when a function body has completed
   /// parsing.  Decl is the DeclTy returned by ParseStartOfFunctionDef.
-  virtual DeclTy *ActOnFunctionDefBody(DeclTy *Decl, StmtTy *Body) {
+  virtual DeclTy *ActOnFinishFunctionBody(DeclTy *Decl, StmtTy *Body) {
     return Decl;
   }
 
-  virtual void ActOnMethodDefBody(DeclTy *Decl, StmtTy *Body) {
-    return;
-  }
-  
   /// ActOnPopScope - This callback is called immediately before the specified
   /// scope is popped and deleted.
   virtual void ActOnPopScope(SourceLocation Loc, Scope *S) {}
