diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 225f177..7cc436c 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -542,10 +542,10 @@
   case ObjCMessageExprClass:
     return false;
       
-  case ObjCImplctSetterGetterRefExprClass: {   // Dot syntax for message send.
+  case ObjCImplicitSetterGetterRefExprClass: {   // Dot syntax for message send.
 #if 0
-    const ObjCImplctSetterGetterRefExpr *Ref = 
-      cast<ObjCImplctSetterGetterRefExpr>(this);
+    const ObjCImplicitSetterGetterRefExpr *Ref = 
+      cast<ObjCImplicitSetterGetterRefExpr>(this);
     // FIXME: We really want the location of the '.' here.
     Loc = Ref->getLocation();
     R1 = SourceRange(Ref->getLocation(), Ref->getLocation());
@@ -794,7 +794,7 @@
     return LV_Valid;
   case ObjCPropertyRefExprClass: // FIXME: check if read-only property.
     return LV_Valid;
-  case ObjCImplctSetterGetterRefExprClass: // FIXME: check if read-only property.
+  case ObjCImplicitSetterGetterRefExprClass: // FIXME: check if read-only property.
     return LV_Valid;
   case PredefinedExprClass:
     return LV_Valid;
@@ -915,9 +915,9 @@
   }
   
   // Assigning to an 'implicit' property?
-  else if (isa<ObjCImplctSetterGetterRefExpr>(this)) {
-    const ObjCImplctSetterGetterRefExpr* Expr = 
-      cast<ObjCImplctSetterGetterRefExpr>(this);
+  else if (isa<ObjCImplicitSetterGetterRefExpr>(this)) {
+    const ObjCImplicitSetterGetterRefExpr* Expr = 
+      cast<ObjCImplicitSetterGetterRefExpr>(this);
     if (Expr->getSetterMethod() == 0)
       return MLV_NoSetterProperty;
   }
@@ -1863,11 +1863,11 @@
 Stmt::child_iterator ObjCPropertyRefExpr::child_begin() { return &Base; }
 Stmt::child_iterator ObjCPropertyRefExpr::child_end() { return &Base+1; }
 
-// ObjCImplctSetterGetterRefExpr
-Stmt::child_iterator ObjCImplctSetterGetterRefExpr::child_begin() { 
+// ObjCImplicitSetterGetterRefExpr
+Stmt::child_iterator ObjCImplicitSetterGetterRefExpr::child_begin() { 
   return &Base; 
 }
-Stmt::child_iterator ObjCImplctSetterGetterRefExpr::child_end() { 
+Stmt::child_iterator ObjCImplicitSetterGetterRefExpr::child_end() { 
   return &Base+1; 
 }
 
diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp
index 6a48d5a..ff6d225 100644
--- a/lib/AST/StmtDumper.cpp
+++ b/lib/AST/StmtDumper.cpp
@@ -148,8 +148,8 @@
     void VisitObjCSelectorExpr(ObjCSelectorExpr *Node);
     void VisitObjCProtocolExpr(ObjCProtocolExpr *Node);
     void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node);
-    void VisitObjCImplctSetterGetterRefExpr(
-                                          ObjCImplctSetterGetterRefExpr *Node);
+    void VisitObjCImplicitSetterGetterRefExpr(
+                                          ObjCImplicitSetterGetterRefExpr *Node);
     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node);
     void VisitObjCSuperExpr(ObjCSuperExpr *Node);
   };
@@ -522,8 +522,8 @@
           Node->getProperty()->getNameAsString().c_str());
 }
 
