diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index 43750c4..19fd11d 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -16,6 +16,7 @@
 
 #include "clang/AST/Decl.h"
 #include "clang/Basic/IdentifierTable.h"
+#include "llvm/ADT/DenseMap.h"
 
 namespace clang {
 class Expr;
@@ -385,7 +386,8 @@
   
   void addPropertyMethods(ASTContext &Context,
                           ObjCPropertyDecl* Property,
-                          llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
+                          llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods,
+                          llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap);
   
   typedef ObjCPropertyDecl * const * classprop_iterator;
   classprop_iterator classprop_begin() const { return PropertyDecl; }
@@ -641,7 +643,8 @@
 
   void addPropertyMethods(ASTContext &Context,
                           ObjCPropertyDecl* Property,
-                          llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
+                          llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods,
+                          llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap);
   
   typedef ObjCPropertyDecl * const * classprop_iterator;
   classprop_iterator classprop_begin() const { return PropertyDecl; }
@@ -882,7 +885,8 @@
 
   void addPropertyMethods(ASTContext &Context,
                           ObjCPropertyDecl* Property,
-                          llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods);
+                          llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods,
+                          llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap);
   
   ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const;
   
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp
index e631bac..a313acf 100644
--- a/lib/AST/DeclObjC.cpp
+++ b/lib/AST/DeclObjC.cpp
@@ -426,24 +426,14 @@
 addPropertyMethods(Decl *D,
                    ASTContext &Context,
                    ObjCPropertyDecl *property,
-                   llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
+                   llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods,
+                   llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap) {
   ObjCMethodDecl *GetterDecl, *SetterDecl = 0;
-
-  if (ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(D)) {
-    GetterDecl = OID->getInstanceMethod(property->getGetterName());
-    if (!property->isReadOnly())
-      SetterDecl = OID->getInstanceMethod(property->getSetterName());
-  } else if (ObjCCategoryDecl *OCD = dyn_cast<ObjCCategoryDecl>(D)) {
-    GetterDecl = OCD->getInstanceMethod(property->getGetterName());
-    if (!property->isReadOnly())
-      SetterDecl = OCD->getInstanceMethod(property->getSetterName());
-  } else {
-    ObjCProtocolDecl *OPD = cast<ObjCProtocolDecl>(D);
-    GetterDecl = OPD->getInstanceMethod(property->getGetterName());
-    if (!property->isReadOnly())
-      SetterDecl = OPD->getInstanceMethod(property->getSetterName());
-  }
-
+  
+  GetterDecl = const_cast<ObjCMethodDecl*>(InsMap[property->getGetterName()]);
+  if (!property->isReadOnly())
+    SetterDecl = const_cast<ObjCMethodDecl*>(InsMap[property->getSetterName()]);
+  
   // FIXME: The synthesized property we set here is misleading. We
   // almost always synthesize these methods unless the user explicitly
   // provided prototypes (which is odd, but allowed). Sema should be
@@ -463,6 +453,7 @@
                              D,
                              true, false, true, ObjCMethodDecl::Required);
     insMethods.push_back(GetterDecl);
+    InsMap[property->getGetterName()] = GetterDecl;
   }
   property->setGetterMethodDecl(GetterDecl);
 
@@ -483,7 +474,7 @@
                              D,
                              true, false, true, ObjCMethodDecl::Required);
     insMethods.push_back(SetterDecl);
-
+    InsMap[property->getSetterName()] = SetterDecl;
     // Invent the arguments for the setter. We don't bother making a
     // nice name for the argument.
     ParmVarDecl *Argument = ParmVarDecl::Create(Context, 
@@ -505,8 +496,9 @@
 void ObjCInterfaceDecl::addPropertyMethods(
        ASTContext &Context,
        ObjCPropertyDecl *property,
-       llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
-  ::addPropertyMethods(this, Context, property, insMethods);
+       llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods,
+       llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap) {
+  ::addPropertyMethods(this, Context, property, insMethods, InsMap);
 }
 
 /// addPropertyMethods - Goes through list of properties declared in this class
@@ -516,8 +508,9 @@
 void ObjCCategoryDecl::addPropertyMethods(
        ASTContext &Context,
        ObjCPropertyDecl *property,
-       llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
-  ::addPropertyMethods(this, Context, property, insMethods);
+       llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods, 
+       llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap) {
+  ::addPropertyMethods(this, Context, property, insMethods, InsMap);
 }
 
 /// addPropertyMethods - Goes through list of properties declared in this class
@@ -527,8 +520,9 @@
 void ObjCProtocolDecl::addPropertyMethods(
        ASTContext &Context,
        ObjCPropertyDecl *property,
-       llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods) {
-  ::addPropertyMethods(this, Context, property, insMethods);
+       llvm::SmallVector<ObjCMethodDecl*, 32> &insMethods,
+       llvm::DenseMap<Selector, const ObjCMethodDecl*> &InsMap) {
+  ::addPropertyMethods(this, Context, property, insMethods, InsMap);
 }
 
 /// addProperties - Insert property declaration AST nodes into
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index b9fc5b7..3a78024 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -941,14 +941,14 @@
     MergeProtocolPropertiesIntoClass(I, I);
     for (ObjCInterfaceDecl::classprop_iterator i = I->classprop_begin(),
            e = I->classprop_end(); i != e; ++i)
-      I->addPropertyMethods(Context, *i, insMethods);
+      I->addPropertyMethods(Context, *i, insMethods, InsMap);
     I->addMethods(&insMethods[0], insMethods.size(),
                   &clsMethods[0], clsMethods.size(), AtEndLoc);
     
   } else if (ObjCProtocolDecl *P = dyn_cast<ObjCProtocolDecl>(ClassDecl)) {
     for (ObjCProtocolDecl::classprop_iterator i = P->classprop_begin(),
            e = P->classprop_end(); i != e; ++i)
-      P->addPropertyMethods(Context, *i, insMethods);
+      P->addPropertyMethods(Context, *i, insMethods, InsMap);
     P->addMethods(&insMethods[0], insMethods.size(),
                   &clsMethods[0], clsMethods.size(), AtEndLoc);
   }
@@ -959,7 +959,7 @@
     // merge them into category as well?
     for (ObjCCategoryDecl::classprop_iterator i = C->classprop_begin(),
            e = C->classprop_end(); i != e; ++i)
-      C->addPropertyMethods(Context, *i, insMethods);
+      C->addPropertyMethods(Context, *i, insMethods, InsMap);
     C->addMethods(&insMethods[0], insMethods.size(),
                   &clsMethods[0], clsMethods.size(), AtEndLoc);
   }
