diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 3e915cb..2243f99 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -201,7 +201,7 @@
   
   virtual DeclTy *ActOnIvar(Scope *S, SourceLocation DeclStart,
                             Declarator &D, ExprTy *BitfieldWidth,
-                            tok::ObjCKeywordKind visibility = tok::objc_not_keyword) {
+                            tok::ObjCKeywordKind visibility) {
     return 0;
   }
   
diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp
index eb3c5df..4e8790b 100644
--- a/lib/Parse/ParseObjc.cpp
+++ b/lib/Parse/ParseObjc.cpp
@@ -399,7 +399,8 @@
     // Install the declarator into interfaceDecl.
     DeclTy *Field = Actions.ActOnIvar(CurScope,
                                        DS.getSourceRange().getBegin(),
-                                      FD.D, FD.BitfieldSize);
+                                      FD.D, FD.BitfieldSize, 
+                                      tok::objc_not_keyword);
     PropertyDecls.push_back(Field);
   }
   
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index 3b352bf..1626f0d 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -243,7 +243,7 @@
   
   virtual DeclTy *ActOnIvar(Scope *S, SourceLocation DeclStart,
                             Declarator &D, ExprTy *BitfieldWidth,
-                            tok::ObjCKeywordKind visibility = tok::objc_not_keyword);
+                            tok::ObjCKeywordKind visibility);
 
   // This is used for both record definitions and ObjC interface declarations.
   virtual void ActOnFields(Scope* S,
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index a7f8bad..169a5f7 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -1426,9 +1426,8 @@
     InvalidDecl = true;
   }
   // FIXME: Chain fielddecls together.
-  FieldDecl *NewFD;
+  FieldDecl *NewFD = FieldDecl::Create(Context, Loc, II, T, BitWidth);
   
-  NewFD = FieldDecl::Create(Context, Loc, II, T, BitWidth);
   HandleDeclAttributes(NewFD, D.getDeclSpec().getAttributes(),
                        D.getAttributes());
 
@@ -1450,12 +1449,12 @@
   }
 }
 
-/// ActOnIvar - Each field of a struct/union/class is passed into this in order
-/// to create an IvarDecl object for it.
+/// ActOnIvar - Each ivar field of an objective-c class is passed into this 
+/// in order to create an IvarDecl object for it.
 Sema::DeclTy *Sema::ActOnIvar(Scope *S,
-                               SourceLocation DeclStart, 
-                               Declarator &D, ExprTy *BitfieldWidth,
-                              tok::ObjCKeywordKind visibility) {
+                              SourceLocation DeclStart, 
+                              Declarator &D, ExprTy *BitfieldWidth,
+                              tok::ObjCKeywordKind Visibility) {
   IdentifierInfo *II = D.getIdentifier();
   Expr *BitWidth = (Expr*)BitfieldWidth;
   SourceLocation Loc = DeclStart;
@@ -1491,9 +1490,7 @@
     InvalidDecl = true;
   }
   
-  ObjCIvarDecl *NewID;
-  
-  NewID = ObjCIvarDecl::Create(Context, Loc, II, T);
+  ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, Loc, II, T);
   
   HandleDeclAttributes(NewID, D.getDeclSpec().getAttributes(),
                        D.getAttributes());
@@ -1501,8 +1498,8 @@
   if (D.getInvalidType() || InvalidDecl)
     NewID->setInvalidDecl();
   // If we have visibility info, make sure the AST is set accordingly.
-  if (visibility != tok::objc_not_keyword)
-    NewID ->setAccessControl(TranslateIvarVisibility(visibility));
+  if (Visibility != tok::objc_not_keyword)
+    NewID->setAccessControl(TranslateIvarVisibility(Visibility));
   return NewID;
 }
 