-void StmtDumper::VisitObjCImplctSetterGetterRefExpr(
-                                        ObjCImplctSetterGetterRefExpr *Node) {
+void StmtDumper::VisitObjCImplicitSetterGetterRefExpr(
+                                        ObjCImplicitSetterGetterRefExpr *Node) {
   DumpExpr(Node);
   
   ObjCMethodDecl *Getter = Node->getGetterMethod();
diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp
index 9b8dfce..36464ca 100644
--- a/lib/AST/StmtPrinter.cpp
+++ b/lib/AST/StmtPrinter.cpp
@@ -518,8 +518,8 @@
   OS << Node->getProperty()->getNameAsCString();
 }
 
-void StmtPrinter::VisitObjCImplctSetterGetterRefExpr(
-                                        ObjCImplctSetterGetterRefExpr *Node) {
+void StmtPrinter::VisitObjCImplicitSetterGetterRefExpr(
+                                        ObjCImplicitSetterGetterRefExpr *Node) {
   if (Node->getBase()) {
     PrintExpr(Node->getBase());
     OS << ".";
diff --git a/lib/AST/StmtProfile.cpp b/lib/AST/StmtProfile.cpp
index 1feee38..ff20299 100644
--- a/lib/AST/StmtProfile.cpp
+++ b/lib/AST/StmtProfile.cpp
@@ -583,8 +583,8 @@
   VisitDecl(S->getProperty());
 }
 
-void StmtProfiler::VisitObjCImplctSetterGetterRefExpr(
-                                  ObjCImplctSetterGetterRefExpr *S) {
+void StmtProfiler::VisitObjCImplicitSetterGetterRefExpr(
+                                  ObjCImplicitSetterGetterRefExpr *S) {
   VisitExpr(S);
   VisitDecl(S->getGetterMethod());
   VisitDecl(S->getSetterMethod());
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index c59dafc..487b976 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -528,7 +528,7 @@
       return;
       
     case Stmt::ObjCPropertyRefExprClass:
-    case Stmt::ObjCImplctSetterGetterRefExprClass:
+    case Stmt::ObjCImplicitSetterGetterRefExprClass:
       // FIXME: Property assignments are lvalues, but not really "locations".
       //  e.g.:  self.x = something;
       //  Here the "self.x" really can translate to a method call (setter) when
@@ -2787,8 +2787,8 @@
   Expr* LHS = B->getLHS()->IgnoreParens();
   Expr* RHS = B->getRHS()->IgnoreParens();
   
-  // FIXME: Add proper support for ObjCImplctSetterGetterRefExpr.
-  if (isa<ObjCImplctSetterGetterRefExpr>(LHS)) {
+  // FIXME: Add proper support for ObjCImplicitSetterGetterRefExpr.
+  if (isa<ObjCImplicitSetterGetterRefExpr>(LHS)) {
     Visit(RHS, Pred, Dst);   
     return;
   }
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 3f07909..310fae0 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -227,8 +227,8 @@
     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
   case Expr::ObjCPropertyRefExprClass:
     return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E));
-  case Expr::ObjCImplctSetterGetterRefExprClass:
-    return EmitObjCKVCRefLValue(cast<ObjCImplctSetterGetterRefExpr>(E));
+  case Expr::ObjCImplicitSetterGetterRefExprClass:
+    return EmitObjCKVCRefLValue(cast<ObjCImplicitSetterGetterRefExpr>(E));
   case Expr::ObjCSuperExprClass:
     return EmitObjCSuperExprLValue(cast<ObjCSuperExpr>(E));
 
@@ -1026,7 +1026,7 @@
       isUnion = true;
     CVRQualifiers = PTy->getPointeeType().getCVRQualifiers();
   } else if (isa<ObjCPropertyRefExpr>(BaseExpr) ||
-             isa<ObjCImplctSetterGetterRefExpr>(BaseExpr)) {
+             isa<ObjCImplicitSetterGetterRefExpr>(BaseExpr)) {
     RValue RV = EmitObjCPropertyGet(BaseExpr);
     BaseValue = RV.getAggregateAddr();
     if (BaseExpr->getType()->isUnionType())
@@ -1342,7 +1342,7 @@
 
 LValue 
 CodeGenFunction::EmitObjCKVCRefLValue(
-                                const ObjCImplctSetterGetterRefExpr *E) {
+                                const ObjCImplicitSetterGetterRefExpr *E) {
   // This is a special l-value that just issues sends when we load or
   // store through it.
   return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers());
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp
index 1c1fc9b..6f6daa7 100644
--- a/lib/CodeGen/CGExprAgg.cpp
+++ b/lib/CodeGen/CGExprAgg.cpp
@@ -99,7 +99,7 @@
     EmitAggLoadOfLValue(E);
   }
   void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E);
-  void VisitObjCImplctSetterGetterRefExpr(ObjCImplctSetterGetterRefExpr *E);
+  void VisitObjCImplicitSetterGetterRefExpr(ObjCImplicitSetterGetterRefExpr *E);
   
   void VisitConditionalOperator(const ConditionalOperator *CO);
   void VisitChooseExpr(const ChooseExpr *CE);
@@ -208,8 +208,8 @@
   EmitFinalDestCopy(E, RV);
 }
 
-void AggExprEmitter::VisitObjCImplctSetterGetterRefExpr(
-                                   ObjCImplctSetterGetterRefExpr *E) {
+void AggExprEmitter::VisitObjCImplicitSetterGetterRefExpr(
+                                   ObjCImplicitSetterGetterRefExpr *E) {
   RValue RV = CGF.EmitObjCPropertyGet(E);
   EmitFinalDestCopy(E, RV);
 }
diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp
index ab8ccfb..f9cb607 100644
--- a/lib/CodeGen/CGExprComplex.cpp
+++ b/lib/CodeGen/CGExprComplex.cpp
@@ -120,8 +120,8 @@
   ComplexPairTy VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
-  ComplexPairTy VisitObjCImplctSetterGetterRefExpr(
-                               ObjCImplctSetterGetterRefExpr *E) {
+  ComplexPairTy VisitObjCImplicitSetterGetterRefExpr(
+                               ObjCImplicitSetterGetterRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
   ComplexPairTy VisitObjCMessageExpr(ObjCMessageExpr *E) {
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 5650ed7..bd00594 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -158,8 +158,8 @@
   Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
-  Value *VisitObjCImplctSetterGetterRefExpr(
-                        ObjCImplctSetterGetterRefExpr *E) {
+  Value *VisitObjCImplicitSetterGetterRefExpr(
+                        ObjCImplicitSetterGetterRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
   Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 82bac9a..1c1b303 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -337,8 +337,8 @@
                                  EmitScalarExpr(E->getBase()), 
                                  false, CallArgList());
   } else {
-    const ObjCImplctSetterGetterRefExpr *KE = 
-      cast<ObjCImplctSetterGetterRefExpr>(Exp);
+    const ObjCImplicitSetterGetterRefExpr *KE = 
+      cast<ObjCImplicitSetterGetterRefExpr>(Exp);
     Selector S = KE->getGetterMethod()->getSelector();
     llvm::Value *Receiver;
     if (KE->getInterfaceDecl()) {
@@ -389,8 +389,8 @@
     CGM.getObjCRuntime().GenerateMessageSend(*this, getContext().VoidTy, S, 
                                              EmitScalarExpr(E->getBase()), 
                                              false, Args);
-  } else if (const ObjCImplctSetterGetterRefExpr *E = 
-               dyn_cast<ObjCImplctSetterGetterRefExpr>(Exp)) {
+  } else if (const ObjCImplicitSetterGetterRefExpr *E = 
+               dyn_cast<ObjCImplicitSetterGetterRefExpr>(Exp)) {
     Selector S = E->getSetterMethod()->getSelector();
     CallArgList Args;
     llvm::Value *Receiver;
diff --git a/lib/CodeGen/CGValue.h b/lib/CodeGen/CGValue.h
index 15020e9..5aaf951 100644
--- a/lib/CodeGen/CGValue.h
+++ b/lib/CodeGen/CGValue.h
@@ -24,7 +24,7 @@
 
 namespace clang {
   class ObjCPropertyRefExpr;
-  class ObjCImplctSetterGetterRefExpr;
+  class ObjCImplicitSetterGetterRefExpr;
 
 namespace CodeGen {
 
@@ -143,7 +143,7 @@
     // Obj-C property reference expression
     const ObjCPropertyRefExpr *PropertyRefExpr;
     // ObjC 'implicit' property reference expression
-    const ObjCImplctSetterGetterRefExpr *KVCRefExpr;
+    const ObjCImplicitSetterGetterRefExpr *KVCRefExpr;
   };
 
   bool Volatile:1;
@@ -251,7 +251,7 @@
   }
 
   // 'implicit' property ref lvalue
-  const ObjCImplctSetterGetterRefExpr *getKVCRefExpr() const {
+  const ObjCImplicitSetterGetterRefExpr *getKVCRefExpr() const {
     assert(isKVCRef());
     return KVCRefExpr;
   }
@@ -313,7 +313,7 @@
     return R;
   }
   
-  static LValue MakeKVCRef(const ObjCImplctSetterGetterRefExpr *E, 
+  static LValue MakeKVCRef(const ObjCImplicitSetterGetterRefExpr *E, 
                            unsigned Qualifiers) {
     LValue R;
     R.LVType = KVCRef;
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 4d176a4..b4cbc96 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -787,7 +787,7 @@
   LValue EmitObjCMessageExprLValue(const ObjCMessageExpr *E);
   LValue EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E);
   LValue EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E);
-  LValue EmitObjCKVCRefLValue(const ObjCImplctSetterGetterRefExpr *E);
+  LValue EmitObjCKVCRefLValue(const ObjCImplicitSetterGetterRefExpr *E);
   LValue EmitObjCSuperExprLValue(const ObjCSuperExpr *E);
   LValue EmitStmtExprLValue(const StmtExpr *E);
 
diff --git a/lib/Frontend/PCHReaderStmt.cpp b/lib/Frontend/PCHReaderStmt.cpp
index f39d961..fdefec7 100644
--- a/lib/Frontend/PCHReaderStmt.cpp
+++ b/lib/Frontend/PCHReaderStmt.cpp
@@ -101,8 +101,8 @@
     unsigned VisitObjCProtocolExpr(ObjCProtocolExpr *E);
     unsigned VisitObjCIvarRefExpr(ObjCIvarRefExpr *E);
     unsigned VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E);
-    unsigned VisitObjCImplctSetterGetterRefExpr(
-                            ObjCImplctSetterGetterRefExpr *E);
+    unsigned VisitObjCImplicitSetterGetterRefExpr(
+                            ObjCImplicitSetterGetterRefExpr *E);
     unsigned VisitObjCMessageExpr(ObjCMessageExpr *E);
     unsigned VisitObjCSuperExpr(ObjCSuperExpr *E);
     unsigned VisitObjCIsaExpr(ObjCIsaExpr *E);
@@ -742,8 +742,8 @@
   return 1;
 }
 
-unsigned PCHStmtReader::VisitObjCImplctSetterGetterRefExpr(
-                                      ObjCImplctSetterGetterRefExpr *E) {
+unsigned PCHStmtReader::VisitObjCImplicitSetterGetterRefExpr(
+                                      ObjCImplicitSetterGetterRefExpr *E) {
   VisitExpr(E);
   E->setGetterMethod(
                  cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++])));
@@ -1116,7 +1116,7 @@
       S = new (Context) ObjCPropertyRefExpr(Empty);
       break;
     case pch::EXPR_OBJC_KVC_REF_EXPR:
-      S = new (Context) ObjCImplctSetterGetterRefExpr(Empty);
+      S = new (Context) ObjCImplicitSetterGetterRefExpr(Empty);
       break;
     case pch::EXPR_OBJC_MESSAGE_EXPR:
       S = new (Context) ObjCMessageExpr(Empty);
diff --git a/lib/Frontend/PCHWriterStmt.cpp b/lib/Frontend/PCHWriterStmt.cpp
index 63d3dbf..d62a815 100644
--- a/lib/Frontend/PCHWriterStmt.cpp
+++ b/lib/Frontend/PCHWriterStmt.cpp
@@ -94,8 +94,8 @@
     void VisitObjCProtocolExpr(ObjCProtocolExpr *E);
     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *E);
     void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E);
-    void VisitObjCImplctSetterGetterRefExpr(
-                        ObjCImplctSetterGetterRefExpr *E);
+    void VisitObjCImplicitSetterGetterRefExpr(
+                        ObjCImplicitSetterGetterRefExpr *E);
     void VisitObjCMessageExpr(ObjCMessageExpr *E);
     void VisitObjCSuperExpr(ObjCSuperExpr *E);
     void VisitObjCIsaExpr(ObjCIsaExpr *E);
@@ -673,8 +673,8 @@
   Code = pch::EXPR_OBJC_PROPERTY_REF_EXPR;
 }
 
-void PCHStmtWriter::VisitObjCImplctSetterGetterRefExpr(
-                                  ObjCImplctSetterGetterRefExpr *E) {
+void PCHStmtWriter::VisitObjCImplicitSetterGetterRefExpr(
+                                  ObjCImplicitSetterGetterRefExpr *E) {
   VisitExpr(E);
   Writer.AddDeclRef(E->getGetterMethod(), Record);
   Writer.AddDeclRef(E->getSetterMethod(), Record);
diff --git a/lib/Frontend/StmtXML.cpp b/lib/Frontend/StmtXML.cpp
index 7f7b59b..b6d0481 100644
--- a/lib/Frontend/StmtXML.cpp
+++ b/lib/Frontend/StmtXML.cpp
@@ -163,8 +163,8 @@
     void VisitObjCSelectorExpr(ObjCSelectorExpr *Node);
     void VisitObjCProtocolExpr(ObjCProtocolExpr *Node);
     void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node);
-    void VisitObjCImplctSetterGetterRefExpr(
-                        ObjCImplctSetterGetterRefExpr *Node);
+    void VisitObjCImplicitSetterGetterRefExpr(
+                        ObjCImplicitSetterGetterRefExpr *Node);
     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node);
     void VisitObjCSuperExpr(ObjCSuperExpr *Node);
 #endif
@@ -439,8 +439,8 @@
   Doc.addAttribute("property", Node->getProperty()->getNameAsString());
 }
 
