diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp
index 3c814db..4e88baa 100644
--- a/lib/Analysis/BugReporter.cpp
+++ b/lib/Analysis/BugReporter.cpp
@@ -1667,14 +1667,18 @@
 void BugReporter::FlushReport(BugReportEquivClass& EQ) {
   assert(!EQ.Reports.empty());
   BugReport &R = **EQ.begin();
+  PathDiagnosticClient* PD = getPathDiagnosticClient();
   
   // FIXME: Make sure we use the 'R' for the path that was actually used.
   // Probably doesn't make a difference in practice.  
   BugType& BT = R.getBugType();
   
-  llvm::OwningPtr<PathDiagnostic> D(new PathDiagnostic(R.getBugType().getName(),
-                                                R.getDescription(),
-                                                BT.getCategory()));
+  llvm::OwningPtr<PathDiagnostic>
+    D(new PathDiagnostic(R.getBugType().getName(),
+                         PD->useVerboseDescription()
+                         ? R.getDescription() : R.getShortDescription(),
+                         BT.getCategory()));
+
   GeneratePathDiagnostic(*D.get(), EQ);
   
   // Get the meta data.
@@ -1682,7 +1686,6 @@
   for (const char** s = Meta.first; s != Meta.second; ++s) D->addMeta(*s);
 
   // Emit a summary diagnostic to the regular Diagnostics engine.
-  PathDiagnosticClient* PD = getPathDiagnosticClient();
   const SourceRange *Beg = 0, *End = 0;
   R.getRanges(*this, Beg, End);    
   Diagnostic& Diag = getDiagnostic();
diff --git a/lib/Analysis/GRExprEngineInternalChecks.cpp b/lib/Analysis/GRExprEngineInternalChecks.cpp
index 1b03149..a40eff8 100644
--- a/lib/Analysis/GRExprEngineInternalChecks.cpp
+++ b/lib/Analysis/GRExprEngineInternalChecks.cpp
@@ -405,12 +405,23 @@
             "variable-length array (VLA) '"
          << VD->getNameAsString() << "' evaluates to ";
       
-      if (Eng.getStateManager().GetSVal(N->getState(), SizeExpr).isUndef())
+      bool isUndefined = Eng.getStateManager().GetSVal(N->getState(),
+                                                       SizeExpr).isUndef();
+      
+      if (isUndefined)
         os << "an undefined or garbage value.";
       else
         os << "0. VLAs with no elements have undefined behavior.";
+      
+      std::string shortBuf;
+      llvm::raw_string_ostream os_short(shortBuf);
+      os_short << "Variable-length array '" << VD->getNameAsString() << "' "
+               << (isUndefined ? " garbage value for array size"
+                   : " has zero elements (undefined behavior)");
 
-      RangedBugReport *report = new RangedBugReport(*this, os.str().c_str(), N);
+      RangedBugReport *report = new RangedBugReport(*this,
+                                                    os_short.str().c_str(),
+                                                    os.str().c_str(), N);
       report->addRange(SizeExpr->getSourceRange());
       BR.EmitReport(report);
     }
