diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index 8954a19..883482c 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -45,6 +45,7 @@
     void RewriteFunctionBody(Stmt *S);
     void RewriteAtEncode(ObjCEncodeExpr *Exp);
 
+    void WriteObjcClassMetaData(ObjcImplementationDecl *IDecl);
     void WriteObjcMetaData();
     
     ~RewriteTest();
@@ -119,7 +120,7 @@
     if (*CI)
       RewriteFunctionBody(*CI);
 }
-
+ 
 void RewriteTest::RewriteAtEncode(ObjCEncodeExpr *Exp) {
   // Create a new string expression.
   QualType StrType = Context->getPointerType(Context->CharTy);
@@ -129,11 +130,66 @@
   delete Replacement;
 }
 
+void RewriteTest::WriteObjcClassMetaData(ObjcImplementationDecl *IDecl) {
+  ObjcInterfaceDecl *CDecl = IDecl->getClassInterface();
+  
+  if (IDecl->getImplDeclNumIvars() > 0 || 
+      CDecl&& CDecl->getIntfDeclNumIvars() > 0) {
+    static bool objc_ivar = false;
+    
+    int NumIvars = IDecl->getImplDeclNumIvars() > 0 
+                     ? IDecl->getImplDeclNumIvars() 
+                     : CDecl->getIntfDeclNumIvars();
+    
+    if (!objc_ivar) {
+      /* struct _objc_ivar {
+          char *ivar_name;
+          char *ivar_type;
+          int ivar_offset;
+        };  
+       */
+      printf("\nstruct _objc_ivar {\n");
+      printf("\tchar *ivar_name;\n");
+      printf("\tchar *ivar_type;\n");
+      printf("\tint ivar_offset;\n");
+      printf("};\n");
+      objc_ivar = true;
+    }
+
+    /* struct _objc_ivar_list {
+        int ivar_count;
+        struct _objc_ivar ivar_list[ivar_count];
+     };  
+    */
+    printf("\nstatic struct {\n");
+    printf("\tint ivar_count;\n");
+    printf("\tstruct _objc_ivar ivar_list[%d];\n", NumIvars);
+    printf("} _OBJC_INSTANCE_VARIABLES_%s "
+      "__attribute__ ((section (\"__OBJC, __instance_vars\")))= "
+      "{\n\t%d\n",IDecl->getName(), 
+           NumIvars);
+    ObjcIvarDecl **Ivars = IDecl->getImplDeclIVars() 
+                             ? IDecl->getImplDeclIVars() 
+                             : CDecl->getIntfDeclIvars();
+    for (int i = 0; i < NumIvars; i++)
+      // TODO: 1) ivar names may have to go to another section. 2) encode
+      // ivar_type type of each ivar . 3) compute and add ivar offset.
+      printf("\t,\"%s\", \"\", 0\n", Ivars[i]->getName());
+    printf("};\n");
+  }
+  
+}
+
 void RewriteTest::WriteObjcMetaData() {
   int ClsDefCount = ClassImplementation.size();
   int CatDefCount = CategoryImplementation.size();
   if (ClsDefCount == 0 && CatDefCount == 0)
     return;
+  
+  // For each defined class, write out all its meta data.
+  for (int i = 0; i < ClsDefCount; i++)
+    WriteObjcClassMetaData(ClassImplementation[i]);
+  
   // Write objc_symtab metadata
   /*
    struct _objc_symtab
diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index 5b54d8b..9c8ec7f 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -1225,8 +1225,6 @@
     }
   }
   
-  ObjcImplementationDecl* IMPDecl = 
-    new ObjcImplementationDecl(AtClassImplLoc, ClassName, SDecl);
   if (!IDecl) {
     // Legacy case of @implementation with no corresponding @interface.
     // Build, chain & install the interface decl into the identifier.
@@ -1238,6 +1236,9 @@
     TUScope->AddDecl(IDecl);
   }
   
+  ObjcImplementationDecl* IMPDecl = 
+  new ObjcImplementationDecl(AtClassImplLoc, ClassName, IDecl, SDecl);
+  
   // Check that there is no duplicate implementation of this class.
   if (!ObjcImplementations.insert(ClassName))
     Diag(ClassLoc, diag::err_dup_implementation_class, ClassName->getName());
diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h
index bbab58a..b5d211f 100644
--- a/include/clang/AST/DeclObjC.h
+++ b/include/clang/AST/DeclObjC.h
@@ -540,7 +540,9 @@
 /// from the class interface to the class implementation (but I digress:-)
 ///
 class ObjcImplementationDecl : public NamedDecl {
-    
+  /// Class interface for this category implementation
+  ObjcInterfaceDecl *ClassInterface;
+  
   /// Implementation Class's super class.
   ObjcInterfaceDecl *SuperClass;
     
@@ -558,8 +560,10 @@
     
 public:
   ObjcImplementationDecl(SourceLocation L, IdentifierInfo *Id,
-                         ObjcInterfaceDecl* superDecl)
+                         ObjcInterfaceDecl *classInterface,
+                         ObjcInterfaceDecl *superDecl)
     : NamedDecl(ObjcImplementation, L, Id),
+      ClassInterface(classInterface),
       SuperClass(superDecl),
       Ivars(0), NumIvars(-1),
       InstanceMethods(0), NumInstanceMethods(-1), 
@@ -571,6 +575,7 @@
   void ObjcAddImplMethods(ObjcMethodDecl **insMethods, unsigned numInsMembers,
                           ObjcMethodDecl **clsMethods, unsigned numClsMembers);
     
+  ObjcInterfaceDecl *getClassInterface() const { return ClassInterface; }
   ObjcInterfaceDecl *getSuperClass() const { return SuperClass; }
   
   void setSuperClass(ObjcInterfaceDecl * superCls) 
@@ -581,6 +586,9 @@
   
   ObjcMethodDecl **getClassMethods() const { return ClassMethods; }
   int getNumClassMethods() const { return NumClassMethods; }
+  
+  ObjcIvarDecl **getImplDeclIVars() const { return Ivars; }
+  int getImplDeclNumIvars() const { return NumIvars; }
     
   static bool classof(const Decl *D) {
     return D->getKind() == ObjcImplementation;