-void StmtXML::VisitObjCImplctSetterGetterRefExpr(
-                             ObjCImplctSetterGetterRefExpr *Node) {
+void StmtXML::VisitObjCImplicitSetterGetterRefExpr(
+                             ObjCImplicitSetterGetterRefExpr *Node) {
   DumpExpr(Node);
   ObjCMethodDecl *Getter = Node->getGetterMethod();
   ObjCMethodDecl *Setter = Node->getSetterMethod();
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index e7d9d50..9f2be1c 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -2173,7 +2173,7 @@
           // Get the expression type from Setter's incoming parameter.
           PType = (*(Setter->param_end() -1))->getType();
         // FIXME: we must check that the setter has property type.
-        return Owned(new (Context) ObjCImplctSetterGetterRefExpr(Getter, PType,
+        return Owned(new (Context) ObjCImplicitSetterGetterRefExpr(Getter, PType,
                                         Setter, MemberLoc, BaseExpr));
       }
       return ExprError(Diag(MemberLoc, diag::err_property_not_found)
@@ -2364,7 +2364,7 @@
         // Get the expression type from Setter's incoming parameter.
         PType = (*(Setter->param_end() -1))->getType();
       // FIXME: we must check that the setter has property type.
-      return Owned(new (Context) ObjCImplctSetterGetterRefExpr(Getter, PType,
+      return Owned(new (Context) ObjCImplicitSetterGetterRefExpr(Getter, PType,
                                       Setter, MemberLoc, BaseExpr));
     }
     return ExprError(Diag(MemberLoc, diag::err_property_not_found)
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp
index 3b28fae..d9ca49c 100644
--- a/lib/Sema/SemaExprObjC.cpp
+++ b/lib/Sema/SemaExprObjC.cpp
@@ -339,7 +339,7 @@
            E = Setter->param_end(); PI != E; ++PI)
         PType = (*PI)->getType();
     }
-    return Owned(new (Context) ObjCImplctSetterGetterRefExpr(
+    return Owned(new (Context) ObjCImplicitSetterGetterRefExpr(
                                   Getter, PType, Setter, 
                                   propertyNameLoc, IFace, receiverNameLoc));
   }
diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp
index 19a802e..ae59aec 100644
--- a/lib/Sema/SemaStmt.cpp
+++ b/lib/Sema/SemaStmt.cpp
@@ -70,7 +70,7 @@
   // cases now.
   unsigned DiagID = diag::warn_unused_expr;
   E = E->IgnoreParens();
-  if (isa<ObjCImplctSetterGetterRefExpr>(E))
+  if (isa<ObjCImplicitSetterGetterRefExpr>(E))
     DiagID = diag::warn_unused_property_expr;
   
   Diag(Loc, DiagID) << R1 << R2;
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index ae359bb..a001254 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -4100,8 +4100,8 @@
 
 template<typename Derived> 
 Sema::OwningExprResult 
-TreeTransform<Derived>::TransformObjCImplctSetterGetterRefExpr(
-                                          ObjCImplctSetterGetterRefExpr *E) { 
+TreeTransform<Derived>::TransformObjCImplicitSetterGetterRefExpr(
+                                          ObjCImplicitSetterGetterRefExpr *E) { 
   // FIXME: Implement this!
   assert(false && "Cannot transform Objective-C expressions yet");
   return SemaRef.Owned(E->Retain()); 
