diff --git a/lib/Analysis/IPA/CallGraphSCCPass.cpp b/lib/Analysis/IPA/CallGraphSCCPass.cpp
index c317a11..fcf4202 100644
--- a/lib/Analysis/IPA/CallGraphSCCPass.cpp
+++ b/lib/Analysis/IPA/CallGraphSCCPass.cpp
@@ -77,9 +77,6 @@
   CallGraph &CG = getAnalysis<CallGraph>();
   bool Changed = doInitialization(CG);
 
-  std::string Msg1 = "Executing Pass '";
-  std::string Msg3 = "' Made Modification '";
-
   // Walk SCC
   for (scc_iterator<CallGraph*> I = scc_begin(&CG), E = scc_end(&CG);
        I != E; ++I) {
@@ -91,8 +88,7 @@
       AnalysisUsage AnUsage;
       P->getAnalysisUsage(AnUsage);
 
-      std::string Msg2 = "' on Call Graph ...\n'";
-      dumpPassInfo(P, Msg1, Msg2);
+      dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, "");
       dumpAnalysisSetInfo("Required", P, AnUsage.getRequiredSet());
 
       initializeAnalysisImpl(P);
@@ -109,21 +105,20 @@
 	for (unsigned i = 0, e = SCC.size(); i != e; ++i) {
 	  Function *F = SCC[i]->getFunction();
 	  if (F) {
-            std::string Msg4 = "' on Function '" + F->getName() + "'...\n";
-            dumpPassInfo(P, Msg1, Msg4);
-	    Changed |= FPP->runOnFunction(*F);
+            dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName());
+            Changed |= FPP->runOnFunction(*F);
           }
 	}
       }
       StopPassTimer(P);
 
       if (Changed)
-	dumpPassInfo(P, Msg3, Msg2);
+        dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, "");
       dumpAnalysisSetInfo("Preserved", P, AnUsage.getPreservedSet());
       
       removeNotPreservedAnalysis(P);
       recordAvailableAnalysis(P);
-      removeDeadPasses(P, Msg2);
+      removeDeadPasses(P, "", ON_CG_MSG);
     }
   }
   Changed |= doFinalization(CG);
diff --git a/lib/Analysis/LoopPass.cpp b/lib/Analysis/LoopPass.cpp
index 4d2e290..40b38f3 100644
--- a/lib/Analysis/LoopPass.cpp
+++ b/lib/Analysis/LoopPass.cpp
@@ -91,9 +91,6 @@
   for (LoopInfo::iterator I = LI.begin(), E = LI.end(); I != E; ++I)
     addLoopIntoQueue(*I, LQ);
 
-  std::string Msg1 = "Executing Pass '";
-  std::string Msg3 = "' Made Modification '";
-
   // Walk Loops
   while (!LQ->empty()) {
       
@@ -108,8 +105,7 @@
       AnalysisUsage AnUsage;
       P->getAnalysisUsage(AnUsage);
 
-      std::string Msg2 = "' on Loop ...\n'";
-      dumpPassInfo(P, Msg1, Msg2);
+      dumpPassInfo(P, EXECUTION_MSG, ON_LOOP_MSG, "");
       dumpAnalysisSetInfo("Required", P, AnUsage.getRequiredSet());
 
       initializeAnalysisImpl(P);
@@ -121,12 +117,12 @@
       StopPassTimer(P);
 
       if (Changed)
-	dumpPassInfo(P, Msg3, Msg2);
+        dumpPassInfo(P, MODIFICATION_MSG, ON_LOOP_MSG, "");
       dumpAnalysisSetInfo("Preserved", P, AnUsage.getPreservedSet());
       
       removeNotPreservedAnalysis(P);
       recordAvailableAnalysis(P);
-      removeDeadPasses(P, Msg2);
+      removeDeadPasses(P, "", ON_LOOP_MSG);
 
       if (skipThisLoop)
         // Do not run other passes on this loop.
