diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 835a467..56f08b2 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -551,14 +551,28 @@
   if (getStmtClass() == ObjCPropertyRefExprClass) {
     const ObjCPropertyRefExpr* PropExpr = cast<ObjCPropertyRefExpr>(this);
     if (ObjCPropertyDecl *PDecl = PropExpr->getProperty()) {
-      ObjCPropertyDecl::PropertyAttributeKind Pkind = 
-        PDecl->getPropertyAttributes();
-      if (Pkind == ObjCPropertyDecl::OBJC_PR_readonly)
+      if (PDecl->isReadOnly()) {
+        // Main class has the property as 'readyonly'. Must search
+        // through the category list to see if the property's 
+        // attribute has been over-ridden to 'readwrite'.
+        const Expr *BaseExpr = PropExpr->getBase();
+        QualType BaseType = BaseExpr->getType();
+        const PointerType *PTy = BaseType->getAsPointerType();
+        const ObjCInterfaceType *IFTy = 
+          PTy->getPointeeType()->getAsObjCInterfaceType();
+        ObjCInterfaceDecl *IFace = IFTy->getDecl();
+        for (ObjCCategoryDecl *Category = IFace->getCategoryList();
+             Category; Category = Category->getNextClassCategory()) {
+          PDecl= Category->FindPropertyDeclaration(PDecl->getIdentifier());
+          if (PDecl && !PDecl->isReadOnly())
+            return MLV_Valid;
+        }
         return MLV_ReadonlyProperty;
+      }
     }
   }
   // Assigning to an 'implicit' property?
-  if (getStmtClass() == ObjCKVCRefExprClass) {
+  else if (getStmtClass() == ObjCKVCRefExprClass) {
     const ObjCKVCRefExpr* KVCExpr = cast<ObjCKVCRefExpr>(this);
     if (KVCExpr->getSetterMethod() == 0)
       return MLV_NoSetterProperty;
diff --git a/test/Analysis/ObjCProperties.m b/test/Analysis/ObjCProperties.m
index 03eefc2..f207475 100644
--- a/test/Analysis/ObjCProperties.m
+++ b/test/Analysis/ObjCProperties.m
@@ -8,7 +8,7 @@
     id _X;
 }
 - (id)initWithY:(id)Y;
-@property(copy, readonly) id X;
+@property(copy, readwrite) id X;
 @end
 
 @implementation MyClass
diff --git a/test/SemaObjC/property-category-1.m b/test/SemaObjC/property-category-1.m
new file mode 100644
index 0000000..32e14f0
--- /dev/null
+++ b/test/SemaObjC/property-category-1.m
@@ -0,0 +1,35 @@
+// RUN: clang -fsyntax-only -verify %s
+
+@interface Object
+- (id)new;
+@end
+
+@interface ReadOnly : Object
+{
+  int _object;
+  int _Anotherobject;
+}
+@property(readonly) int object;
+@property(readonly) int Anotherobject;
+@end
+
+@interface ReadOnly ()
+@property(readwrite) int object;
+@property(readwrite, setter = myAnotherobjectSetter:) int Anotherobject;
+@end
+
+@implementation ReadOnly
+@synthesize object = _object;
+@synthesize  Anotherobject = _Anotherobject;
+- (void) myAnotherobjectSetter : (int)val {
+    _Anotherobject = val;
+}
+@end
+
+int main(int argc, char **argv) {
+    ReadOnly *test = [ReadOnly new];
+    test.object = 12345;
+    test.Anotherobject = 200;
+    return test.object - 12345 + test.Anotherobject - 200;
+}
+
