diff --git a/Sema/SemaDeclObjC.cpp b/Sema/SemaDeclObjC.cpp
index d520c4f..946d12f 100644
--- a/Sema/SemaDeclObjC.cpp
+++ b/Sema/SemaDeclObjC.cpp
@@ -24,6 +24,12 @@
   assert(CurFunctionDecl == 0 && "Method parsing confused");
   ObjcMethodDecl *MDecl = dyn_cast<ObjcMethodDecl>(static_cast<Decl *>(D));
   assert(MDecl != 0 && "Not a method declarator!");
+
+  // Allow the rest of sema to find private method decl implementations.
+  if (MDecl->isInstance())
+    AddInstanceMethodToGlobalPool(MDecl);
+  else
+    AddFactoryMethodToGlobalPool(MDecl);
   
   // Allow all of Sema to see that we are entering a method definition.
   CurMethodDecl = MDecl;
@@ -666,13 +672,15 @@
   }
 }
 
+// Note: For class/category implemenations, allMethods/allProperties is
+// always null.
 void Sema::ActOnAtEnd(SourceLocation AtEndLoc, DeclTy *classDecl,
                       DeclTy **allMethods, unsigned allNum,
                       DeclTy **allProperties, unsigned pNum) {
   Decl *ClassDecl = static_cast<Decl *>(classDecl);
 
-  // FIXME: If we don't have a ClassDecl, we have an error. I (snaroff) would
-  // prefer we always pass in a decl. If the decl has an error, isInvalidDecl()
+  // FIXME: If we don't have a ClassDecl, we have an error. We should consider
+  // always passing in a decl. If the decl has an error, isInvalidDecl()
   // should be true.
   if (!ClassDecl)
     return;
@@ -731,8 +739,8 @@
       } else {
         clsMethods.push_back(Method);
         ClsMap[Method->getSelector()] = Method;
-        /// The following allows us to typecheck messages to "id".
-        AddInstanceMethodToGlobalPool(Method);
+        /// The following allows us to typecheck messages to "Class".
+        AddFactoryMethodToGlobalPool(Method);
       }
     }
   }
diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp
index 45d0470..e5f748f 100644
--- a/Sema/SemaExpr.cpp
+++ b/Sema/SemaExpr.cpp
@@ -2264,23 +2264,8 @@
   if (receiverType == Context.getObjcIdType() ||
       receiverType == Context.getObjcClassType()) {
     Method = InstanceMethodPool[Sel].Method;
-    // If we didn't find an public method, look for a private one.
-    if (!Method && CurMethodDecl) {
-      NamedDecl *impCxt = CurMethodDecl->getMethodContext();
-      if (ObjcImplementationDecl *IMD = 
-          dyn_cast<ObjcImplementationDecl>(impCxt)) {
-        if (receiverType == Context.getObjcIdType())
-          Method = IMD->lookupInstanceMethod(Sel);
-        else
-          Method = IMD->lookupClassMethod(Sel);
-      } else if (ObjcCategoryImplDecl *CID = 
-                 dyn_cast<ObjcCategoryImplDecl>(impCxt)) {
-        if (receiverType == Context.getObjcIdType())
-          Method = CID->lookupInstanceMethod(Sel);
-        else
-          Method = CID->lookupClassMethod(Sel);
-      }
-    }
+	if (!Method)
+	  Method = FactoryMethodPool[Sel].Method;
     if (!Method) {
       Diag(lbrac, diag::warn_method_not_found, std::string("-"), Sel.getName(),
            SourceRange(lbrac, rbrac));
diff --git a/test/Sema/message.m b/test/Sema/message.m
index dc50a19..9c9289b 100644
--- a/test/Sema/message.m
+++ b/test/Sema/message.m
@@ -36,3 +36,28 @@
   // behavior isn't very desirable, however wee need it for GCC compatibility.
   NSRect r = [obj rect];
 }
+
+@interface NSObject @end
+
+extern Class NSClassFromObject(id object);
+
+@interface XX : NSObject 
+@end
+
+@implementation XX
+
++ _privateMethod {
+  return self;
+}
+
+- (void) xx {
+  [NSClassFromObject(self) _privateMethod];
+}
+@end
+
+@implementation XX (Private)
+- (void) yy {
+  [NSClassFromObject(self) _privateMethod];
+}
+@end
+
