diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp
index 081e792..cbd61f8 100644
--- a/lib/Analysis/BugReporter.cpp
+++ b/lib/Analysis/BugReporter.cpp
@@ -731,12 +731,12 @@
   // Determine the range.
   
   const SourceRange *Beg, *End;
-  
+
   if (!D->empty()) {
     Beg = D->back()->ranges_begin();
     End = D->back()->ranges_end();
   }
-  else  
+  else
     R.getRanges(*this, Beg, End);
 
   if (PD) {
@@ -745,18 +745,18 @@
     for ( ; Beg != End; ++Beg)
       piece->addRange(*Beg);
 
-    D->push_back(piece);    
+    D->push_back(piece);
     PD->HandlePathDiagnostic(D.take());
   }
   else {
-    std::ostringstream os;  
-    
+    std::ostringstream os;
+
     if (D->empty())
       os << R.getDescription();
     else
       os << D->back()->getString();
-    
-    
+
+
     Diagnostic& Diag = getDiagnostic();
     unsigned ErrorDiag = Diag.getCustomDiagID(Diagnostic::Warning,
                                               os.str().c_str());
@@ -764,3 +764,19 @@
     Diag.Report(L, ErrorDiag, NULL, 0, Beg, End - Beg);
   }
 }
+
+void
+BugReporter::EmitBasicReport(const char* name, const char* str,
+                             SourceLocation Loc) {
+  
+  SimpleBugType BT(name);
+  DiagCollector C(BT);
+  Diagnostic& Diag = getDiagnostic();
+  Diag.Report(&C, getContext().getFullLoc(Loc),
+              Diag.getCustomDiagID(Diagnostic::Warning, str),
+              0, 0, 0, 0);
+  
+  for (DiagCollector::iterator I = C.begin(), E = C.end(); I != E; ++I)
+    EmitWarning(*I);
+}
+                                  
diff --git a/lib/Analysis/CheckObjCDealloc.cpp b/lib/Analysis/CheckObjCDealloc.cpp
index 3e21f01..0c91009 100644
--- a/lib/Analysis/CheckObjCDealloc.cpp
+++ b/lib/Analysis/CheckObjCDealloc.cpp
@@ -83,8 +83,7 @@
   
   // Get the "dealloc" selector.
   IdentifierInfo* II = &Ctx.Idents.get("dealloc");
-  Selector S = Ctx.Selectors.getSelector(0, &II);
-  
+  Selector S = Ctx.Selectors.getSelector(0, &II);  
   ObjCMethodDecl* MD = 0;
   
   // Scan the instance methods for "dealloc".
@@ -99,52 +98,32 @@
   
   if (!MD) { // No dealloc found.
     
-    // FIXME: This code should be reduced to three lines if possible (Refactor).
-    SimpleBugType BT(LOpts.getGCMode() == LangOptions::NonGC 
-                     ? "missing -dealloc" 
-                     : "missing -dealloc (Hybrid MM, non-GC)");
-    
-    DiagCollector C(BT);
+    const char* name = LOpts.getGCMode() == LangOptions::NonGC 
+                       ? "missing -dealloc" 
+                       : "missing -dealloc (Hybrid MM, non-GC)";
     
     std::ostringstream os;
     os << "Objective-C class '" << D->getName()
        << "' lacks a 'dealloc' instance method";
     
-    Diagnostic& Diag = BR.getDiagnostic();    
-    Diag.Report(&C,
-                Ctx.getFullLoc(D->getLocStart()),
-                Diag.getCustomDiagID(Diagnostic::Warning, os.str().c_str()),
-                NULL, 0, NULL, 0);
-        
-    for (DiagCollector::iterator I = C.begin(), E = C.end(); I != E; ++I)
-      BR.EmitWarning(*I);
-    
+    BR.EmitBasicReport(name, os.str().c_str(), D->getLocStart());
     return;
   }
   
   // dealloc found.  Scan for missing [super dealloc].
   if (MD->getBody() && !scan_dealloc(MD->getBody(), S)) {
     
-    // FIXME: This code should be reduced to three lines if possible (Refactor).
-    SimpleBugType BT(LOpts.getGCMode() == LangOptions::NonGC
-                     ? "missing [super dealloc]"
-                     : "missing [super dealloc] (Hybrid MM, non-GC)");
-                     
-    DiagCollector C(BT);
+    const char* name = LOpts.getGCMode() == LangOptions::NonGC
+                       ? "missing [super dealloc]"
+                       : "missing [super dealloc] (Hybrid MM, non-GC)";
     
     std::ostringstream os;
     os << "The 'dealloc' instance method in Objective-C class '" << D->getName()
        << "' does not send a 'dealloc' message to its super class"
            " (missing [super dealloc])";
     
-    Diagnostic& Diag = BR.getDiagnostic();    
-    Diag.Report(&C,
-                Ctx.getFullLoc(MD->getLocStart()),
-                Diag.getCustomDiagID(Diagnostic::Warning, os.str().c_str()),
-                NULL, 0, NULL, 0);
-    
-    for (DiagCollector::iterator I = C.begin(), E = C.end(); I != E; ++I)
-      BR.EmitWarning(*I);
-  }    
+    BR.EmitBasicReport(name, os.str().c_str(), D->getLocStart());
+    return;
+  }   
 }
 
diff --git a/lib/Analysis/CheckObjCInstMethSignature.cpp b/lib/Analysis/CheckObjCInstMethSignature.cpp
index f5966ec..ffaef42 100644
--- a/lib/Analysis/CheckObjCInstMethSignature.cpp
+++ b/lib/Analysis/CheckObjCInstMethSignature.cpp
@@ -64,16 +64,8 @@
        << "'.  These two types are incompatible, and may result in undefined "
           "behavior for clients of these classes.";
     
-    // Refactor.
-    SimpleBugType BT("incompatible instance method return type");
-    DiagCollector C(BT);
-    Diagnostic& Diag = BR.getDiagnostic();    
-    Diag.Report(&C, Ctx.getFullLoc(MethDerived->getLocStart()),
-                Diag.getCustomDiagID(Diagnostic::Warning, os.str().c_str()),
-                NULL, 0, NULL, 0);
-    
-    for (DiagCollector::iterator I = C.begin(), E = C.end(); I != E; ++I)
-      BR.EmitWarning(*I);
+    BR.EmitBasicReport("incompatible instance method return type",
+                       os.str().c_str(), MethDerived->getLocStart());
   }
 }
 
