diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp
index 9653526..eaee94e 100644
--- a/Driver/ASTConsumers.cpp
+++ b/Driver/ASTConsumers.cpp
@@ -53,6 +53,7 @@
     void PrintObjCCategoryDecl(ObjCCategoryDecl *PID);    
     void PrintObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *AID);
     void PrintObjCPropertyDecl(ObjCPropertyDecl *PD);
+    void PrintObjCPropertyImplDecl(ObjCPropertyImplDecl *PID);
   };
 } // end anonymous namespace
 
@@ -228,6 +229,10 @@
     }
   }
   
+  for (ObjCImplementationDecl::propimpl_iterator I = OID->propimpl_begin(),
+       E = OID->propimpl_end(); I != E; ++I)
+    PrintObjCPropertyImplDecl(*I);
+  
   Out << "@end\n";
 }
 
@@ -287,7 +292,10 @@
   Out << "@implementation "
       << PID->getClassInterface()->getName()
       << '(' << PID->getName() << ");\n";  
-  
+  for (ObjCCategoryImplDecl::propimpl_iterator I = PID->propimpl_begin(),
+       E = PID->propimpl_end(); I != E; ++I)
+    PrintObjCPropertyImplDecl(*I);
+  Out << "@end\n";
   // FIXME: implement the rest...
 }
 
@@ -367,7 +375,21 @@
     
   Out << ";\n";
 }
-    
+
+/// PrintObjCPropertyImplDecl - Print an objective-c property implementation
+/// declaration syntax.
+///
+void DeclPrinter::PrintObjCPropertyImplDecl(ObjCPropertyImplDecl *PID) {
+  if (PID->getPropertyImplementation() == 
+      ObjCPropertyImplDecl::OBJC_PR_IMPL_SYNTHSIZE)
+    Out << "\n@synthesize ";
+  else
+    Out << "\n@dynamic ";
+  Out << PID->getPropertyDecl()->getName();
+  if (PID->getPropertyIvarDecl())
+    Out << "=" << PID->getPropertyIvarDecl()->getName();
+  Out << ";\n";
+}
 //===----------------------------------------------------------------------===//
 /// ASTPrinter - Pretty-printer of ASTs
 
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index 72c8e02..93a3457 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -1106,9 +1106,18 @@
   /// Null for @dynamic. Required for @synthesize.
   ObjCIvarDecl *PropertyIvarDecl;
 public:
-  ObjCPropertyImplDecl(SourceLocation atLoc, SourceLocation L)
-  : Decl(ObjCPropertyImpl, L), AtLoc(atLoc), PropertyDecl(0), 
-  PropertyImplementation(OBJC_PR_IMPL_None), PropertyIvarDecl(0) {}
+  ObjCPropertyImplDecl(SourceLocation atLoc, SourceLocation L,
+                       ObjCPropertyDecl *property, 
+                       PropertyImplKind propertyKind, 
+                       ObjCIvarDecl *ivarDecl)
+  : Decl(ObjCPropertyImpl, L), AtLoc(atLoc), PropertyDecl(property), 
+    PropertyImplementation(propertyKind), PropertyIvarDecl(ivarDecl){}
+  
+  static ObjCPropertyImplDecl *Create(ASTContext &C, SourceLocation atLoc, 
+                                      SourceLocation L, 
+                                      ObjCPropertyDecl *property, 
+                                      PropertyImplKind propertyKind, 
+                                      ObjCIvarDecl *ivarDecl);
 
   void setPropertyDecl(ObjCPropertyDecl *property) { PropertyDecl = property; }
   ObjCPropertyDecl *getPropertyDecl() const { return PropertyDecl; }
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp
index d3592e1..ef4a6e1 100644
--- a/lib/AST/DeclObjC.cpp
+++ b/lib/AST/DeclObjC.cpp
@@ -517,5 +517,14 @@
   return 0;
 }
 
+ObjCPropertyImplDecl *ObjCPropertyImplDecl::Create(ASTContext &C,
+                                                   SourceLocation atLoc,
+                                                   SourceLocation L,
+                                                   ObjCPropertyDecl *property,
+                                                   PropertyImplKind kind,
+                                                   ObjCIvarDecl *ivar) {
+  void *Mem = C.getAllocator().Allocate<ObjCPropertyImplDecl>();
+  return new (Mem) ObjCPropertyImplDecl(atLoc, L, property, kind, ivar);
+}
 
 
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 234bead..61449fc 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -949,8 +949,9 @@
   ObjCInterfaceDecl* IDecl = 0;
   // Find the class or category class where this property must have
   // a declaration.
-  if (ObjCImplementationDecl *IC = 
-        dyn_cast<ObjCImplementationDecl>(ClassImpDecl)) {
+  ObjCImplementationDecl *IC = 0;
+  ObjCCategoryImplDecl* CatImplClass = 0;
+  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {
     IDecl = getObjCInterfaceDecl(IC->getIdentifier());
     // We always synthesize an interface for an implementation
     // without an interface decl. So, IDecl is always non-zero.
@@ -964,8 +965,7 @@
       return 0;
     }
   }
-  else if (ObjCCategoryImplDecl* CatImplClass = 
-            dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl)) {
+  else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {
     if (Synthesize) {
       Diag(AtLoc, diag::error_synthesize_category_decl);
       return 0;
@@ -994,14 +994,14 @@
     Diag(AtLoc, diag::error_bad_property_context);
     return 0;
   }
-  
+  ObjCIvarDecl *Ivar = 0;
   // Check that we have a valid, previously declared ivar for @synthesize
   if (Synthesize) {
     // @synthesize
     if (!PropertyIvar)
       PropertyIvar = PropertyId;
     // Check that this is a previously declared 'ivar' in 'IDecl' interface
-    ObjCIvarDecl *Ivar = IDecl->FindIvarDeclaration(PropertyIvar);
+    Ivar = IDecl->FindIvarDeclaration(PropertyIvar);
     if (!Ivar) {
       Diag(PropertyLoc, diag::error_missing_property_ivar_decl, 
            PropertyId->getName());
@@ -1020,15 +1020,17 @@
     return 0;
   }
   assert (property && "ActOnPropertyImplDecl - property declaration missing");
-  // TODO: Build the property implementation AST, pushes it into its 
-  // class/cateogory implementation's vector of property implementations
-#if 0
-  ObjCCategoryImplDecl *PIDecl = 
-    ObjCCategoryImplDecl::Create(AtLoc, PropertyLoc, property, 
-      Synthesize ? ObjCPropertyImplDecl::OBJC_PR_IMPL_SYNTHSIZE 
-                 : ObjCPropertyImplDecl::OBJC_PR_IMPL_DYNAMIC,
-                                 PropertyId, PropertyIvar);
-#endif
-  return 0;
+  ObjCPropertyImplDecl *PIDecl = 
+    ObjCPropertyImplDecl::Create(Context, AtLoc, PropertyLoc, property, 
+                                 (Synthesize ? 
+                                  ObjCPropertyImplDecl::OBJC_PR_IMPL_SYNTHSIZE 
+                                  : ObjCPropertyImplDecl::OBJC_PR_IMPL_DYNAMIC),
+                                  Ivar);
+  if (IC)
+    IC->addPropertyImplementation(PIDecl);
+  else
+    CatImplClass->addPropertyImplementation(PIDecl);
+    
+  return PIDecl;
 }
 
