Index: /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 27931)
+++ /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 27932)
@@ -106,7 +106,5 @@
 
 	if(VerboseControl())_printf0_("   Computing initial solution\n");
-	_printf0_("\n");
-	_printf0_("Cost function f(x)   | Gradient norm |g(x)| |  List of contributions\n");
-	_printf0_("____________________________________________________________________\n");
+	InversionStatsHeader(num_cost_functions);
 
 	/*Prepare structure for m1qn3*/
@@ -133,4 +131,5 @@
 
 	/*Print exit flag*/
+	InversionStatsFooter(num_cost_functions);
 	switch(int(omode)){
 		case 0:  _printf0_("   Stop requested (indic = 0)\n"); break;
@@ -265,5 +264,4 @@
 	femmodel->CostFunctionx(&J,&Jtemp,NULL);
 	*pf = reCast<double>(J);
-	_printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<"  |  ");
 
 	/*Record cost function values and delete Jtemp*/
@@ -274,9 +272,5 @@
 	if(*indic==0){
 		/*dry run, no gradient required*/
-
-		/*Retrieve objective functions independently*/
-		_printf0_("            N/A |\n");
-		for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
-		_printf0_("\n");
+		InversionStatsIter( (*Jlisti)+1, *pf, NAN, &Jlist[(*Jlisti)*JlistN], num_responses);
 
 		*Jlisti = (*Jlisti) +1;
@@ -313,7 +307,5 @@
 
 	/*Print info*/
-	_printf0_("       "<<setw(12)<<setprecision(7)<<Gnorm<<" |");
-	for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);
-	_printf0_("\n");
+	InversionStatsIter( (*Jlisti)+1, *pf, Gnorm, &Jlist[(*Jlisti)*JlistN], num_responses);
 
 	/*Clean-up and return*/
