Index: /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/DakotaSpawnCore.cpp	(revision 15099)
@@ -62,5 +62,5 @@
 	femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
 
-	if(VerboseQmu()) _pprintLine_("qmu iteration: " << counter);
+	if(VerboseQmu()) _pprintString_("qmu iteration: " << counter << "\n");
 
 	/* only cpu 0, running dakota is providing us with variables and variables_descriptors and numresponses: broadcast onto other cpus: */
@@ -71,5 +71,5 @@
 
 	/*Determine solution sequence: */
-	if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
+	if(VerboseQmu()) _pprintString_("Starting " << EnumToStringx(solution_type) << " core:" << "\n");
 	WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
 
@@ -78,5 +78,5 @@
 
 	/*compute responses: */
-	if(VerboseQmu()) _pprintLine_("compute dakota responses:");
+	if(VerboseQmu()) _pprintString_("compute dakota responses:" << "\n");
 	femmodel->DakotaResponsesx(d_responses,responses_descriptors,numresponsedescriptors,d_numresponses);
 
Index: /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/ResetBoundaryConditions.cpp	(revision 15099)
@@ -13,5 +13,5 @@
 	Nodes *nodes = NULL;
 
-	if(VerboseSolution()) _pprintLine_("   updating boundary conditions...");
+	if(VerboseSolution()) _pprintString_("   updating boundary conditions..." << "\n");
 
 	/*set current analysis: */
Index: /issm/trunk-jpl/src/c/analyses/ad_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/ad_core.cpp	(revision 15099)
@@ -49,5 +49,5 @@
 			if(!(num_dependents*num_independents)) return;
 
-			if(VerboseAutodiff())_pprintLine_("   start ad core");
+			if(VerboseAutodiff())_pprintString_("   start ad core" << "\n");
 
 			/*retrieve state variable: */
@@ -286,13 +286,13 @@
 			tapestats(1,tape_stats); //reading of tape statistics
 			if(VerboseAutodiff()){
-				_pprintLine_("   ADOLC statistics: ");
-				_pprintLine_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0]);
-				_pprintLine_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1]);
-				_pprintLine_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2]);
-				_pprintLine_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3]);
-				_pprintLine_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4]);
-				_pprintLine_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5]);
-			}
-			if(VerboseAutodiff())_pprintLine_("   end AD core");
+				_pprintString_("   ADOLC statistics: " << "\n");
+				_pprintString_("   "<<setw(45)<<left<<"Number of independents: " <<tape_stats[0] << "\n");
+				_pprintString_("   "<<setw(45)<<left<<"Number of dependents: " <<tape_stats[1] << "\n");
+				_pprintString_("   "<<setw(45)<<left<<"Maximal number of live active variables: " <<tape_stats[2] << "\n");
+				_pprintString_("   "<<setw(45)<<left<<"Size of value stack (number of overwrites): " <<tape_stats[3] << "\n");
+				_pprintString_("   "<<setw(45)<<left<<"Buffer size (a multiple of eight): " <<tape_stats[4] << "\n");
+				_pprintString_("   "<<setw(45)<<left<<"Total number of operations recorded: " <<tape_stats[5] << "\n");
+			}
+			if(VerboseAutodiff())_pprintString_("   end AD core" << "\n");
 
 			/*Free resources: */
Index: /issm/trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/adjointbalancethickness_core.cpp	(revision 15099)
@@ -19,5 +19,5 @@
 
 	/*compute thickness */
-	if(VerboseSolution()) _pprintLine_("   computing thickness");
+	if(VerboseSolution()) _pprintString_("   computing thickness" << "\n");
 	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum);
 	solutionsequence_linear(femmodel);
@@ -27,5 +27,5 @@
 
 	/*compute adjoint*/
-	if(VerboseSolution()) _pprintLine_("   computing adjoint");
+	if(VerboseSolution()) _pprintString_("   computing adjoint" << "\n");
 	femmodel->SetCurrentConfiguration(BalancethicknessAnalysisEnum,AdjointBalancethicknessAnalysisEnum);
 	solutionsequence_adjoint_linear(femmodel);
@@ -33,5 +33,5 @@
 	/*Save results*/
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointEnum);
 	}
Index: /issm/trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/adjointdiagnostic_core.cpp	(revision 15099)
@@ -22,5 +22,5 @@
 
 	/*Compute velocities*/
-	if(VerboseSolution()) _pprintLine_("   computing velocities");
+	if(VerboseSolution()) _pprintString_("   computing velocities" << "\n");
 	femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
 	solutionsequence_nonlinear(femmodel,conserve_loads); 
@@ -30,5 +30,5 @@
 
 	/*Compute adjoint*/
-	if(VerboseSolution()) _pprintLine_("   computing adjoint");
+	if(VerboseSolution()) _pprintString_("   computing adjoint" << "\n");
 	femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum,AdjointHorizAnalysisEnum);
 	solutionsequence_adjoint_linear(femmodel);
@@ -36,5 +36,5 @@
 	/*Save results*/
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointxEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,AdjointyEnum);
Index: /issm/trunk-jpl/src/c/analyses/balancethickness_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/balancethickness_core.cpp	(revision 15099)
@@ -21,9 +21,9 @@
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 
-	if(VerboseSolution()) _pprintLine_("call computational core:");
+	if(VerboseSolution()) _pprintString_("call computational core:" << "\n");
 	solutionsequence_linear(femmodel);
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
 	}
Index: /issm/trunk-jpl/src/c/analyses/bedslope_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/bedslope_core.cpp	(revision 15099)
@@ -18,5 +18,5 @@
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 
-	if(VerboseSolution()) _pprintLine_("   computing slope");
+	if(VerboseSolution()) _pprintString_("   computing slope" << "\n");
 
 	/*Call on core computations: */
@@ -27,5 +27,5 @@
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeXEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedSlopeYEnum);
Index: /issm/trunk-jpl/src/c/analyses/control_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/control_core.cpp	(revision 15099)
@@ -66,5 +66,5 @@
 
 	/*Launch once a complete solution to set up all inputs*/
-	if(VerboseControl()) _pprintLine_("   preparing initial solution");
+	if(VerboseControl()) _pprintString_("   preparing initial solution" << "\n");
 	if(isstokes) solutioncore(femmodel);
 
@@ -81,5 +81,5 @@
 
 		/*Display info*/
-		if(VerboseControl()) _pprintLine_("\n" << "   control method step " << n+1 << "/" << nsteps);
+		if(VerboseControl()) _pprintString_("\n" << "   control method step " << n+1 << "/" << nsteps << "\n");
 		for(i=0;i<num_responses;i++) step_responses[i]=reCast<int,IssmDouble>(responses[n*num_responses+i]);
 		femmodel->parameters->SetParam(step_responses,1,num_responses,StepResponsesEnum);
@@ -88,5 +88,5 @@
 		if(solution_type==SteadystateSolutionEnum) solutioncore(femmodel);
 
-		if(VerboseControl()) _pprintLine_("   compute adjoint state:");
+		if(VerboseControl()) _pprintString_("   compute adjoint state:" << "\n");
 		adjointcore(femmodel);
 		gradient_core(femmodel,n,search_scalar==0);
@@ -98,9 +98,9 @@
 		}
 
-		if(VerboseControl()) _pprintLine_("   optimizing along gradient direction");
+		if(VerboseControl()) _pprintString_("   optimizing along gradient direction" << "\n");
 		optpars.maxiter=reCast<int,IssmDouble>(maxiter[n]); optpars.cm_jump=cm_jump[n];
 		BrentSearch(&search_scalar,J+n,&optpars,&objectivefunction,&optargs);
 
-		if(VerboseControl()) _pprintLine_("   updating parameter using optimized search scalar"); //true means update save controls
+		if(VerboseControl()) _pprintString_("   updating parameter using optimized search scalar" << "\n"); //true means update save controls
 		InputControlUpdatex(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,search_scalar,true);
 
@@ -108,5 +108,5 @@
 	}
 
-	if(VerboseControl()) _pprintLine_("   preparing final solution");
+	if(VerboseControl()) _pprintString_("   preparing final solution" << "\n");
 	femmodel->parameters->SetParam(true,SaveResultsEnum);
 	solutioncore(femmodel);
Index: /issm/trunk-jpl/src/c/analyses/controltao_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/controltao_core.cpp	(revision 15099)
@@ -54,5 +54,5 @@
 	/*Initialize TAO*/
 	TaoCreate(IssmComm::GetComm(),&tao);
-	if(VerboseControl()) _pprintLine_("   Initializing the Toolkit for Advanced Optimization (TAO)");
+	if(VerboseControl()) _pprintString_("   Initializing the Toolkit for Advanced Optimization (TAO)" << "\n");
 	TaoSetFromOptions(tao);
 	TaoSetType(tao,"tao_blmvm");
@@ -79,5 +79,5 @@
 
 	/*Solver optimization problem*/
-	if(VerboseControl()) _pprintLine_("   Starting optimization");
+	if(VerboseControl()) _pprintString_("   Starting optimization" << "\n");
 	TaoSolve(tao);
 	TaoView(tao,PETSC_VIEWER_STDOUT_WORLD);
@@ -90,5 +90,5 @@
 
 	/*Finalize*/
-	if(VerboseControl()) _pprintLine_("   preparing final solution");
+	if(VerboseControl()) _pprintString_("   preparing final solution" << "\n");
 	femmodel->parameters->SetParam(true,SaveResultsEnum);
 	void (*solutioncore)(FemModel*)=NULL;
@@ -166,6 +166,6 @@
 
 	TaoGetSolutionStatus(tao, &its, &f, &gnorm, &cnorm, &xdiff, NULL);
-	if(its==0) _pprintLine_("Iter       Function      Residual  |  List of contributions");
-	if(its==0) _pprintLine_("-----------------------------------+-----------------------");
+	if(its==0) _pprintString_("Iter       Function      Residual  |  List of contributions" << "\n");
+	if(its==0) _pprintString_("-----------------------------------+-----------------------" << "\n");
 	_pprintString_(setw(4)<<its<<"   "<<setw(12)<<setprecision(7)<<f<<"  "<<setw(12)<<setprecision(7)<<gnorm<<"  | ");
 	user->J[its]=f;
@@ -176,5 +176,5 @@
 		_pprintString_(" "<<setw(12)<<setprecision(7)<<f);
 	}
-	_pprintLine_("");
+	_pprintString_("" << "\n");
 
 	/*Clean-up and return*/
Index: /issm/trunk-jpl/src/c/analyses/diagnostic_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/diagnostic_core.cpp	(revision 15099)
@@ -58,5 +58,5 @@
 	if(ishutter){
 
-		if(VerboseSolution()) _pprintLine_("   computing hutter velocities");
+		if(VerboseSolution()) _pprintString_("   computing hutter velocities" << "\n");
 
 		//Take the last velocity into account so that the velocity on the MacAyeal domain is not zero
@@ -71,5 +71,5 @@
 	if ((ismacayealpattyn || isl1l2) ^ isstokes){ // ^ = xor
 
-		if(VerboseSolution()) _pprintLine_("   computing velocities");
+		if(VerboseSolution()) _pprintString_("   computing velocities" << "\n");
 		femmodel->SetCurrentConfiguration(DiagnosticHorizAnalysisEnum);
 		if(newton>0)
@@ -81,5 +81,5 @@
 	if (ismacayealpattyn && isstokes){
 
-		if(VerboseSolution()) _pprintLine_("   computing coupling macayealpattyn and stokes velocities and pressure ");
+		if(VerboseSolution()) _pprintString_("   computing coupling macayealpattyn and stokes velocities and pressure " << "\n");
 		solutionsequence_stokescoupling_nonlinear(femmodel,conserve_loads);
 	}
@@ -87,5 +87,5 @@
 	if (dim==3 & (ishutter || ismacayealpattyn)){
 
-		if(VerboseSolution()) _pprintLine_("   computing vertical velocities");
+		if(VerboseSolution()) _pprintString_("   computing vertical velocities" << "\n");
 		femmodel->SetCurrentConfiguration(DiagnosticVertAnalysisEnum);
 		solutionsequence_linear(femmodel);
@@ -93,5 +93,5 @@
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
Index: /issm/trunk-jpl/src/c/analyses/enthalpy_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/enthalpy_core.cpp	(revision 15099)
@@ -18,5 +18,5 @@
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 
-	if(VerboseSolution()) _pprintLine_("   computing enthalpy");
+	if(VerboseSolution()) _pprintString_("   computing enthalpy" << "\n");
 	femmodel->SetCurrentConfiguration(EnthalpyAnalysisEnum);
 	solutionsequence_nonlinear(femmodel,true);
@@ -26,5 +26,5 @@
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,EnthalpyEnum);
Index: /issm/trunk-jpl/src/c/analyses/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/gia_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/gia_core.cpp	(revision 15099)
@@ -26,5 +26,5 @@
 	femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
 
-	if(VerboseSolution()) _pprintLine_("   computing GIA");
+	if(VerboseSolution()) _pprintString_("   computing GIA" << "\n");
 
 	/*Call on core computations: */
@@ -50,5 +50,5 @@
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiaWEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,GiadWdtEnum);
Index: /issm/trunk-jpl/src/c/analyses/gradient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/gradient_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/gradient_core.cpp	(revision 15099)
@@ -20,9 +20,9 @@
 
 	/*Compute gradient*/
-	if(VerboseControl()) _pprintLine_("   compute cost function gradient");
+	if(VerboseControl()) _pprintString_("   compute cost function gradient" << "\n");
 	Gradjx(&gradient,&norm_list,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters);
 
 	if (orthogonalize){
-		if(VerboseControl()) _pprintLine_("   orthogonalization");
+		if(VerboseControl()) _pprintString_("   orthogonalization" << "\n");
 		ControlInputGetGradientx(&old_gradient,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters);
 		Orthx(&new_gradient,gradient,old_gradient); delete old_gradient; delete gradient;
Index: /issm/trunk-jpl/src/c/analyses/hydrology_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/hydrology_core.cpp	(revision 15099)
@@ -51,5 +51,5 @@
 	for(i=0;i<nsteps;i++){
 
-		if(nsteps)if(VerboseSolution()) _pprintLine_("time step:" << i+1 << "/" << nsteps);
+		if(nsteps)if(VerboseSolution()) _pprintString_("time step:" << i+1 << "/" << nsteps << "\n");
 		time+=dt;
 		step+=1;
@@ -58,5 +58,5 @@
 
 		if (hydrology_model==HydrologyshreveEnum){
-			if(VerboseSolution()) _pprintLine_("   computing water column");
+			if(VerboseSolution()) _pprintString_("   computing water column" << "\n");
 			femmodel->SetCurrentConfiguration(HydrologyShreveAnalysisEnum);
 			solutionsequence_nonlinear(femmodel,modify_loads);
@@ -67,5 +67,5 @@
 
 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
-				if(VerboseSolution()) _pprintLine_("   saving results ");
+				if(VerboseSolution()) _pprintString_("   saving results " << "\n");
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,WatercolumnEnum);
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,HydrologyWaterVxEnum);
@@ -73,5 +73,5 @@
 
 				/*unload results*/
-				if(VerboseSolution()) _pprintLine_("   saving temporary results");
+				if(VerboseSolution()) _pprintString_("   saving temporary results" << "\n");
 				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
 			}
@@ -82,10 +82,10 @@
 			femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
 
-			if(VerboseSolution()) _pprintLine_("   computing water transfer");
+			if(VerboseSolution()) _pprintString_("   computing water transfer" << "\n");
 
-			if(VerboseSolution()) _pprintLine_("   computing water head");
+			if(VerboseSolution()) _pprintString_("   computing water head" << "\n");
 			solutionsequence_hydro_nonlinear(femmodel);
 			if(save_results && ((i+1)%output_frequency==0 || (i+1)==nsteps)){
-				if(VerboseSolution()) _pprintLine_("   saving results ");
+				if(VerboseSolution()) _pprintString_("   saving results " << "\n");
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadEnum);
 				InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SedimentHeadResidualEnum);
@@ -94,5 +94,5 @@
 				}
 				/*unload results*/
-				if(VerboseSolution()) _pprintLine_("   saving temporary results");
+				if(VerboseSolution()) _pprintString_("   saving temporary results" << "\n");
 				OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
 			}
Index: /issm/trunk-jpl/src/c/analyses/prognostic_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/prognostic_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/prognostic_core.cpp	(revision 15099)
@@ -32,20 +32,20 @@
 
 	if(issmbgradients){
-	  if(VerboseSolution)_printLine_("	call smb gradients module\n");
+	  if(VerboseSolution)_printString_("	call smb gradients module\n" << "\n");
 	  SmbGradientsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
 	}
 	if(ispdd){
 		if(isdelta18o){
-			if(VerboseSolution()) _pprintLine_("   call Delta18oParametrization module");
+			if(VerboseSolution()) _pprintString_("   call Delta18oParametrization module" << "\n");
 			Delta18oParameterizationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
 		} 
-		if(VerboseSolution()) _pprintLine_("   call positive degree day module");
+		if(VerboseSolution()) _pprintString_("   call positive degree day module" << "\n");
 		PositiveDegreeDayx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
 	}
-	if(VerboseSolution()) _pprintLine_("   call computational core");
+	if(VerboseSolution()) _pprintString_("   call computational core" << "\n");
 	solutionsequence_linear(femmodel);
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ThicknessEnum);
 		femmodel->RequestedOutputsx(requested_outputs,numoutputs);
Index: /issm/trunk-jpl/src/c/analyses/steadystate_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/steadystate_core.cpp	(revision 15099)
@@ -48,5 +48,5 @@
 	for(;;){
 
-		if(VerboseSolution()) _pprintLine_("   computing temperature and velocity for step: " << step);
+		if(VerboseSolution()) _pprintString_("   computing temperature and velocity for step: " << step << "\n");
 		#ifdef _HAVE_THERMAL_
 		if(isenthalpy==0){
@@ -63,14 +63,14 @@
 		#endif
 
-		if(VerboseSolution()) _pprintLine_("   computing new velocity");
+		if(VerboseSolution()) _pprintString_("   computing new velocity" << "\n");
 		diagnostic_core(femmodel);
 		GetSolutionFromInputsx(&ug,femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);
 
 		if(step>1){
-			if(VerboseSolution()) _pprintLine_("   checking steadystate convergence");
+			if(VerboseSolution()) _pprintString_("   checking steadystate convergence" << "\n");
 			if(steadystateconvergence(tg,tg_old,ug,ug_old,reltol)) break;
 		}
 		if(step>maxiter){
-			if(VerboseSolution()) _pprintLine_("   maximum number steadystate iterations " << maxiter << " reached");
+			if(VerboseSolution()) _pprintString_("   maximum number steadystate iterations " << maxiter << " reached" << "\n");
 			break;
 		}
@@ -83,5 +83,5 @@
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VxEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VyEnum);
@@ -117,8 +117,8 @@
 	if (xIsNan<IssmDouble>(ndu) || xIsNan<IssmDouble>(nu)) _error_("convergence criterion is NaN!");
 	if((ndu/nu)<reltol){
-		if(VerboseConvergence()) _pprintLine_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" < "<<reltol*100<<" %");
+		if(VerboseConvergence()) _pprintString_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" < "<<reltol*100<<" %" << "\n");
 	}
 	else{ 
-		if(VerboseConvergence()) _pprintLine_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" > "<<reltol*100<<" %");
+		if(VerboseConvergence()) _pprintString_("\n"<<setw(50)<<left<<"   Velocity convergence: norm(du)/norm(u)"<<ndu/nu*100<<" > "<<reltol*100<<" %" << "\n");
 		converged=false;
 	}
@@ -129,8 +129,8 @@
 	if (xIsNan<IssmDouble>(ndt) || xIsNan<IssmDouble>(nt)) _error_("convergence criterion is NaN!");
 	if((ndt/nt)<reltol){
-		if(VerboseConvergence()) _pprintLine_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" < "<<reltol*100<<" %");
+		if(VerboseConvergence()) _pprintString_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" < "<<reltol*100<<" %" << "\n");
 	}
 	else{ 
-		if(VerboseConvergence()) _pprintLine_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" > "<<reltol*100<<" %");
+		if(VerboseConvergence()) _pprintString_(setw(50)<<left<<"   Temperature convergence: norm(dt)/norm(t)"<<ndt/nt*100<<" > "<<reltol*100<<" %" << "\n");
 		converged=false;
 	}
Index: /issm/trunk-jpl/src/c/analyses/surfaceslope_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/surfaceslope_core.cpp	(revision 15099)
@@ -18,5 +18,5 @@
 	femmodel->parameters->FindParam(&save_results,SaveResultsEnum);
 
-	if(VerboseSolution()) _pprintLine_("computing slope...");
+	if(VerboseSolution()) _pprintString_("computing slope..." << "\n");
 
 	/*Call on core computations: */
@@ -27,5 +27,5 @@
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("saving results:");
+		if(VerboseSolution()) _pprintString_("saving results:" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeXEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceSlopeYEnum);
Index: /issm/trunk-jpl/src/c/analyses/thermal_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/thermal_core.cpp	(revision 15099)
@@ -25,14 +25,14 @@
 	}
 
-	if(VerboseSolution()) _pprintLine_("   computing temperatures");
+	if(VerboseSolution()) _pprintString_("   computing temperatures" << "\n");
 	femmodel->SetCurrentConfiguration(ThermalAnalysisEnum);
 	solutionsequence_thermal_nonlinear(femmodel);
 
-	if(VerboseSolution()) _pprintLine_("   computing melting");
+	if(VerboseSolution()) _pprintString_("   computing melting" << "\n");
 	femmodel->SetCurrentConfiguration(MeltingAnalysisEnum);
 	solutionsequence_linear(femmodel);
 
 	if(save_results){
-		if(VerboseSolution()) _pprintLine_("   saving results");
+		if(VerboseSolution()) _pprintString_("   saving results" << "\n");
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
 		InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
Index: /issm/trunk-jpl/src/c/analyses/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/analyses/transient_core.cpp	(revision 15099)
@@ -85,5 +85,5 @@
 		femmodel->parameters->SetParam(step,StepEnum);
 
-		if(VerboseSolution()) _pprintLine_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << time/yts << " (time step: " << dt/yts << ")");
+		if(VerboseSolution()) _pprintString_("iteration " << step << "/" << floor((finaltime-time)/dt)+step << "  time [yr]: " << time/yts << " (time step: " << dt/yts << ")" << "\n");
 		if(step%output_frequency==0 || time==finaltime)
 		 save_results=true;
@@ -93,5 +93,5 @@
 
 		if(isthermal && dim==3){
-			if(VerboseSolution()) _pprintLine_("   computing temperatures");
+			if(VerboseSolution()) _pprintString_("   computing temperatures" << "\n");
 			#ifdef _HAVE_THERMAL_
 			if(isenthalpy==0){
@@ -107,5 +107,5 @@
 
 		if(isdiagnostic){
-			if(VerboseSolution()) _pprintLine_("   computing new velocity");
+			if(VerboseSolution()) _pprintString_("   computing new velocity" << "\n");
 			#ifdef _HAVE_DIAGNOSTIC_
 			diagnostic_core(femmodel);
@@ -116,12 +116,12 @@
 
 		if(isprognostic){
-			if(VerboseSolution()) _pprintLine_("   computing new thickness");
+			if(VerboseSolution()) _pprintString_("   computing new thickness" << "\n");
 			prognostic_core(femmodel);
-			if(VerboseSolution()) _pprintLine_("   updating vertices positions");
+			if(VerboseSolution()) _pprintString_("   updating vertices positions" << "\n");
 			femmodel->UpdateVertexPositionsx();
 		}
 
 		if(isgroundingline){
-			if(VerboseSolution()) _pprintLine_("   computing new grounding line position");
+			if(VerboseSolution()) _pprintString_("   computing new grounding line position" << "\n");
 			#ifdef _HAVE_GROUNDINGLINE_
 			GroundinglineMigrationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
@@ -131,5 +131,5 @@
 		}
 		if(isgia){
-			if(VerboseSolution()) _pprintLine_("   computing glacial isostatic adjustment");
+			if(VerboseSolution()) _pprintString_("   computing glacial isostatic adjustment" << "\n");
 			#ifdef _HAVE_GIA_
 			gia_core(femmodel);
@@ -142,5 +142,5 @@
 		/*unload results*/
 		if(save_results){
-			if(VerboseSolution()) _pprintLine_("   saving transient results");
+			if(VerboseSolution()) _pprintString_("   saving transient results" << "\n");
 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceEnum);
 			InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BedEnum);
@@ -158,5 +158,5 @@
 			}
 
-			if(VerboseSolution()) _pprintLine_("   saving temporary results");
+			if(VerboseSolution()) _pprintString_("   saving temporary results" << "\n");
 			OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
 		}
Index: /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/BamgVertex.cpp	(revision 15099)
@@ -15,8 +15,8 @@
 	void BamgVertex::Echo(void){
 
-		_printLine_("Vertex:");
-		_printLine_("  integer   coordinates i.x: " << i.x << ", i.y: " << i.y);
-		_printLine_("  Euclidean coordinates r.x: " << r.x << ", r.y: " << r.y);
-		_printLine_("  ReferenceNumber = " << ReferenceNumber);
+		_printString_("Vertex:" << "\n");
+		_printString_("  integer   coordinates i.x: " << i.x << ", i.y: " << i.y << "\n");
+		_printString_("  Euclidean coordinates r.x: " << r.x << ", r.y: " << r.y << "\n");
+		_printString_("  ReferenceNumber = " << ReferenceNumber << "\n");
 		m.Echo();
 
Index: /issm/trunk-jpl/src/c/bamg/Edge.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Edge.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/Edge.cpp	(revision 15099)
@@ -27,9 +27,9 @@
 	/*FUNCTION Edge::Echo {{{*/
 	void Edge::Echo(void){ 
-		_printLine_("Edge:");
-		_printLine_("   pointers towards two vertices: " << v[0] << " " << v[1]);
-		_printLine_("   ReferenceNumber = " << ReferenceNumber);
-		_printLine_("   GeomEdgeHook = " << GeomEdgeHook);
-		_printLine_("   two adjacent edges on the same curve: " << adj[0] << " " << adj[1]);
+		_printString_("Edge:" << "\n");
+		_printString_("   pointers towards two vertices: " << v[0] << " " << v[1] << "\n");
+		_printString_("   ReferenceNumber = " << ReferenceNumber << "\n");
+		_printString_("   GeomEdgeHook = " << GeomEdgeHook << "\n");
+		_printString_("   two adjacent edges on the same curve: " << adj[0] << " " << adj[1] << "\n");
 	}
 	/*}}}*/
Index: /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/EigenMetric.cpp	(revision 15099)
@@ -114,9 +114,9 @@
 	void EigenMetric::Echo(void){
 
-		_printLine_("EigenMetric:");
-		_printLine_("   lambda1: " << lambda1);
-		_printLine_("   lambda2: " << lambda2);
-		_printLine_("   v.x: " << v.x);
-		_printLine_("   v.y: " << v.y);
+		_printString_("EigenMetric:" << "\n");
+		_printString_("   lambda1: " << lambda1 << "\n");
+		_printString_("   lambda2: " << lambda2 << "\n");
+		_printString_("   v.x: " << v.x << "\n");
+		_printString_("   v.y: " << v.y << "\n");
 
 		return;
Index: /issm/trunk-jpl/src/c/bamg/Geometry.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Geometry.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/Geometry.cpp	(revision 15099)
@@ -80,5 +80,5 @@
 		//Vertices
 		if (bamggeom->Vertices){
-			if(verbose>5) _printLine_("      processing Vertices");
+			if(verbose>5) _printString_("      processing Vertices" << "\n");
 			if (bamggeom->VerticesSize[1]!=3) _error_("Vertices should have 3 columns");
 			vertices = new GeomVertex[nbv];
@@ -125,5 +125,5 @@
 			double* verticeslength=NULL;
 
-			if(verbose>5) _printLine_("      processing Edges");
+			if(verbose>5) _printString_("      processing Edges" << "\n");
 			if (bamggeom->EdgesSize[1]!=3) _error_("Edges should have 3 columns");
 			edges = new GeomEdge[nbe];
@@ -180,5 +180,5 @@
 		//hVertices
 		if(bamgopts->hVertices && bamgopts->hVerticesSize[0]==nbv){
-			if(verbose>5) _printLine_("      processing hVertices");
+			if(verbose>5) _printString_("      processing hVertices" << "\n");
 			for (i=0;i< nbv;i++){
 				if (!xIsNan<IssmPDouble>(bamgopts->hVertices[i])){
@@ -190,5 +190,5 @@
 		//MetricVertices
 		if(bamgopts->metric && bamgopts->metric[0]==nbv){
-			if(verbose>5) _printLine_("      processing MetricVertices");
+			if(verbose>5) _printString_("      processing MetricVertices" << "\n");
 			for (i=0;i< nbv;i++) {
 				vertices[i].m = Metric((double)bamgopts->metric[i*3+0],(double)bamgopts->metric[i*3+1],(double)bamgopts->metric[i*3+2]);
@@ -198,5 +198,5 @@
 		//MaxCornerAngle
 		if (bamgopts->MaxCornerAngle){
-			if(verbose>5) _printLine_("      processing MaxCornerAngle");
+			if(verbose>5) _printString_("      processing MaxCornerAngle" << "\n");
 			MaxCornerAngle=bamgopts->MaxCornerAngle*Pi/180;
 		}
@@ -237,5 +237,5 @@
 		//RequiredVertices
 		if(bamggeom->RequiredVertices){
-			if(verbose>5) _printLine_("      processing RequiredVertices");
+			if(verbose>5) _printString_("      processing RequiredVertices" << "\n");
 			if (bamggeom->RequiredVerticesSize[1]!=1) _error_("RequiredVertices should have 1 column");
 			n=bamggeom->RequiredVerticesSize[0];
@@ -249,5 +249,5 @@
 		//RequiredEdges
 		if(bamggeom->RequiredEdges){
-			if(verbose>5) _printLine_("      processing RequiredEdges");
+			if(verbose>5) _printString_("      processing RequiredEdges" << "\n");
 			if (bamggeom->RequiredEdgesSize[1]!=1) _error_("RequiredEdges should have 1 column");
 			n=bamggeom->RequiredEdgesSize[0];
@@ -261,5 +261,5 @@
 		//SubDomain
 		if(bamggeom->SubDomains){
-			if(verbose>5) _printLine_("      processing SubDomains");
+			if(verbose>5) _printString_("      processing SubDomains" << "\n");
 			if (bamggeom->SubDomainsSize[1]!=4) _error_("SubDomains should have 4 columns");
 			nbsubdomains=bamggeom->SubDomainsSize[0];
@@ -293,5 +293,5 @@
 
 		/*Vertices*/
-		if(verbose>5) _printLine_("      writing Vertices");
+		if(verbose>5) _printString_("      writing Vertices" << "\n");
 		bamggeom->VerticesSize[0]=nbv;
 		bamggeom->VerticesSize[1]=3;
@@ -309,5 +309,5 @@
 
 		/*Edges*/
-		if(verbose>5) _printLine_("      writing Edges");
+		if(verbose>5) _printString_("      writing Edges" << "\n");
 		bamggeom->EdgesSize[0]=nbe;
 		bamggeom->EdgesSize[1]=3;
@@ -327,5 +327,5 @@
 
 		/*RequiredEdges*/
-		if(verbose>5) _printLine_("      writing " << nbreq << " RequiredEdges");
+		if(verbose>5) _printString_("      writing " << nbreq << " RequiredEdges" << "\n");
 		bamggeom->RequiredEdgesSize[0]=nbreq;
 		bamggeom->RequiredEdgesSize[1]=1;
@@ -344,5 +344,5 @@
 
 		/*RequiredVertices*/
-		if(verbose>5) _printLine_("      writing " << nbreqv << " RequiredVertices");
+		if(verbose>5) _printString_("      writing " << nbreqv << " RequiredVertices" << "\n");
 		bamggeom->RequiredVerticesSize[0]=nbreqv;
 		bamggeom->RequiredVerticesSize[1]=1;
@@ -359,5 +359,5 @@
 
 		/*SubDomains*/
-		if(verbose>5) _printLine_("      writing SubDomains");
+		if(verbose>5) _printString_("      writing SubDomains" << "\n");
 		bamggeom->SubDomainsSize[0]=nbsubdomains;
 		bamggeom->SubDomainsSize[1]=4;
@@ -373,5 +373,5 @@
 
 		/*TangentAtEdges*/
-		if(verbose>5) _printLine_("      writing TangentAtEdges");
+		if(verbose>5) _printString_("      writing TangentAtEdges" << "\n");
 		bamggeom->TangentAtEdgesSize[0]=nbtan;
 		bamggeom->TangentAtEdgesSize[1]=4;
@@ -402,18 +402,18 @@
 	void Geometry::Echo(void){
 
-		_printLine_("Geometry:");
-		_printLine_("   nbv  (number of vertices) : " << nbv);
-		_printLine_("   nbe  (number of edges)    : " << nbe);
-		_printLine_("   nbsubdomains: " << nbsubdomains);
-		_printLine_("   nbcurves: " << nbcurves);
-		_printLine_("   vertices: " << vertices);
-		_printLine_("   edges: " << edges);
-		_printLine_("   quadtree: " << quadtree);
-		_printLine_("   subdomains: " << subdomains);
-		_printLine_("   curves: " << curves);
-		_printLine_("   pmin (x,y): (" << pmin.x << " " << pmin.y << ")");
-		_printLine_("   pmax (x,y): (" << pmax.x << " " << pmax.y << ")");
-		_printLine_("   coefIcoor: " << coefIcoor);
-		_printLine_("   MaxCornerAngle: " << MaxCornerAngle);
+		_printString_("Geometry:" << "\n");
+		_printString_("   nbv  (number of vertices) : " << nbv << "\n");
+		_printString_("   nbe  (number of edges)    : " << nbe << "\n");
+		_printString_("   nbsubdomains: " << nbsubdomains << "\n");
+		_printString_("   nbcurves: " << nbcurves << "\n");
+		_printString_("   vertices: " << vertices << "\n");
+		_printString_("   edges: " << edges << "\n");
+		_printString_("   quadtree: " << quadtree << "\n");
+		_printString_("   subdomains: " << subdomains << "\n");
+		_printString_("   curves: " << curves << "\n");
+		_printString_("   pmin (x,y): (" << pmin.x << " " << pmin.y << ")" << "\n");
+		_printString_("   pmax (x,y): (" << pmax.x << " " << pmax.y << ")" << "\n");
+		_printString_("   coefIcoor: " << coefIcoor << "\n");
+		_printString_("   MaxCornerAngle: " << MaxCornerAngle << "\n");
 
 		return;
@@ -524,7 +524,7 @@
 			/*if there is a vertex found that is to close to vertices[i] -> error*/
 			if( v && Norme1(v->r - vertices[i].r) < eps ){
-				_printLine_("reference numbers: " << v->ReferenceNumber << " " << vertices[i].ReferenceNumber);
-				_printLine_("Id: " << i+1);
-				_printLine_("Coords: ["<<v->r.x<<" "<<v->r.y<<"] ["<<vertices[i].r.x<<" "<<vertices[i].r.y<<"]");
+				_printString_("reference numbers: " << v->ReferenceNumber << " " << vertices[i].ReferenceNumber << "\n");
+				_printString_("Id: " << i+1 << "\n");
+				_printString_("Coords: ["<<v->r.x<<" "<<v->r.y<<"] ["<<vertices[i].r.x<<" "<<vertices[i].r.y<<"]" << "\n");
 
 				delete [] next_p;
@@ -869,9 +869,9 @@
 			if (bge<=0) {
 				if(NbTry) {
-					_printLine_("Fatal Error: on the class Mesh before call Geometry::ProjectOnCurve");
-					_printLine_("That bug might come from:");
-					_printLine_(" 1)  a mesh edge  containing more than " << mxe/2 << " geometrical edges");
-					_printLine_(" 2)  code bug : be sure that we call   Mesh::SetVertexFieldOn() before");
-					_printLine_("To solve the problem do a coarsening of the geometrical mesh or change the constant value of mxe (dangerous)");
+					_printString_("Fatal Error: on the class Mesh before call Geometry::ProjectOnCurve" << "\n");
+					_printString_("That bug might come from:" << "\n");
+					_printString_(" 1)  a mesh edge  containing more than " << mxe/2 << " geometrical edges" << "\n");
+					_printString_(" 2)  code bug : be sure that we call   Mesh::SetVertexFieldOn() before" << "\n");
+					_printString_("To solve the problem do a coarsening of the geometrical mesh or change the constant value of mxe (dangerous)" << "\n");
 					_error_("see above");
 				}
@@ -886,12 +886,12 @@
 		while (eg1 != (GeomEdge*) vg1  &&  (*eg1)(direction1) != (GeomVertex*) vg1) { 
 			if(tge>=mxe ) { 
-				_printLine_("WARNING: on the class Mesh before call Geometry::ProjectOnCurve is having issues (isn't it Eric?)");
+				_printString_("WARNING: on the class Mesh before call Geometry::ProjectOnCurve is having issues (isn't it Eric?)" << "\n");
 				NbTry++;
 				if (NbTry<2) goto retry;
-				_printLine_("Fatal Error: on the class Mesh before call Geometry::ProjectOnCurve");
-				_printLine_("That bug might come from:");
-				_printLine_(" 1)  a mesh edge  contening more than " << mxe/2 << " geometrical edges");
-				_printLine_(" 2)  code bug : be sure that we call   Mesh::SetVertexFieldOn() before");
-				_printLine_("To solve the problem do a coarsening of the geometrical mesh or change the constant value of mxe (dangerous)");
+				_printString_("Fatal Error: on the class Mesh before call Geometry::ProjectOnCurve" << "\n");
+				_printString_("That bug might come from:" << "\n");
+				_printString_(" 1)  a mesh edge  contening more than " << mxe/2 << " geometrical edges" << "\n");
+				_printString_(" 2)  code bug : be sure that we call   Mesh::SetVertexFieldOn() before" << "\n");
+				_printString_("To solve the problem do a coarsening of the geometrical mesh or change the constant value of mxe (dangerous)" << "\n");
 				_error_("see above");
 			}
Index: /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/ListofIntersectionTriangles.cpp	(revision 15099)
@@ -169,5 +169,5 @@
 			//x.Echo();
 			//y.Echo();
-			//_printLine_("cx = " << cx << ", cy=" << cy);
+			//_printString_("cx = " << cx << ", cy=" << cy << "\n");
 
 			si += sint;
@@ -188,5 +188,5 @@
 			MaxNbSeg *= 2;
 			if (verbosity>3){
-				_printLine_("   reshape lSegsI from " << mneo << " to " << MaxNbSeg);
+				_printString_("   reshape lSegsI from " << mneo << " to " << MaxNbSeg << "\n");
 			}
 			_assert_(lSegsI && NbSeg<MaxNbSeg);
@@ -213,5 +213,5 @@
 		for (int i=0;i<MaxSize;i++) nw[i] = lIntTria[i];       
 		long int verbosity=0;
-		if(verbosity>3) _printLine_("   ListofIntersectionTriangles  ReShape Maxsize " << MaxSize << " -> " << MaxNbSeg);
+		if(verbosity>3) _printString_("   ListofIntersectionTriangles  ReShape Maxsize " << MaxSize << " -> " << MaxNbSeg << "\n");
 		MaxSize = newsize; 
 		delete [] lIntTria;// remove old
Index: /issm/trunk-jpl/src/c/bamg/Mesh.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Mesh.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/Mesh.cpp	(revision 15099)
@@ -31,5 +31,5 @@
 		if(bamggeom->Edges==NULL) {
 			/*Recreate geometry if needed*/
-			_printLine_("WARNING: mesh present but no geometry found. Reconstructing...");
+			_printString_("WARNING: mesh present but no geometry found. Reconstructing..." << "\n");
 			BuildGeometryFromMesh(bamgopts);
 			Gh.PostRead();
@@ -103,7 +103,7 @@
 			  if (kk[i]>=0) kk[i]=k++;
 			}
-		  _printLine_("   number of vertices " << k << ", remove = " << Tho.nbv - k);
-		  _printLine_("   number of triangles " << kt << ", remove = " << nbInT-kt);
-		  _printLine_("   number of New boundary edge " << nbNewBedge);
+		  _printString_("   number of vertices " << k << ", remove = " << Tho.nbv - k << "\n");
+		  _printString_("   number of triangles " << kt << ", remove = " << nbInT-kt << "\n");
+		  _printString_("   number of New boundary edge " << nbNewBedge << "\n");
 		  long imaxnbv =k;
 		  Init(imaxnbv);
@@ -281,5 +281,5 @@
 
 		//Vertices
-		if (verbose) _printLine_("Reading vertices (" << nbv << ")");
+		if (verbose) _printString_("Reading vertices (" << nbv << ")" << "\n");
 		vertices=xNew<BamgVertex>(nbv);
 		orderedvertices=xNew<BamgVertex*>(nbv);
@@ -295,5 +295,5 @@
 
 		//Triangles
-		if (verbose) _printLine_("Reading triangles (" << nbt << ")");
+		if (verbose) _printString_("Reading triangles (" << nbt << ")" << "\n");
 		triangles =new Triangle[maxnbt]; //we cannot allocate only nbt triangles since 
 		nodeflags=xNew<bool>(nbv);
@@ -311,7 +311,7 @@
 
 		/*Recreate geometry: */
-		if (verbose) _printLine_("Building Geometry");
+		if (verbose) _printString_("Building Geometry" << "\n");
 		BuildGeometryFromMesh();
-		if (verbose) _printLine_("Completing geometry");
+		if (verbose) _printString_("Completing geometry" << "\n");
 		Gh.PostRead();
 
@@ -320,5 +320,5 @@
 		for(i=0;i<nbv;i++){
 			if(!nodeflags[i]){
-				_printLine_("Vertex " << i+1 << " does not belong to any element");
+				_printString_("Vertex " << i+1 << " does not belong to any element" << "\n");
 				isorphan=true;
 			}
@@ -347,5 +347,5 @@
 		//Vertices
 		if(bamgmesh->Vertices){
-			if(verbose>5) _printLine_("      processing Vertices");
+			if(verbose>5) _printString_("      processing Vertices" << "\n");
 
 			vertices=xNew<BamgVertex>(nbv);
@@ -368,5 +368,5 @@
 		//Triangles
 		if(bamgmesh->Triangles){
-			if(verbose>5) _printLine_("      processing Triangles");
+			if(verbose>5) _printString_("      processing Triangles" << "\n");
 			triangles =new Triangle[maxnbt]; //we cannot allocate only nbt triangles since 
 			//other triangles will be added for each edge
@@ -386,5 +386,5 @@
 		//Quadrilaterals
 		if(bamgmesh->Quadrilaterals){
-			if(verbose>5) _printLine_("      processing Quadrilaterals");
+			if(verbose>5) _printString_("      processing Quadrilaterals" << "\n");
 			long i1,i2,i3,i4;
 			triangles =new Triangle[nbt];
@@ -408,5 +408,5 @@
 		//VerticesOnGeomEdge
 		if(bamgmesh->VerticesOnGeomEdge){
-			if(verbose>5) _printLine_("      processing VerticesOnGeomEdge");
+			if(verbose>5) _printString_("      processing VerticesOnGeomEdge" << "\n");
 			NbVerticesOnGeomEdge=bamgmesh->VerticesOnGeomEdgeSize[0];
 			VerticesOnGeomEdge= new  VertexOnGeom[NbVerticesOnGeomEdge] ;
@@ -423,5 +423,5 @@
 		//VerticesOnGeomVertex
 		if(bamgmesh->VerticesOnGeomVertexSize[0]){
-			if(verbose>5) _printLine_("      processing VerticesOnGeomVertex");
+			if(verbose>5) _printString_("      processing VerticesOnGeomVertex" << "\n");
 			NbVerticesOnGeomVertex=bamgmesh->VerticesOnGeomVertexSize[0];
 			VerticesOnGeomVertex  = new  VertexOnGeom[NbVerticesOnGeomVertex] ;
@@ -439,5 +439,5 @@
 			double* len=NULL;
 
-			if(verbose>5) _printLine_("      processing Edges");
+			if(verbose>5) _printString_("      processing Edges" << "\n");
 			nbe=bamgmesh->EdgesSize[0];
 			edges= new Edge[nbe];
@@ -499,5 +499,5 @@
 		//EdgeOnGeomEdge
 		if(bamgmesh->EdgesOnGeomEdge){
-			if(verbose>5) _printLine_("      processing EdgesOnGeomEdge");
+			if(verbose>5) _printString_("      processing EdgesOnGeomEdge" << "\n");
 			int i1,i2,i,j;
 			i2=bamgmesh->EdgesOnGeomEdgeSize[0];
@@ -516,5 +516,5 @@
 		if(bamgmesh->SubDomains){
 			long i3,head,direction;
-			if(verbose>5) _printLine_("      processing SubDomains");
+			if(verbose>5) _printString_("      processing SubDomains" << "\n");
 			nbsubdomains=bamgmesh->SubDomainsSize[0];
 			subdomains = new SubDomain [ nbsubdomains ];
@@ -585,5 +585,5 @@
 
 		/*Vertices*/
-		if(verbose>5) _printLine_("      writing Vertices");
+		if(verbose>5) _printString_("      writing Vertices" << "\n");
 		bamgmesh->VerticesSize[0]=nbv;
 		bamgmesh->VerticesSize[1]=3;
@@ -598,5 +598,5 @@
 
 		/*Edges*/
-		if(verbose>5) _printLine_("      writing Edges");
+		if(verbose>5) _printString_("      writing Edges" << "\n");
 		bamgmesh->EdgesSize[0]=nbe;
 		bamgmesh->EdgesSize[1]=3;
@@ -615,5 +615,5 @@
 
 		/*Element edges*/
-		if(verbose>5) _printLine_("      writing element edges");
+		if(verbose>5) _printString_("      writing element edges" << "\n");
 		SetOfEdges4* edge4=new SetOfEdges4(nbt*3,nbv);
 		double* elemedge=NULL;
@@ -671,5 +671,5 @@
 
 		/*IssmSegments*/
-		if(verbose>5) _printLine_("      writing IssmSegments");
+		if(verbose>5) _printString_("      writing IssmSegments" << "\n");
 		bamgmesh->IssmSegmentsSize[0]=NumIssmSegments;
 		bamgmesh->IssmSegmentsSize[1]=4;
@@ -714,5 +714,5 @@
 
 		/*Triangles*/
-		if(verbose>5) _printLine_("      writing Triangles");
+		if(verbose>5) _printString_("      writing Triangles" << "\n");
 		k=nbInT-nbq*2;
 		num=0;
@@ -735,5 +735,5 @@
 
 		/*Quadrilaterals*/
-		if(verbose>5) _printLine_("      writing Quadrilaterals");
+		if(verbose>5) _printString_("      writing Quadrilaterals" << "\n");
 		bamgmesh->QuadrilateralsSize[0]=nbq;
 		bamgmesh->QuadrilateralsSize[1]=5;
@@ -756,5 +756,5 @@
 
 		/*SubDomains*/
-		if(verbose>5) _printLine_("      writing SubDomains");
+		if(verbose>5) _printString_("      writing SubDomains" << "\n");
 		bamgmesh->SubDomainsSize[0]=nbsubdomains;
 		bamgmesh->SubDomainsSize[1]=4;
@@ -770,5 +770,5 @@
 
 		/*SubDomainsFromGeom*/
-		if(verbose>5) _printLine_("      writing SubDomainsFromGeom");
+		if(verbose>5) _printString_("      writing SubDomainsFromGeom" << "\n");
 		bamgmesh->SubDomainsFromGeomSize[0]=Gh.nbsubdomains;
 		bamgmesh->SubDomainsFromGeomSize[1]=4;
@@ -784,5 +784,5 @@
 
 		/*VerticesOnGeomVertex*/
-		if(verbose>5) _printLine_("      writing VerticesOnGeomVertex");
+		if(verbose>5) _printString_("      writing VerticesOnGeomVertex" << "\n");
 		bamgmesh->VerticesOnGeomVertexSize[0]=NbVerticesOnGeomVertex;
 		bamgmesh->VerticesOnGeomVertexSize[1]=2;
@@ -798,5 +798,5 @@
 
 		/*VertexOnGeomEdge*/
-		if(verbose>5) _printLine_("      writing VerticesOnGeomEdge");
+		if(verbose>5) _printString_("      writing VerticesOnGeomEdge" << "\n");
 		bamgmesh->VerticesOnGeomEdgeSize[0]=NbVerticesOnGeomEdge;
 		bamgmesh->VerticesOnGeomEdgeSize[1]=3;
@@ -815,5 +815,5 @@
 
 		/*EdgesOnGeomEdge*/
-		if(verbose>5) _printLine_("      writing EdgesOnGeomEdge");
+		if(verbose>5) _printString_("      writing EdgesOnGeomEdge" << "\n");
 		k=0;
 		for (i=0;i<nbe;i++){
@@ -835,5 +835,5 @@
 
 		/*Element Connectivity*/
-		if(verbose>5) _printLine_("      writing Element connectivity");
+		if(verbose>5) _printString_("      writing Element connectivity" << "\n");
 		bamgmesh->ElementConnectivitySize[0]=nbt-nbtout;
 		bamgmesh->ElementConnectivitySize[1]=3;
@@ -855,5 +855,5 @@
 
 		/*ElementNodal Connectivity*/
-		if(verbose>5) _printLine_("      writing Nodal element connectivity");
+		if(verbose>5) _printString_("      writing Nodal element connectivity" << "\n");
 		bamgmesh->NodalElementConnectivitySize[0]=nbv;
 		bamgmesh->NodalElementConnectivitySize[1]=connectivitymax_1;
@@ -870,5 +870,5 @@
 
 		/*Nodal Connectivity*/
-		if(verbose>5) _printLine_("      writing Nodal connectivity");
+		if(verbose>5) _printString_("      writing Nodal connectivity" << "\n");
 		//chaining algorithm (again...)
 		int* head_2=NULL;
@@ -924,5 +924,5 @@
 
 		/*Cracked vertices*/
-		if(verbose>5) _printLine_("      writing Cracked vertices");
+		if(verbose>5) _printString_("      writing Cracked vertices" << "\n");
 		bamgmesh->CrackedVerticesSize[0]=NbCrackedVertices;
 		bamgmesh->CrackedVerticesSize[1]=2;
@@ -936,5 +936,5 @@
 
 		/*Cracked vertices*/
-		if(verbose>5) _printLine_("      writing Cracked vertices");
+		if(verbose>5) _printString_("      writing Cracked vertices" << "\n");
 		bamgmesh->CrackedEdgesSize[0]=NbCrackedEdges;
 		bamgmesh->CrackedEdgesSize[1]=4;
@@ -964,5 +964,5 @@
 		int  i,j;
 
-		if(bamgopts->verbose>3) _printLine_("      processing metric");
+		if(bamgopts->verbose>3) _printString_("      processing metric" << "\n");
 		double hmin = Max(bamgopts->hmin,MinimalHmin());
 		double hmax = Min(bamgopts->hmax,MaximalHmax());
@@ -1265,5 +1265,5 @@
 
 		//display info
-		if (verbose > 1)  _printLine_("   BoundAnisotropy by " << anisomax);
+		if (verbose > 1)  _printString_("   BoundAnisotropy by " << anisomax << "\n");
 
 		double h1=1.e30,h2=1e-30;
@@ -1292,6 +1292,6 @@
 		//display info
 		if (verbose>2){
-			_printLine_("      input:  Hmin = " << pow(h2,-0.5)  << ", Hmax = " << pow(h1,-0.5) << ", factor of anisotropy max  = " << pow(rx,0.5));
-			_printLine_("      output: Hmin = " << pow(hn2,-0.5) << ", Hmax = " << pow(hn1,-0.5)<< ", factor of anisotropy max  = " <<pow(rnx,0.5));
+			_printString_("      input:  Hmin = " << pow(h2,-0.5)  << ", Hmax = " << pow(h1,-0.5) << ", factor of anisotropy max  = " << pow(rx,0.5) << "\n");
+			_printString_("      output: Hmin = " << pow(hn2,-0.5) << ", Hmax = " << pow(hn1,-0.5)<< ", factor of anisotropy max  = " <<pow(rnx,0.5) << "\n");
 		}
 	}
@@ -1315,5 +1315,5 @@
 
 		//display info
-		if (verbose>1) _printLine_("   construction of the geometry from the 2d mesh");
+		if (verbose>1) _printString_("   construction of the geometry from the 2d mesh" << "\n");
 
 		//check that the mesh is not empty
@@ -1375,8 +1375,8 @@
 				//else (see 3 lines above), the edge has been called more than twice: return error
 				else {
-					_printLine_("The edge (" << GetId(triangles[i][VerticesOfTriangularEdge[j][0]]) << "," << GetId(triangles[i][VerticesOfTriangularEdge[j][1]]) << ") belongs to more than 2 triangles (" << k << ")");
-					_printLine_("Edge " << j << " of triangle " << i);
-					_printLine_("Edge " << (-st[k]+2)%3 << " of triangle " << (-st[k]+2)/3);
-					_printLine_("Edge " << triangles[(-st[k]+2)/3].NuEdgeTriangleAdj((int)((-st[k]+2)%3)) << " of triangle " << GetId(triangles[(-st[k]+2)/3].TriangleAdj((int)((-st[k]+2)%3))));
+					_printString_("The edge (" << GetId(triangles[i][VerticesOfTriangularEdge[j][0]]) << "," << GetId(triangles[i][VerticesOfTriangularEdge[j][1]]) << ") belongs to more than 2 triangles (" << k << ")" << "\n");
+					_printString_("Edge " << j << " of triangle " << i << "\n");
+					_printString_("Edge " << (-st[k]+2)%3 << " of triangle " << (-st[k]+2)/3 << "\n");
+					_printString_("Edge " << triangles[(-st[k]+2)/3].NuEdgeTriangleAdj((int)((-st[k]+2)%3)) << " of triangle " << GetId(triangles[(-st[k]+2)/3].TriangleAdj((int)((-st[k]+2)%3))) << "\n");
 					_error_("An edge belongs to more than 2 triangles");
 				}	
@@ -1390,10 +1390,10 @@
 		//display info
 		if(verbose>5) {
-			_printLine_("         info on Mesh:");
-			_printLine_("            - number of vertices    = " << nbv); 
-			_printLine_("            - number of triangles   = " << nbt); 
-			_printLine_("            - number of given edges = " << nbe); 
-			_printLine_("            - number of all edges   = " << nbedges); 
-			_printLine_("            - Euler number 1 - nb of holes = " << nbt-nbedges+nbv); 
+			_printString_("         info on Mesh:" << "\n");
+			_printString_("            - number of vertices    = " << nbv << "\n"); 
+			_printString_("            - number of triangles   = " << nbt << "\n"); 
+			_printString_("            - number of given edges = " << nbe << "\n"); 
+			_printString_("            - number of all edges   = " << nbedges << "\n"); 
+			_printString_("            - Euler number 1 - nb of holes = " << nbt-nbedges+nbv << "\n"); 
 		}
 
@@ -1426,5 +1426,5 @@
 
 			//display info
-			if(verbose>4) _printLine_("   Construction of the edges " << nbe);
+			if(verbose>4) _printString_("   Construction of the edges " << nbe << "\n");
 
 			for (i=0;i<nbedges;i++){ 
@@ -1452,5 +1452,5 @@
 						edges[add].ReferenceNumber=edgessave[i].ReferenceNumber; 		      
 						edges[add].GeomEdgeHook=edgessave[i].GeomEdgeHook; //  HACK to get required edges
-						_printLine_("oh no...");
+						_printString_("oh no..." << "\n");
 					}
 					else
@@ -1567,5 +1567,5 @@
 			}
 		}
-		if (verbose> 3) _printLine_("      The Number of sub domain = " << nbsubdomains); 
+		if (verbose> 3) _printString_("      The Number of sub domain = " << nbsubdomains << "\n"); 
 
 		//build subdomains
@@ -1619,5 +1619,5 @@
 		Gh.nbsubdomains = nbsubdomains;
 		Gh.subdomains = new GeomSubDomain[nbsubdomains];
-		if (verbose>3) _printLine_("   number of vertices = " << Gh.nbv << "\n   number of edges = " << Gh.nbe);
+		if (verbose>3) _printString_("   number of vertices = " << Gh.nbv << "\n   number of edges = " << Gh.nbe << "\n");
 		NbVerticesOnGeomVertex = Gh.nbv;
 		VerticesOnGeomVertex = new VertexOnGeom[NbVerticesOnGeomVertex];
@@ -1791,5 +1791,5 @@
 		//display infos
 		if(verbose>1) {
-			_printLine_("   Construction of Metric: number of field: " << nbsol << " (nbt=" << nbt << ", nbv=" << nbv << ")");
+			_printString_("   Construction of Metric: number of field: " << nbsol << " (nbt=" << nbt << ", nbv=" << nbv << ")" << "\n");
 		}
 
@@ -1863,9 +1863,9 @@
 
 			//display info
-			if(verbose>2) _printLine_("      Solution " << nusol << ", Min = " << smin << ", Max = " << smax << ", Delta = " << sdelta);
+			if(verbose>2) _printString_("      Solution " << nusol << ", Min = " << smin << ", Max = " << smax << ", Delta = " << sdelta << "\n");
 
 			//skip constant field
 			if (sdelta < 1.0e-10*Max(absmax,1e-20)){
-				_printLine_("      Solution " << nusol << " is constant, skipping...");
+				_printString_("      Solution " << nusol << " is constant, skipping..." << "\n");
 				continue;
 			}
@@ -1993,5 +1993,5 @@
 		//display infos
 		if(verbose>1) {
-			_printLine_("   Construction of Metric: number of field: " << nbsol << " (nbt=" << nbt << ", nbv=" << nbv << ")");
+			_printString_("   Construction of Metric: number of field: " << nbsol << " (nbt=" << nbt << ", nbv=" << nbv << ")" << "\n");
 		}
 
@@ -2076,9 +2076,9 @@
 
 			//display info
-			if(verbose>2) _printLine_("      Solution " << nusol << ", Min = " << smin << ", Max = " << smax << ", Delta = " << sdelta << ", number of fields = " << nbsol);
+			if(verbose>2) _printString_("      Solution " << nusol << ", Min = " << smin << ", Max = " << smax << ", Delta = " << sdelta << ", number of fields = " << nbsol << "\n");
 
 			//skip constant field
 			if (sdelta < 1.0e-10*Max(absmax,1e-20) ){
-				if (verbose>2) _printLine_("      Solution " << nusol << " is constant, skipping...");
+				if (verbose>2) _printString_("      Solution " << nusol << " is constant, skipping..." << "\n");
 				continue;
 			}
@@ -2265,5 +2265,5 @@
 		//Return if no edge is cracked
 		if(k==0) return;
-		if (verbose>4) _printLine_("      number of Cracked Edges = " << k);
+		if (verbose>4) _printString_("      number of Cracked Edges = " << k << "\n");
 
 		//Initialize Cracked edge
@@ -2306,5 +2306,5 @@
 
 		//Add new vertices
-		if (verbose>4) _printLine_("      number of Cracked Vertices = " << NbCrackedVertices);
+		if (verbose>4) _printString_("      number of Cracked Vertices = " << NbCrackedVertices << "\n");
 		if (NbCrackedVertices){
 			CrackedVertices=xNew<long>(2*NbCrackedVertices);
@@ -2375,5 +2375,5 @@
 					}
 				}
-				//_printLine_(element_renu[GetId(ta.t)] << " -> " << GetId((*ta.t)[0])+1 << " " << GetId((*ta.t)[1])+1 << " " << GetId((*ta.t)[2])+1 << ", edge [" << i1 << "->" << j1 << " " << i2 << "->" << j2 << "]");
+				//_printString_(element_renu[GetId(ta.t)] << " -> " << GetId((*ta.t)[0])+1 << " " << GetId((*ta.t)[1])+1 << " " << GetId((*ta.t)[2])+1 << ", edge [" << i1 << "->" << j1 << " " << i2 << "->" << j2 << "]" << "\n");
 				ta = Next(ta).Adj(); 
 				if (count++>50) _error_("Maximum number of iteration exceeded");
@@ -2399,19 +2399,19 @@
 		int i;
 
-		_printLine_("Mesh Echo:");
-		_printLine_("   nbv = " << nbv);
-		_printLine_("   nbt = " << nbt);
-		_printLine_("   nbe = " << nbe);
-		_printLine_("   nbq = " << nbq);
-		_printLine_("   index:");
+		_printString_("Mesh Echo:" << "\n");
+		_printString_("   nbv = " << nbv << "\n");
+		_printString_("   nbt = " << nbt << "\n");
+		_printString_("   nbe = " << nbe << "\n");
+		_printString_("   nbq = " << nbq << "\n");
+		_printString_("   index:" << "\n");
 		for (i=0;i<nbt;i++){
-			_printLine_("   " << setw(4) << i+1 << ": [" 
+			_printString_("   " << setw(4) << i+1 << ": [" 
 						<< setw(4) << (((BamgVertex *)triangles[i](0))?GetId(triangles[i][0])+1:0) << " " 
 						<< setw(4) << (((BamgVertex *)triangles[i](0))?GetId(triangles[i][1])+1:0) << " " 
 						<< setw(4) << (((BamgVertex *)triangles[i](0))?GetId(triangles[i][2])+1:0) << "]");
 		}
-		_printLine_("   coordinates:");
+		_printString_("   coordinates:" << "\n");
 		for (i=0;i<nbv;i++){
-			_printLine_("   " << setw(4) << i+1 << ": [" << vertices[i].r.x << " " << vertices[i].r.y << "]");
+			_printString_("   " << setw(4) << i+1 << ": [" << vertices[i].r.x << " " << vertices[i].r.y << "]" << "\n");
 		}
 
@@ -2427,5 +2427,5 @@
 
 			//display
-			if (verbose > 2) _printLine_("   ForceBoundary  nb of edge: " << nbe);
+			if (verbose > 2) _printString_("   ForceBoundary  nb of edge: " << nbe << "\n");
 
 			//check that there is no triangle with 0 determinant
@@ -2458,5 +2458,5 @@
 				Nbswap +=  vertices[j].Optim(1,0);
 			}
-			if (verbose > 3) _printLine_("      number of inforced edge = " << nbfe << ", number of swap= " << Nbswap); 
+			if (verbose > 3) _printString_("      number of inforced edge = " << nbfe << ", number of swap= " << Nbswap << "\n"); 
 		}
 	/*}}}*/
@@ -2468,6 +2468,6 @@
 
 		if (verbose >2){
-			if (OutSide) _printLine_("   Find all external sub-domain"); 
-			else _printLine_("   Find all internal sub-domain");
+			if (OutSide) _printString_("   Find all external sub-domain" << "\n"); 
+			else _printString_("   Find all internal sub-domain" << "\n");
 		  }
 		short * HeapArete = new short[nbt];
@@ -2613,5 +2613,5 @@
 								 }//while (t)
 								}
-							if(verbose>4) _printLine_("      Number of removes subdomains (OutSideMesh) = " << nbsubdomains-j);
+							if(verbose>4) _printString_("      Number of removes subdomains (OutSideMesh) = " << nbsubdomains-j << "\n");
 							nbsubdomains=j;
 						  }
@@ -2692,5 +2692,5 @@
 
 				if (inew < nbsubdomains) {
-					if (verbose>5) _printLine_("WARNING: " << nbsubdomains-inew << " SubDomains are being removed");
+					if (verbose>5) _printString_("WARNING: " << nbsubdomains-inew << " SubDomains are being removed" << "\n");
 					nbsubdomains=inew;}
 
@@ -2799,5 +2799,5 @@
 
 		//Display info
-		if (verbose>2) _printLine_("   Insert initial " << nbv << " vertices");
+		if (verbose>2) _printString_("   Insert initial " << nbv << " vertices" << "\n");
 
 		//Compute integer coordinates for the existing vertices
@@ -2890,5 +2890,5 @@
 		/*Now, add the vertices One by One*/
 		long NbSwap=0;
-		if (verbose>3) _printLine_("   Begining of insertion process...");
+		if (verbose>3) _printString_("   Begining of insertion process..." << "\n");
 
 		for (int icount=2; icount<nbv; icount++) {
@@ -2913,6 +2913,6 @@
 		//Display info
 		if (verbose>3) {
-			_printLine_("      NbSwap of insertion: " << NbSwap);
-			_printLine_("      NbSwap/nbv:          " << NbSwap/nbv);
+			_printString_("      NbSwap of insertion: " << NbSwap << "\n");
+			_printString_("      NbSwap/nbv:          " << NbSwap/nbv << "\n");
 		}
 
@@ -2928,6 +2928,6 @@
 			 NbSwap += orderedvertices[is1]->Optim(0,0);
 			if (verbose>3) {
-				_printLine_("      Optim Loop: " << Nbloop);
-				_printLine_("      NbSwap/nbv:          " << NbSwap/nbv);
+				_printString_("      Optim Loop: " << Nbloop << "\n");
+				_printString_("      NbSwap/nbv:          " << NbSwap/nbv << "\n");
 			}
 			if(!NbSwap) break;
@@ -2952,5 +2952,5 @@
 
 		//display info if required
-		if (verbose>5) _printLine_("      Try to Insert " << nbvnew << " new points");
+		if (verbose>5) _printString_("      Try to Insert " << nbvnew << " new points" << "\n");
 
 		//return if no new points
@@ -3002,12 +3002,12 @@
 		} 
 		if (verbose>3) {
-			_printLine_("         number of new points: " << iv);
-			_printLine_("         number of to close (?) points: " << nbv-iv);
-			_printLine_("         number of swap after: " << NbSwap);
+			_printString_("         number of new points: " << iv << "\n");
+			_printString_("         number of to close (?) points: " << nbv-iv << "\n");
+			_printString_("         number of swap after: " << NbSwap << "\n");
 		}
 		nbv = iv;
 
 		for (i=nbvold;i<nbv;i++) NbSwap += vertices[i].Optim(1);  
-		if (verbose>3) _printLine_("   NbSwap=" << NbSwap);
+		if (verbose>3) _printString_("   NbSwap=" << NbSwap << "\n");
 
 		NbTSwap +=  NbSwap ;
@@ -3055,5 +3055,5 @@
 			if (!e[i]){
 				kk++;
-				if(kk<10) _printLine_("BUG: the geometrical edge " << i << " is on no edge curve");
+				if(kk<10) _printString_("BUG: the geometrical edge " << i << " is on no edge curve" << "\n");
 			}
 		}
@@ -3069,8 +3069,8 @@
 		long int verbose=0;
 
-		if (verbose>2) _printLine_("MakeQuadrangles costheta = " << costheta);
+		if (verbose>2) _printString_("MakeQuadrangles costheta = " << costheta << "\n");
 
 		if (costheta >1) {
-			if (verbose>5) _printLine_("   do nothing: costheta > 1");
+			if (verbose>5) _printString_("   do nothing: costheta > 1" << "\n");
 		}
 
@@ -3098,7 +3098,7 @@
 			nbq = kk;
 			if (verbose>2){
-				_printLine_("   number of quadrilaterals    = " << nbq);
-				_printLine_("   number of triangles         = " << nbt-nbtout- nbq*2);
-				_printLine_("   number of outside triangles = " << nbtout);
+				_printString_("   number of quadrilaterals    = " << nbq << "\n");
+				_printString_("   number of triangles         = " << nbt-nbtout- nbq*2 << "\n");
+				_printString_("   number of outside triangles = " << nbtout << "\n");
 			}
 			delete [] qq;
@@ -3126,5 +3126,5 @@
 
 		const  double maxsubdiv2 = maxsubdiv*maxsubdiv;
-		if(verbose>1) _printLine_("   Limit the subdivision of a edges in the new mesh by " << maxsubdiv);
+		if(verbose>1) _printString_("   Limit the subdivision of a edges in the new mesh by " << maxsubdiv << "\n");
 		// for all the edges 
 		// if the len of the edge is to long 
@@ -3169,5 +3169,5 @@
 		}
 		if(verbose>3){
-			_printLine_("      number of metric changes = " << nbchange << ", maximum number of subdivision of a edges before change = " << pow(lmax,0.5));
+			_printString_("      number of metric changes = " << nbchange << ", maximum number of subdivision of a edges before change = " << pow(lmax,0.5) << "\n");
 		}
 	}
@@ -3223,5 +3223,5 @@
 		/*First, insert old points if requested*/
 		if (KeepVertices && (&Bh != this) && (nbv+Bh.nbv< maxnbv)){
-			if (verbose>5) _printLine_("         Inserting initial mesh points");
+			if (verbose>5) _printString_("         Inserting initial mesh points" << "\n");
 			for (i=0;i<Bh.nbv;i++){ 
 				BamgVertex &bv=Bh[i];
@@ -3242,5 +3242,5 @@
 		// Big loop (most time consuming)
 		int iter=0;
-		if (verbose>5) _printLine_("         Big loop");
+		if (verbose>5) _printString_("         Big loop" << "\n");
 		do {
 			/*Update variables*/
@@ -3473,5 +3473,5 @@
 	// find extrema coordinates of vertices pmin,pmax
 	long i;
-	if(verbose>2) _printLine_("      Reconstruct mesh of " << nbv << " vertices"); 
+	if(verbose>2) _printString_("      Reconstruct mesh of " << nbv << " vertices" << "\n"); 
 
 	//initialize orderedvertices
@@ -3530,10 +3530,10 @@
 	//Display info if required
 	if(verbose>5) {
-		_printLine_("         info of Mesh:");
-		_printLine_("            - number of vertices    = " << nbv << " "); 
-		_printLine_("            - number of triangles   = " << nbt << " "); 
-		_printLine_("            - number of given edges = " << nbe << " "); 
-		_printLine_("            - number of all edges   = " << edge4->nb()); 
-		_printLine_("            - Euler number 1 - nb of holes = " << nbt-edge4->nb()+nbv); 
+		_printString_("         info of Mesh:" << "\n");
+		_printString_("            - number of vertices    = " << nbv << " " << "\n"); 
+		_printString_("            - number of triangles   = " << nbt << " " << "\n"); 
+		_printString_("            - number of given edges = " << nbe << " " << "\n"); 
+		_printString_("            - number of all edges   = " << edge4->nb() << "\n"); 
+		_printString_("            - Euler number 1 - nb of holes = " << nbt-edge4->nb()+nbv << "\n"); 
 	}
 
@@ -3552,8 +3552,8 @@
 				if (k<10) {
 					//print only 10 edges
-					_printLine_("Lost boundary edges " << i << " : " << edge4->i(i) << " " << edge4->j(i));
+					_printString_("Lost boundary edges " << i << " : " << edge4->i(i) << " " << edge4->j(i) << "\n");
 				}
 				else if (k==10){
-					_printLine_("Other lost boundary edges not shown...");
+					_printString_("Other lost boundary edges not shown..." << "\n");
 				}
 			}
@@ -3743,14 +3743,14 @@
 					/*Check that the 2 vertices are on geometry AND required*/
 					if(!edges[i][j].GeomEdgeHook->IsRequiredVertex()){
-						_printLine_("ReconstructExistingMesh error message: problem with the edge number " << i+1 << ": [" << GetId(edges[i][0])+1 << " " << GetId(edges[i][1])+1 << "]");
-						_printLine_("This edge is on geometrical edge number " << Gh.GetId(edges[i].GeomEdgeHook)+1);
+						_printString_("ReconstructExistingMesh error message: problem with the edge number " << i+1 << ": [" << GetId(edges[i][0])+1 << " " << GetId(edges[i][1])+1 << "]" << "\n");
+						_printString_("This edge is on geometrical edge number " << Gh.GetId(edges[i].GeomEdgeHook)+1 << "\n");
 						if (edges[i][j].GeomEdgeHook->OnGeomVertex())
-						 _printLine_("the vertex number " << GetId(edges[i][j])+1 << " of this edge is a geometric BamgVertex number " << Gh.GetId(edges[i][j].GeomEdgeHook->gv)+1);
+						 _printString_("the vertex number " << GetId(edges[i][j])+1 << " of this edge is a geometric BamgVertex number " << Gh.GetId(edges[i][j].GeomEdgeHook->gv)+1 << "\n");
 						else if (edges[i][j].GeomEdgeHook->OnGeomEdge())
-						 _printLine_("the vertex number " << GetId(edges[i][j])+1 << " of this edge is a geometric Edge number " << Gh.GetId(edges[i][j].GeomEdgeHook->ge)+1);
+						 _printString_("the vertex number " << GetId(edges[i][j])+1 << " of this edge is a geometric Edge number " << Gh.GetId(edges[i][j].GeomEdgeHook->ge)+1 << "\n");
 						else
-						 _printLine_("Its pointer is " << edges[i][j].GeomEdgeHook);
-
-						_printLine_("This edge is on geometry and has no adjacent edge (open curve) and one of the tip is not required");
+						 _printString_("Its pointer is " << edges[i][j].GeomEdgeHook << "\n");
+
+						_printString_("This edge is on geometry and has no adjacent edge (open curve) and one of the tip is not required" << "\n");
 						_error_("See above (might be cryptic...)");
 					}
@@ -3840,13 +3840,13 @@
 		long it,ie,i;
 
-		_printLine_("renumbering triangles");
+		_printString_("renumbering triangles" << "\n");
 		for ( it=0;it<nbt;it++) 
 		 triangles[it].Renumbering(vertices,ve,renu);
 
-		_printLine_("renumbering edges");
+		_printString_("renumbering edges" << "\n");
 		for ( ie=0;ie<nbe;ie++) 
 		 edges[ie].Renumbering(vertices,ve,renu);
 
-		_printLine_("renumbering vertices on geom");
+		_printString_("renumbering vertices on geom" << "\n");
 		for (i=0;i< NbVerticesOnGeomVertex;i++)
 		  {
@@ -3856,5 +3856,5 @@
 		  }
 
-		_printLine_("renumbering vertices on edge");
+		_printString_("renumbering vertices on edge" << "\n");
 		for (i=0;i< NbVerticesOnGeomEdge;i++)
 		  {
@@ -3864,5 +3864,5 @@
 		  }
 
-		_printLine_("renumbering vertices on Bth vertex");
+		_printString_("renumbering vertices on Bth vertex" << "\n");
 		for (i=0;i< NbVertexOnBThVertex;i++)
 		  {
@@ -3954,5 +3954,5 @@
 				number_of_errors++;
 				if (number_of_errors<20){
-					_printLine_("Area of Triangle " << i+1 << " < 0 (det=" << triangles[i].det << ")");
+					_printString_("Area of Triangle " << i+1 << " < 0 (det=" << triangles[i].det << ")" << "\n");
 				}
 			}
@@ -4022,10 +4022,10 @@
 	gammamn=sqrt(gammamn);
 	gammamx=sqrt(gammamx);    
-	_printLine_("   Adaptmesh info:");
-	_printLine_("      number of triangles = " << nt);
-	_printLine_("      hmin = " << hmin << ", hmax=" << hmax);
-	_printLine_("      area = " << area << ", M area = " << Marea << ", M area/( |Khat| nt) = " <<  Marea/(aireKh*nt));
-	_printLine_("      infinite-regularity(?): min = " << gammamn << ", max = " << gammamx);
-	_printLine_("      anisomax = " << pow(alpha2,0.5) << ", beta max = " << 1./pow(beta/aireKh,0.5) << ", min = " << 1./pow(beta0/aireKh,0.5));
+	_printString_("   Adaptmesh info:" << "\n");
+	_printString_("      number of triangles = " << nt << "\n");
+	_printString_("      hmin = " << hmin << ", hmax=" << hmax << "\n");
+	_printString_("      area = " << area << ", M area = " << Marea << ", M area/( |Khat| nt) = " <<  Marea/(aireKh*nt) << "\n");
+	_printString_("      infinite-regularity(?): min = " << gammamn << ", max = " << gammamx << "\n");
+	_printString_("      anisomax = " << pow(alpha2,0.5) << ", beta max = " << 1./pow(beta/aireKh,0.5) << ", min = " << 1./pow(beta0/aireKh,0.5) << "\n");
 }
 /*}}}*/
@@ -4061,7 +4061,7 @@
 			}
 		}  
-	_printLine_(" --- Histogram of the unit mesh,  nb of edges = " << nbedges);
-	_printLine_("      length of edge in   | %% of edge  | Nb of edges "); 
-	_printLine_("      --------------------+-------------+-------------"); 
+	_printString_(" --- Histogram of the unit mesh,  nb of edges = " << nbedges << "\n");
+	_printString_("      length of edge in   | %% of edge  | Nb of edges " << "\n"); 
+	_printString_("      --------------------+-------------+-------------" << "\n"); 
 	for   (i=0;i<=kmax;i++){ 
 		if (i==0) _printString_( "      " << setw(10) << 0.);
@@ -4069,8 +4069,8 @@
 		if (i==kmax) _printString_("          +inf   ");
 		else      _printString_( "      " << setw(10) << exp(lmin+(i+1)/delta));
-		_printLine_("|  " << setw(10) << (long((10000. * histo[i])/ nbedges)/100.) << " |");
-		_printLine_("  " << histo[i]);
-	}
-	_printLine_("      --------------------+-------------+-------------"); 
+		_printString_("|  " << setw(10) << (long((10000. * histo[i])/ nbedges)/100.) << " |" << "\n");
+		_printString_("  " << histo[i] << "\n");
+	}
+	_printString_("      --------------------+-------------+-------------" << "\n"); 
 }
 /*}}}*/
@@ -4098,5 +4098,5 @@
 	for ( k=0;k<NbVerticesOnGeomEdge;k++ ) 
 	 tstart[ GetId(VerticesOnGeomEdge[k].meshvertex)]=&vide;
-	if(verbose>2) _printLine_("   SmoothingVertex: nb Iteration = " << nbiter << ", Omega=" << omega);
+	if(verbose>2) _printString_("   SmoothingVertex: nb Iteration = " << nbiter << ", Omega=" << omega << "\n");
 	for (k=0;k<nbiter;k++)
 	  {
@@ -4110,5 +4110,5 @@
 		  if (tstart[i] != &vide) // not a boundary vertex 
 			NbSwap += vertices[i].Optim(1);
-		if (verbose>3) _printLine_("      move max = " << pow(delta,0.5) << ", iteration = " << k << ", nb of swap = " << NbSwap);
+		if (verbose>3) _printString_("      move max = " << pow(delta,0.5) << ", iteration = " << k << ", nb of swap = " << NbSwap << "\n");
 	  }
 
@@ -4124,5 +4124,5 @@
 
 	if(raisonmax<1.1) return;
-	if(verbose > 1) _printLine_("   Mesh::SmoothMetric raisonmax = " << raisonmax);
+	if(verbose > 1) _printString_("   Mesh::SmoothMetric raisonmax = " << raisonmax << "\n");
 	CreateSingleVertexToTriangleConnectivity();
 	long i,j,kch,kk,ip;
@@ -4190,5 +4190,5 @@
 		Exchange(first_np_or_next_t0,first_np_or_next_t1);
 	}
-	if(verbose>2) _printLine_("      number of iterations = " << kch); 
+	if(verbose>2) _printString_("      number of iterations = " << kch << "\n"); 
 	delete [] first_np_or_next_t0;
 	delete [] first_np_or_next_t1;
@@ -4378,5 +4378,5 @@
 										||   (bb=Area2( t[0].r , A.r    , t[2].r )) < 0.0  
 										||   (cc=Area2( t[0].r , t[1].r , A.r    )) < 0.0)){
-							_printLine_(ke + nbvold << " not in triangle " << i << " In= " << !!t.link << " " << aa << " " << bb << " " << cc << " " << dd);
+							_printString_(ke + nbvold << " not in triangle " << i << " In= " << !!t.link << " " << aa << " " << bb << " " << cc << " " << dd << "\n");
 							_error_("Number of triangles with P2 interpolation Problem");
 						}
@@ -4386,5 +4386,5 @@
 										||   (bb=Area2( tt[0].r , A.r     , tt[2].r )) < 0 
 										||   (cc=Area2( tt[0].r , tt[1].r , A.r     )) < 0)){
-							_printLine_(ke + nbvold << " not in triangle " << ii << " In= " << !!tt.link << " " << aa << " " << bb << " " << cc << " " << dd);
+							_printString_(ke + nbvold << " not in triangle " << ii << " In= " << !!tt.link << " " << aa << " " << bb << " " << cc << " " << dd << "\n");
 							_error_("Number of triangles with P2 interpolation Problem");
 						}
@@ -4679,7 +4679,7 @@
 
 		if (verbose>2){
-			_printLine_("   number of quadrilaterals    = " << nbq);
-			_printLine_("   number of triangles         = " << nbt-nbtout- nbq*2);
-			_printLine_("   number of outside triangles = " << nbtout);
+			_printString_("   number of quadrilaterals    = " << nbq << "\n");
+			_printString_("   number of triangles         = " << nbt-nbtout- nbq*2 << "\n");
+			_printString_("   number of outside triangles = " << nbtout << "\n");
 		}
 
@@ -4748,5 +4748,5 @@
 			Triangle *tcvi = TriangleFindFromCoord(vi.i,det3);
 			if (tcvi && !tcvi->link) {
-				_printLine_("problem inserting point in SplitInternalEdgeWithBorderVertices (tcvj && !tcvj->link)");
+				_printString_("problem inserting point in SplitInternalEdgeWithBorderVertices (tcvj && !tcvj->link)" << "\n");
 			}
 
@@ -4760,11 +4760,11 @@
 		}
 		if (verbose>3) {
-			_printLine_("   number of points: " << iv);
-			_printLine_("   number of swap to  split internal edges with border vertices: " << NbSwap);
+			_printString_("   number of points: " << iv << "\n");
+			_printString_("   number of swap to  split internal edges with border vertices: " << NbSwap << "\n");
 			nbv = iv;
 		}
 	}
-	if (NbSplitEdge>nbv-nbvold) _printLine_("WARNING: not enough vertices  to split all internal edges, we lost " << NbSplitEdge - ( nbv-nbvold) << " edges...");
-	if (verbose>2) _printLine_("SplitInternalEdgeWithBorderVertices: Number of splited edge " << NbSplitEdge);
+	if (NbSplitEdge>nbv-nbvold) _printString_("WARNING: not enough vertices  to split all internal edges, we lost " << NbSplitEdge - ( nbv-nbvold) << " edges..." << "\n");
+	if (verbose>2) _printString_("SplitInternalEdgeWithBorderVertices: Number of splited edge " << NbSplitEdge << "\n");
 
 	return  NbSplitEdge;
@@ -4936,5 +4936,5 @@
 
 	//Vertices
-	if(verbose) _printLine_("Reading vertices (" << nbv << ")");
+	if(verbose) _printString_("Reading vertices (" << nbv << ")" << "\n");
 	for (i=0;i<nbv;i++){
 		vertices[i].r.x=x[i];
@@ -5248,20 +5248,20 @@
 
 		//Insert points inside existing triangles
-		if (verbose>4) _printLine_("      -- current number of vertices = " << nbv);
-		if (verbose>3) _printLine_("      Creating initial Constrained Delaunay Triangulation...");
-		if (verbose>3) _printLine_("         Inserting boundary points");
+		if (verbose>4) _printString_("      -- current number of vertices = " << nbv << "\n");
+		if (verbose>3) _printString_("      Creating initial Constrained Delaunay Triangulation..." << "\n");
+		if (verbose>3) _printString_("         Inserting boundary points" << "\n");
 		Insert();
 
 		//Force the boundary
-		if (verbose>3) _printLine_("         Forcing boundaries");
+		if (verbose>3) _printString_("         Forcing boundaries" << "\n");
 		ForceBoundary();
 
 		//Extract SubDomains
-		if (verbose>3) _printLine_("         Extracting subdomains");
+		if (verbose>3) _printString_("         Extracting subdomains" << "\n");
 		FindSubDomain();
 
-		if (verbose>3) _printLine_("      Inserting internal points");
+		if (verbose>3) _printString_("      Inserting internal points" << "\n");
 		NewPoints(*this,bamgopts,0) ;
-		if (verbose>4) _printLine_("      -- current number of vertices = " << nbv);
+		if (verbose>4) _printString_("      -- current number of vertices = " << nbv << "\n");
 	}
 	/*}}}*/
@@ -5366,9 +5366,9 @@
 					int nc=ei.GeomEdgeHook->CurveNumber;
 
-					//_printLine_("Dealing with curve number " << nc);
-					//_printLine_("edge on geometry is same as GhCurve? " << (ei.GeomEdgeHook==Gh.curves[nc].FirstEdge || ei.GeomEdgeHook==Gh.curves[nc].LastEdge)?"yes":"no");
+					//_printString_("Dealing with curve number " << nc << "\n");
+					//_printString_("edge on geometry is same as GhCurve? " << (ei.GeomEdgeHook==Gh.curves[nc].FirstEdge || ei.GeomEdgeHook==Gh.curves[nc].LastEdge)?"yes":"no" << "\n");
 					//if(ei.GeomEdgeHook==Gh.curves[nc].FirstEdge || ei.GeomEdgeHook==Gh.curves[nc].LastEdge){
-					//	_printLine_("Do we have the right extremity? curve first vertex -> " << ((GeomVertex *)*ei[je].GeomEdgeHook==&(*Gh.curves[nc].FirstEdge)[Gh.curves[nc].FirstVertexIndex])?"yes":"no");
-					//	_printLine_("Do we have the right extremity? curve last  vertex -> " << ((GeomVertex *)*ei[je].GeomEdgeHook==&(*Gh.curves[nc].LastEdge)[Gh.curves[nc].LastVertexIndex])?"yes":"no");
+					//	_printString_("Do we have the right extremity? curve first vertex -> " << ((GeomVertex *)*ei[je].GeomEdgeHook==&(*Gh.curves[nc].FirstEdge)[Gh.curves[nc].FirstVertexIndex])?"yes":"no" << "\n");
+					//	_printString_("Do we have the right extremity? curve last  vertex -> " << ((GeomVertex *)*ei[je].GeomEdgeHook==&(*Gh.curves[nc].LastEdge)[Gh.curves[nc].LastVertexIndex])?"yes":"no" << "\n");
 					//}
 					//BUG FIX from original bamg
@@ -5577,20 +5577,20 @@
 
 		//Insert points inside existing triangles
-		if (verbose>4) _printLine_("      -- current number of vertices = " << nbv);
-		if (verbose>3) _printLine_("      Creating initial Constrained Delaunay Triangulation...");
-		if (verbose>3) _printLine_("         Inserting boundary points");
+		if (verbose>4) _printString_("      -- current number of vertices = " << nbv << "\n");
+		if (verbose>3) _printString_("      Creating initial Constrained Delaunay Triangulation..." << "\n");
+		if (verbose>3) _printString_("         Inserting boundary points" << "\n");
 		Insert();
 
 		//Force the boundary
-		if (verbose>3) _printLine_("         Forcing boundaries");
+		if (verbose>3) _printString_("         Forcing boundaries" << "\n");
 		ForceBoundary();
 
 		//Extract SubDomains
-		if (verbose>3) _printLine_("         Extracting subdomains");
+		if (verbose>3) _printString_("         Extracting subdomains" << "\n");
 		FindSubDomain();
 
-		if (verbose>3) _printLine_("      Inserting internal points");
+		if (verbose>3) _printString_("      Inserting internal points" << "\n");
 		NewPoints(BTh,bamgopts,KeepVertices) ;
-		if (verbose>4) _printLine_("      -- current number of vertices = " << nbv);
+		if (verbose>4) _printString_("      -- current number of vertices = " << nbv << "\n");
 	}
 	/*}}}*/
Index: /issm/trunk-jpl/src/c/bamg/Metric.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Metric.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/Metric.cpp	(revision 15099)
@@ -71,6 +71,6 @@
 	void Metric::Echo(void){
 
-		_printLine_("Metric:");
-		_printLine_("   [a11 a21 a22]: [" << a11 << " " << a21 << " " << a22 << "]");
+		_printString_("Metric:" << "\n");
+		_printString_("   [a11 a21 a22]: [" << a11 << " " << a21 << " " << a22 << "]" << "\n");
 
 		return;
@@ -200,5 +200,5 @@
 		LastMetricInterpole.lab=l;
 		LastMetricInterpole.opt=i;
-		if (i>200 && kkk++<10) _printLine_("WARNING: LengthInterpole: ( i=" << i << " l=" << l << " sss=" << sss << " ) " << sstop); 
+		if (i>200 && kkk++<10) _printString_("WARNING: LengthInterpole: ( i=" << i << " l=" << l << " sss=" << sss << " ) " << sstop << "\n"); 
 		return l;
 	}
Index: /issm/trunk-jpl/src/c/bamg/Triangle.cpp
===================================================================
--- /issm/trunk-jpl/src/c/bamg/Triangle.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/bamg/Triangle.cpp	(revision 15099)
@@ -109,18 +109,18 @@
 		int i;
 
-		_printLine_("Triangle:");
-		_printLine_("   vertices pointer towards three vertices");
-		_printLine_("      vertices[0] vertices[1] vertices[2] = " << vertices[0] << " " << vertices[1] << " " << vertices[2]);
-		_printLine_("   adj pointer towards three adjacent triangles");
-		_printLine_("      adj[0] adj[1] adj[2] = " << adj[0] << " " << adj[1] << " " << adj[2]);
-		_printLine_("   det (integer triangle determinant) = " << det);
+		_printString_("Triangle:" << "\n");
+		_printString_("   vertices pointer towards three vertices" << "\n");
+		_printString_("      vertices[0] vertices[1] vertices[2] = " << vertices[0] << " " << vertices[1] << " " << vertices[2] << "\n");
+		_printString_("   adj pointer towards three adjacent triangles" << "\n");
+		_printString_("      adj[0] adj[1] adj[2] = " << adj[0] << " " << adj[1] << " " << adj[2] << "\n");
+		_printString_("   det (integer triangle determinant) = " << det << "\n");
 		if (link){
-			_printLine_("   link (pointer toward duplicate triangle)= " << link);
+			_printString_("   link (pointer toward duplicate triangle)= " << link << "\n");
 		}
 		else{
-			_printLine_("   color = " << color);
-		}
-
-		_printLine_("\nThree vertices:");
+			_printString_("   color = " << color << "\n");
+		}
+
+		_printString_("\nThree vertices:" << "\n");
 		for(i=0;i<3;i++){
 			if (vertices[i]){
@@ -128,5 +128,5 @@
 			}
 			else{
-				_printLine_("   vertex " << i+1 << " does not exist");
+				_printString_("   vertex " << i+1 << " does not exist" << "\n");
 			}
 		}
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcDynamic.cpp	(revision 15099)
@@ -42,11 +42,11 @@
 void SpcDynamic::Echo(void){
 
-	_printLine_("SpcDynamic:");
-	_printLine_("   sid: " << sid);
-	_printLine_("   nodeid: " << nodeid);
-	_printLine_("   dof: " << dof);
-	_printLine_("   value: " << value);
-	_printLine_("   isset: " <<(isset?"true":"false"));
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("SpcDynamic:" << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   nodeid: " << nodeid << "\n");
+	_printString_("   dof: " << dof << "\n");
+	_printString_("   value: " << value << "\n");
+	_printString_("   isset: " <<(isset?"true":"false") << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	return;
 }
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcStatic.cpp	(revision 15099)
@@ -41,10 +41,10 @@
 void SpcStatic::Echo(void){
 
-	_printLine_("SpcStatic:");
-	_printLine_("   sid: " << sid);
-	_printLine_("   nodeid: " << nodeid);
-	_printLine_("   dof: " << dof);
-	_printLine_("   value: " << value);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("SpcStatic:" << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   nodeid: " << nodeid << "\n");
+	_printString_("   dof: " << dof << "\n");
+	_printString_("   value: " << value << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	return;
 }
@@ -53,10 +53,10 @@
 void SpcStatic::DeepEcho(void){
 
-	_printLine_("SpcStatic:");
-	_printLine_("   sid: " << sid);
-	_printLine_("   nodeid: " << nodeid);
-	_printLine_("   dof: " << dof);
-	_printLine_("   value: " << value);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("SpcStatic:" << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   nodeid: " << nodeid << "\n");
+	_printString_("   dof: " << dof << "\n");
+	_printString_("   value: " << value << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	return;
 }		
Index: /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Constraints/SpcTransient.cpp	(revision 15099)
@@ -56,13 +56,13 @@
 
 	int i;
-	_printLine_("SpcTransient:");
-	_printLine_("   sid: " << sid);
-	_printLine_("   nodeid: " << nodeid);
-	_printLine_("   dof: " << dof);
-	_printLine_("   nsteps: " << nsteps);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
-	_printLine_("   steps|times|values");
+	_printString_("SpcTransient:" << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   nodeid: " << nodeid << "\n");
+	_printString_("   dof: " << dof << "\n");
+	_printString_("   nsteps: " << nsteps << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+	_printString_("   steps|times|values" << "\n");
 	for(i=0;i<nsteps;i++){
-		_printLine_(i << "-" << times[i] << ":" << values[i]);
+		_printString_(i << "-" << times[i] << ":" << values[i] << "\n");
 	}
 	return;
Index: /issm/trunk-jpl/src/c/classes/Contour.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Contour.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Contour.h	(revision 15099)
@@ -57,11 +57,11 @@
 		/*FUNCTION Echo(){{{*/
 		void Echo(void){
-			_printLine_(" Contour: " << id);
-			_printLine_("    nods: " << nods);
-			_printLine_("  closed: " << (closed?"true":"false"));
+			_printString_(" Contour: " << id << "\n");
+			_printString_("    nods: " << nods << "\n");
+			_printString_("  closed: " << (closed?"true":"false") << "\n");
 			if(nods){
-				_printLine_("   x , y:");
+				_printString_("   x , y:" << "\n");
 				for(int i=0;i<nods;i++){
-					_printLine_(i << ": " << x[i] << " | " << y[i]);
+					_printString_(i << ": " << x[i] << " | " << y[i] << "\n");
 				}
 			}
Index: /issm/trunk-jpl/src/c/classes/DependentObject.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/DependentObject.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/DependentObject.cpp	(revision 15099)
@@ -40,13 +40,13 @@
 void DependentObject::Echo(void){
 
-	_printLine_("DependentObject:");
-	_printLine_("   name: " << EnumToStringx(this->name));
+	_printString_("DependentObject:" << "\n");
+	_printString_("   name: " << EnumToStringx(this->name) << "\n");
 	if(this->type==0)
-		_printLine_("   type: scalar");
+		_printString_("   type: scalar" << "\n");
 	else if(this->type==1)
-		_printLine_("   type: vertex");
+		_printString_("   type: vertex" << "\n");
 	else
 		_error_(" unknown type: " << this->type);
-	if(this->index>=0) _printLine_("   index: " << this->index);
+	if(this->index>=0) _printString_("   index: " << this->index << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/DofIndexing.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/DofIndexing.cpp	(revision 15099)
@@ -163,7 +163,7 @@
 void DofIndexing::Echo(void){
 
-	_printLine_("DofIndexing:");
-	_printLine_("   gsize: " << gsize);
-	_printLine_("   clone: " << clone);
+	_printString_("DofIndexing:" << "\n");
+	_printString_("   gsize: " << gsize << "\n");
+	_printString_("   clone: " << clone << "\n");
 }
 /*}}}*/
@@ -173,13 +173,13 @@
 	int i;
 
-	_printLine_("DofIndexing:");
-	_printLine_("   gsize: " << gsize);
-	_printLine_("   fsize: " << fsize);
-	_printLine_("   ssize: " << ssize);
-	_printLine_("   clone: " << clone);
-
-	_printLine_("   set membership: f,s sets ");
+	_printString_("DofIndexing:" << "\n");
+	_printString_("   gsize: " << gsize << "\n");
+	_printString_("   fsize: " << fsize << "\n");
+	_printString_("   ssize: " << ssize << "\n");
+	_printString_("   clone: " << clone << "\n");
+
+	_printString_("   set membership: f,s sets " << "\n");
 	for(i=0;i<gsize;i++){
-		_printLine_("      dof " << i << ": " <<(f_set[i]?"true":"false")<< " " <<(s_set[i]?"true":"false"));
+		_printString_("      dof " << i << ": " <<(f_set[i]?"true":"false")<< " " <<(s_set[i]?"true":"false") << "\n");
 	}
 
@@ -188,5 +188,5 @@
 		if(this->s_set[i])_printString_(" " << svalues[i] << " |");
 	}
-	_printLine_("");
+	_printString_("" << "\n");
 
 	if(doftype){
@@ -195,7 +195,7 @@
 			_printString_(" " << doftype[i] << " |");
 		}
-		_printLine_("");
-	}
-	else _printLine_("   doftype: NULL");
+		_printString_("" << "\n");
+	}
+	else _printString_("   doftype: NULL" << "\n");
 
 	_printString_("   g_doflist (" << this->gsize << "): |");
@@ -203,5 +203,5 @@
 		_printString_(" " << gdoflist[i] << " |");
 	}
-	_printLine_("");
+	_printString_("" << "\n");
 
 	_printString_("   f_doflist (" << this->fsize << "): |");
@@ -209,5 +209,5 @@
 		_printString_(" " << fdoflist[i] << " |");
 	}
-	_printLine_("");
+	_printString_("" << "\n");
 
 	_printString_("   s_doflist (" << this->ssize << "): |");
@@ -215,5 +215,5 @@
 		_printString_(" " << sdoflist[i] << " |");
 	}
-	_printLine_("");
+	_printString_("" << "\n");
 }		
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.cpp	(revision 15099)
@@ -42,9 +42,9 @@
 void BoolElementResult::DeepEcho(void){
 
-	_printLine_("BoolElementResult:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: "<<(this->value?"true":"false"));
-	_printLine_("   step: " << this->step);
-	_printLine_("   time: " << this->time);
+	_printString_("BoolElementResult:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: "<<(this->value?"true":"false") << "\n");
+	_printString_("   step: " << this->step << "\n");
+	_printString_("   time: " << this->time << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp	(revision 15099)
@@ -42,9 +42,9 @@
 void DoubleElementResult::DeepEcho(void){
 
-	_printLine_("DoubleElementResult:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << this->value);
-	_printLine_("   step: " << this->step);
-	_printLine_("   time: " << this->time);
+	_printString_("DoubleElementResult:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << this->value << "\n");
+	_printString_("   step: " << this->step << "\n");
+	_printString_("   time: " << this->time << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp	(revision 15099)
@@ -44,9 +44,9 @@
 void PentaP1ElementResult::DeepEcho(void){
 
-	_printLine_("PentaP1ElementResult:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]");
-	_printLine_("   step: " << this->step);
-	_printLine_("   time: " << this->time);
+	_printString_("PentaP1ElementResult:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]" << "\n");
+	_printString_("   step: " << this->step << "\n");
+	_printString_("   time: " << this->time << "\n");
 
 }
Index: /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp	(revision 15099)
@@ -44,9 +44,9 @@
 void TriaP1ElementResult::DeepEcho(void){
 
-	_printLine_("TriaP1ElementResult:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << "]");
-	_printLine_("   step: " << this->step);
-	_printLine_("   time: " << this->time);
+	_printString_("TriaP1ElementResult:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << "]" << "\n");
+	_printString_("   step: " << this->step << "\n");
+	_printString_("   time: " << this->time << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 15099)
@@ -668,6 +668,6 @@
 void Penta::DeepEcho(void){
 
-	_printLine_("Penta:");
-	_printLine_("   id: " << id);
+	_printString_("Penta:" << "\n");
+	_printString_("   id: " << id << "\n");
 	nodes[0]->DeepEcho();
 	nodes[1]->DeepEcho();
@@ -678,13 +678,13 @@
 	material->DeepEcho();
 	matpar->DeepEcho();
-	_printLine_("   neighbor ids: " << verticalneighbors[0]->Id() << "-" << verticalneighbors[1]->Id());
-	_printLine_("   parameters");
+	_printString_("   neighbor ids: " << verticalneighbors[0]->Id() << "-" << verticalneighbors[1]->Id() << "\n");
+	_printString_("   parameters" << "\n");
 	parameters->DeepEcho();
-	_printLine_("   inputs");
+	_printString_("   inputs" << "\n");
 	inputs->DeepEcho();
-	_printLine_("   results");
+	_printString_("   results" << "\n");
 	results->DeepEcho();
-	_printLine_("neighboor sids: ");
-	_printLine_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2]);
+	_printString_("neighboor sids: " << "\n");
+	_printString_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2] << "\n");
 }
 /*}}}*/
@@ -1335,5 +1335,5 @@
 	}
 	else{
-		_printLine_("Interpolation " << EnumToStringx(interp) << " not supported");
+		_printString_("Interpolation " << EnumToStringx(interp) << " not supported" << "\n");
 	}
 }
@@ -4560,6 +4560,6 @@
 		/*Check solution*/
 		if(xIsNan<IssmDouble>(values[i])) _error_("NaN found in solution vector");
-		//if(values[i]<0)      _printLine_("temperature < 0°K found in solution vector");
-		//if(values[i]>275)    _printLine_("temperature > 275°K found in solution vector (Paterson's rheology associated is negative)");
+		//if(values[i]<0)      _printString_("temperature < 0°K found in solution vector" << "\n");
+		//if(values[i]>275)    _printString_("temperature > 275°K found in solution vector (Paterson's rheology associated is negative)" << "\n");
 	}
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 15099)
@@ -935,6 +935,6 @@
 void Tria::DeepEcho(void){
 
-	_printLine_("Tria:");
-	_printLine_("   id: " << id);
+	_printString_("Tria:" << "\n");
+	_printString_("   id: " << id << "\n");
 	if(nodes){
 		nodes[0]->DeepEcho();
@@ -942,25 +942,25 @@
 		nodes[2]->DeepEcho();
 	}
-	else _printLine_("nodes = NULL");
+	else _printString_("nodes = NULL" << "\n");
 
 	if (material) material->DeepEcho();
-	else _printLine_("material = NULL");
+	else _printString_("material = NULL" << "\n");
 
 	if (matpar) matpar->DeepEcho();
-	else _printLine_("matpar = NULL");
-
-	_printLine_("   parameters");
+	else _printString_("matpar = NULL" << "\n");
+
+	_printString_("   parameters" << "\n");
 	if (parameters) parameters->DeepEcho();
-	else _printLine_("parameters = NULL");
-
-	_printLine_("   inputs");
+	else _printString_("parameters = NULL" << "\n");
+
+	_printString_("   inputs" << "\n");
 	if (inputs) inputs->DeepEcho();
-	else _printLine_("inputs=NULL");
+	else _printString_("inputs=NULL" << "\n");
 
 	if (results) results->DeepEcho();
-	else _printLine_("results=NULL");
-
-	_printLine_("neighboor sids: ");
-	_printLine_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2]);
+	else _printString_("results=NULL" << "\n");
+
+	_printString_("neighboor sids: " << "\n");
+	_printString_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2] << "\n");
 
 	return;
@@ -1047,6 +1047,6 @@
 /*FUNCTION Tria::Echo{{{*/
 void Tria::Echo(void){
-	_printLine_("Tria:");
-	_printLine_("   id: " << id);
+	_printString_("Tria:" << "\n");
+	_printString_("   id: " << id << "\n");
 	if(nodes){
 		nodes[0]->Echo();
@@ -1054,25 +1054,25 @@
 		nodes[2]->Echo();
 	}
-	else _printLine_("nodes = NULL");
+	else _printString_("nodes = NULL" << "\n");
 
 	if (material) material->Echo();
-	else _printLine_("material = NULL");
+	else _printString_("material = NULL" << "\n");
 
 	if (matpar) matpar->Echo();
-	else _printLine_("matpar = NULL");
-
-	_printLine_("   parameters");
+	else _printString_("matpar = NULL" << "\n");
+
+	_printString_("   parameters" << "\n");
 	if (parameters) parameters->Echo();
-	else _printLine_("parameters = NULL");
-
-	_printLine_("   inputs");
+	else _printString_("parameters = NULL" << "\n");
+
+	_printString_("   inputs" << "\n");
 	if (inputs) inputs->Echo();
-	else _printLine_("inputs=NULL");
+	else _printString_("inputs=NULL" << "\n");
 
 	if (results) results->Echo();
-	else _printLine_("results=NULL");
-
-	_printLine_("neighboor sids: ");
-	_printLine_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2]);
+	else _printString_("results=NULL" << "\n");
+
+	_printString_("neighboor sids: " << "\n");
+	_printString_(" " << horizontalneighborsids[0] << " " << horizontalneighborsids[1] << " " << horizontalneighborsids[2] << "\n");
 }
 /*}}}*/
@@ -1559,5 +1559,5 @@
 	}
 	else{
-		_printLine_("Interpolation " << EnumToStringx(interp) << " not supported");
+		_printString_("Interpolation " << EnumToStringx(interp) << " not supported" << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h	(revision 15099)
@@ -33,8 +33,8 @@
 		/*Diverse: must be in front, as it is used in what follows*/
 		void GenericEcho(void){/*{{{*/
-			_printLine_("   id: " << this->id);
-			_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-			_printLine_("   step: " << this->step);
-			_printLine_("   time: " << this->time);
+			_printString_("   id: " << this->id << "\n");
+			_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+			_printString_("   step: " << this->step << "\n");
+			_printString_("   time: " << this->time << "\n");
 		}
 		/*}}}*/
@@ -143,7 +143,7 @@
 template <> inline void GenericExternalResult<bool>::DeepEcho(void){ /*{{{*/
 
-	_printLine_("GenericExternalResult<bool>:");
-	this->GenericEcho();
-	_printLine_("   value: " <<(this->value?"true":"false"));
+	_printString_("GenericExternalResult<bool>:" << "\n");
+	this->GenericEcho();
+	_printString_("   value: " <<(this->value?"true":"false") << "\n");
 
 } /*}}}*/
@@ -155,7 +155,7 @@
 template <> inline void GenericExternalResult<int>::DeepEcho(void){ /*{{{*/
 
-	_printLine_("GenericExternalResult<int>:");
-	this->GenericEcho();
-	_printLine_("   value: " << this->value);
+	_printString_("GenericExternalResult<int>:" << "\n");
+	this->GenericEcho();
+	_printString_("   value: " << this->value << "\n");
 
 } /*}}}*/
@@ -167,7 +167,7 @@
 template <> inline void GenericExternalResult<double>::DeepEcho(void){ /*{{{*/
 
-	_printLine_("GenericExternalResult<double>:");
-	this->GenericEcho();
-	_printLine_("   value: " << this->value);
+	_printString_("GenericExternalResult<double>:" << "\n");
+	this->GenericEcho();
+	_printString_("   value: " << this->value << "\n");
 
 } /*}}}*/
@@ -192,7 +192,7 @@
 template <> inline void GenericExternalResult<char*>::DeepEcho(void){ /*{{{*/
 
-	_printLine_("GenericExternalResult<char*>:");
-	this->GenericEcho();
-	_printLine_("   value: " << this->value);
+	_printString_("GenericExternalResult<char*>:" << "\n");
+	this->GenericEcho();
+	_printString_("   value: " << this->value << "\n");
 
 } /*}}}*/
@@ -252,7 +252,7 @@
 template <> inline void GenericExternalResult<IssmPDouble*>::Echo(void){ /*{{{*/
 
-	_printLine_("GenericExternalResult<IssmPDouble*>:");
-	this->GenericEcho();
-	_printLine_("   matrix size: " << this->M << "-" << this->N);
+	_printString_("GenericExternalResult<IssmPDouble*>:" << "\n");
+	this->GenericEcho();
+	_printString_("   matrix size: " << this->M << "-" << this->N << "\n");
 
 } /*}}}*/
@@ -261,8 +261,8 @@
 	int i,j;
 
-	_printLine_("GenericExternalResult<IssmPDouble*>:");
-	this->GenericEcho();
-
-	_printLine_("   matrix size: " << this->M << "-" << this->N);
+	_printString_("GenericExternalResult<IssmPDouble*>:" << "\n");
+	this->GenericEcho();
+
+	_printString_("   matrix size: " << this->M << "-" << this->N << "\n");
 	for (i=0;i<this->M;i++){  
 		_printString_("   [ ");
@@ -270,5 +270,5 @@
 			_printString_( " " << setw(11) << setprecision (5) << this->value[i*this->N+j]);
 		}  
-		_printLine_(" ]");
+		_printString_(" ]" << "\n");
 	}  
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 15099)
@@ -118,5 +118,5 @@
 	this->parameters->FindParam(&lockfilename,LockFileNameEnum);
 	if (waitonlock>0){
-		_pprintLine_("write lock file:");
+		_pprintString_("write lock file:" << "\n");
 		WriteLockFile(lockfilename);
 	}
@@ -137,14 +137,14 @@
 	/*Before we delete the profiler, report statistics for this run: */
 	profiler->Tag(Finish);  //final tagging
-	_pprintLine_("");
-	_pprintLine_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit));
-	_pprintLine_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore));
-	_pprintLine_("");
-	_pprintLine_("   Total elapsed time:"
+	_pprintString_("" << "\n");
+	_pprintString_("   "<<setw(40)<<left<<"FemModel initialization elapsed time:"<<profiler->DeltaTime(StartInit,FinishInit) << "\n");
+	_pprintString_("   "<<setw(40)<<left<<"Core solution elapsed time:"<<profiler->DeltaTime(StartCore,FinishCore) << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Total elapsed time:"
 			<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
 			<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
 			<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
 			);
-	_pprintLine_("");
+	_pprintString_("" << "\n");
 
 	/*Now delete: */
@@ -153,5 +153,5 @@
 	/*Finalize PETSC for this model: */
 	#ifdef _HAVE_PETSC_
-	_pprintLine_("closing Petsc");
+	_pprintString_("closing Petsc" << "\n");
 	PetscFinalize(); 
 	#endif
@@ -164,10 +164,10 @@
 void FemModel::Echo(void){
 
-	_printLine_("FemModel echo: ");
-	_printLine_("   number of fem models: " << nummodels);
-	_printLine_("   analysis_type_list: ");
-	for(int i=0;i<nummodels;i++)_printLine_("     " << i << ": " << EnumToStringx(analysis_type_list[i]));
-	_printLine_("   current analysis_type: ");
-	_printLine_("     " << analysis_counter << ": " << EnumToStringx(analysis_type_list[analysis_counter]));
+	_printString_("FemModel echo: " << "\n");
+	_printString_("   number of fem models: " << nummodels << "\n");
+	_printString_("   analysis_type_list: " << "\n");
+	for(int i=0;i<nummodels;i++)_printString_("     " << i << ": " << EnumToStringx(analysis_type_list[i]) << "\n");
+	_printString_("   current analysis_type: " << "\n");
+	_printString_("     " << analysis_counter << ": " << EnumToStringx(analysis_type_list[analysis_counter]) << "\n");
 
 }
@@ -208,20 +208,20 @@
 	for(i=0;i<nummodels;i++){
 
-		if(VerboseMProcessor()) _pprintLine_("   Processing finite element model of analysis " << EnumToStringx(analysis_type_list[i]) << ":");
+		if(VerboseMProcessor()) _pprintString_("   Processing finite element model of analysis " << EnumToStringx(analysis_type_list[i]) << ":" << "\n");
 		analysis_type=analysis_type_list[i];
 		this->SetCurrentConfiguration(analysis_type);
 
 		if(i==0){
-			if(VerboseMProcessor()) _pprintLine_("      creating vertex degrees of freedom");
+			if(VerboseMProcessor()) _pprintString_("      creating vertex degrees of freedom" << "\n");
 			VerticesDofx(vertices,parameters); //only call once, we only have one set of vertices
 		}
 
-		if(VerboseMProcessor()) _pprintLine_("      resolving node constraints");
+		if(VerboseMProcessor()) _pprintString_("      resolving node constraints" << "\n");
 		SpcNodesx(nodes,constraints,parameters,analysis_type); 
 
-		if(VerboseMProcessor()) _pprintLine_("      creating nodal degrees of freedom");
+		if(VerboseMProcessor()) _pprintString_("      creating nodal degrees of freedom" << "\n");
 		NodesDofx(nodes,parameters,analysis_type);
 
-		if(VerboseMProcessor()) _pprintLine_("      configuring element and loads");
+		if(VerboseMProcessor()) _pprintString_("      configuring element and loads" << "\n");
 		ConfigureObjectsx(elements, loads, nodes, vertices, materials,parameters);
 	}
@@ -247,5 +247,5 @@
 void FemModel::OutputResults(void){
 
-	_pprintLine_("write results to disk:");
+	_pprintString_("write results to disk:" << "\n");
 
 	/*Just call the OutputResultsx module: */
@@ -294,5 +294,5 @@
 	if(this->parameters->Exist(ToolkitsOptionsStringsEnum)){
 		ToolkitsOptionsFromAnalysis(this->parameters,analysis_type);
-		if(VerboseSolver()) _pprintLine_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type));
+		if(VerboseSolver()) _pprintString_("      toolkits Options set for analysis type: " << EnumToStringx(analysis_type) << "\n");
 	}
 
@@ -317,5 +317,5 @@
 	void (*solutioncore)(FemModel*)=NULL; //core solution function pointer
 
-	_pprintLine_("call computational core:");
+	_pprintString_("call computational core:" << "\n");
 
 	/*Retrieve solution_type from parameters: */
@@ -343,7 +343,7 @@
 		solution_memory=profiler->Memory(FinishCore);
 
-		_pprintLine_("Solution elapsed time  : " << solution_time << "  Seconds");
-		_pprintLine_("Solution elapsed flops : " << solution_flops << "  Flops");
-		_pprintLine_("Solution memory used   : " << solution_memory << "  Bytes");
+		_pprintString_("Solution elapsed time  : " << solution_time << "  Seconds" << "\n");
+		_pprintString_("Solution elapsed flops : " << solution_flops << "  Flops" << "\n");
+		_pprintString_("Solution memory used   : " << solution_memory << "  Bytes" << "\n");
 
 		/*Add to results: */
@@ -676,5 +676,5 @@
 
 	/*start module: */
-	if(VerboseModule()) _pprintLine_("   Updating constraints for time: " << time);
+	if(VerboseModule()) _pprintString_("   Updating constraints for time: " << time << "\n");
 
 	/*First, update dof constraints in nodes, using constraints: */
@@ -829,5 +829,5 @@
 
 	/*Display message*/
-	if(VerboseModule()) _pprintLine_("   Generating matrices");
+	if(VerboseModule()) _pprintString_("   Generating matrices" << "\n");
 
 	/*retrive parameters: */
@@ -1551,5 +1551,5 @@
 		for(i=0;i<d_numresponses-1;i++)_printString_(d_responses[i] << "|");
 		_printString_(d_responses[d_numresponses-1]);
-		_printLine_("");
+		_printString_("" << "\n");
 	}
 	/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Hook.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Hook.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Hook.cpp	(revision 15099)
@@ -66,15 +66,15 @@
 	int i;
 	if (num){
-		_printLine_("   Hook: ");
-		_printLine_("      num=" << this->num);
+		_printString_("   Hook: " << "\n");
+		_printString_("      num=" << this->num << "\n");
 		_printString_("      ids: ");
 		for (i=0;i<this->num;i++) _printString_(this->ids[i] << " ");
-		_printLine_("");
+		_printString_("" << "\n");
 		_printString_("      offsets: ");
 		for (i=0;i<this->num;i++) _printString_(this->offsets[i] << " ");
-		_printLine_("");
+		_printString_("" << "\n");
 	}
 	else{
-		_printLine_("   Hook: num=0 ");
+		_printString_("   Hook: num=0 " << "\n");
 	}
 }
@@ -85,24 +85,24 @@
 	int i;
 	if (num){
-		_printLine_("   Hook: ");
-		_printLine_("      num=" << this->num);
+		_printString_("   Hook: " << "\n");
+		_printString_("      num=" << this->num << "\n");
 		_printString_("      ids: ");
 		for (i=0;i<this->num;i++) _printString_(this->ids[i] << " ");
-		_printLine_("");
+		_printString_("" << "\n");
 		_printString_("      offsets: ");
 		for (i=0;i<this->num;i++) _printString_(this->offsets[i] << " ");
-		_printLine_("");
-		if (!objects) _printLine_("      warning: object not hooked yet");
+		_printString_("" << "\n");
+		if (!objects) _printString_("      warning: object not hooked yet" << "\n");
 		else{
 			_printString_("      objects:\n   ");
 			for (i=0;i<this->num;i++){
-				_printLine_("         object " << i);
+				_printString_("         object " << i << "\n");
 				if(objects[i]) objects[i]->DeepEcho();
-				else           _printLine_("            no object hooked yet (not configured)");
+				else           _printString_("            no object hooked yet (not configured)" << "\n");
 			}
 		}
 	}
 	else{
-		_printLine_("   Hook: num=0 ");
+		_printString_("   Hook: num=0 " << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/IndependentObject.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/IndependentObject.cpp	(revision 15099)
@@ -41,13 +41,13 @@
 void IndependentObject::Echo(void){
 
-	_printLine_("IndependentObject:");
-	_printLine_("   name: " << EnumToStringx(this->name));
+	_printString_("IndependentObject:" << "\n");
+	_printString_("   name: " << EnumToStringx(this->name) << "\n");
 	if(this->type==0)
-		_printLine_("   type: scalar");
+		_printString_("   type: scalar" << "\n");
 	else if(this->type==1)
-		_printLine_("   type: vertex");
+		_printString_("   type: vertex" << "\n");
 	else
 		_error_(" unknown type: " << this->type);
-	_printLine_("   numberofvertices: " << this->numberofvertices);
+	_printString_("   numberofvertices: " << this->numberofvertices << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 15099)
@@ -40,7 +40,7 @@
 void BoolInput::DeepEcho(void){
 
-	_printLine_("BoolInput:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " <<(value?"true":"false"));
+	_printString_("BoolInput:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " <<(value?"true":"false") << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 15099)
@@ -67,11 +67,11 @@
 void ControlInput::DeepEcho(void){
 
-	_printLine_("ControlInput:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("---values: ");     if (values)      values->Echo();
-	_printLine_("---savedvalues: ");if (savedvalues) savedvalues->Echo();
-	_printLine_("---minvalues: ");  if (minvalues)   minvalues->Echo();
-	_printLine_("---maxvalues: ");  if (maxvalues)   maxvalues->Echo();
-	_printLine_("---gradient: ");   if (gradient)    gradient->Echo();
+	_printString_("ControlInput:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("---values: " << "\n");     if (values)      values->Echo();
+	_printString_("---savedvalues: " << "\n");if (savedvalues) savedvalues->Echo();
+	_printString_("---minvalues: " << "\n");  if (minvalues)   minvalues->Echo();
+	_printString_("---maxvalues: " << "\n");  if (maxvalues)   maxvalues->Echo();
+	_printString_("---gradient: " << "\n");   if (gradient)    gradient->Echo();
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 15099)
@@ -42,7 +42,7 @@
 void DatasetInput::DeepEcho(void){
 
-	_printLine_("DatasetInput:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("---inputs: "); inputs->Echo();
+	_printString_("DatasetInput:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("---inputs: " << "\n"); inputs->Echo();
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 15099)
@@ -40,7 +40,7 @@
 void DoubleInput::DeepEcho(void){
 
-	_printLine_("DoubleInput:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << this->value);
+	_printString_("DoubleInput:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 15099)
@@ -35,7 +35,7 @@
 void IntInput::DeepEcho(void){
 
-	_printLine_("IntInput:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << (int)this->value);
+	_printString_("IntInput:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << (int)this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaP1Input.cpp	(revision 15099)
@@ -51,7 +51,7 @@
 void PentaP1Input::DeepEcho(void){
 
-	_printLine_("PentaP1Input:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]");
+	_printString_("PentaP1Input:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << " " << this->values[3] << " " << this->values[4] << " " << this->values[5] << "]" << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 15099)
@@ -61,10 +61,10 @@
 	int i;
 
-	_printLine_("TransientInput:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   numtimesteps: " << this->numtimesteps);
-	_printLine_("---inputs: "); 
+	_printString_("TransientInput:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   numtimesteps: " << this->numtimesteps << "\n");
+	_printString_("---inputs: " << "\n"); 
 	for(i=0;i<this->numtimesteps;i++){
-		_printLine_("   time: " << this->timesteps[i] << "  ");
+		_printString_("   time: " << this->timesteps[i] << "  " << "\n");
 		((Input*)this->inputs->GetObjectByOffset(i))->Echo();
 	}
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaP1Input.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaP1Input.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaP1Input.cpp	(revision 15099)
@@ -51,7 +51,7 @@
 void TriaP1Input::DeepEcho(void){
 
-	_printLine_("TriaP1Input:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << "]");
+	_printString_("TriaP1Input:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   values: [" << this->values[0] << " " << this->values[1] << " " << this->values[2] << "]" << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 15099)
@@ -84,5 +84,5 @@
 		for(int i=0;i<MaximumNumberOfEnums;i++){
 			if(this->data[i]){
-				_pprintLine_("Info: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)");
+				_pprintString_("Info: previous pointer of " << EnumToStringx(i) << " has not been freed (DeleteData has not been called)" << "\n");
 			}
 		}
@@ -125,18 +125,18 @@
 		else{
 			if(record_enum!=MaximumNumberOfEnums){
-				_pprintLine_("");
-				_pprintLine_("=========================================================================");
-				_pprintLine_(" Enums in marshalled file are not compatible with compiled code          ");
-				_pprintLine_("                                                                         ");
-				_pprintLine_("   * If you are running ISSM on a remote cluster:                        ");
-				_pprintLine_("     make sure that you are using the same version of ISSM on your local ");
-				_pprintLine_("     machine and remote cluster (you might need to run svn update)       ");
-				_pprintLine_("   * If you are running ISSM on your local machine:                      ");
-				_pprintLine_("     make sure that all the code is compiled (modules and executables)   ");
-				_pprintLine_("   * If you are a developer and just added a new Enum:                   ");
-				_pprintLine_("     you might need to run ./Synchronize.sh in src/c/EnumDefinitions     ");
-				_pprintLine_("     and recompile                                                       ");
-				_pprintLine_("=========================================================================");
-				_pprintLine_("");
+				_pprintString_("" << "\n");
+				_pprintString_("=========================================================================" << "\n");
+				_pprintString_(" Enums in marshalled file are not compatible with compiled code          " << "\n");
+				_pprintString_("                                                                         " << "\n");
+				_pprintString_("   * If you are running ISSM on a remote cluster:                        " << "\n");
+				_pprintString_("     make sure that you are using the same version of ISSM on your local " << "\n");
+				_pprintString_("     machine and remote cluster (you might need to run svn update)       " << "\n");
+				_pprintString_("   * If you are running ISSM on your local machine:                      " << "\n");
+				_pprintString_("     make sure that all the code is compiled (modules and executables)   " << "\n");
+				_pprintString_("   * If you are a developer and just added a new Enum:                   " << "\n");
+				_pprintString_("     you might need to run ./Synchronize.sh in src/c/EnumDefinitions     " << "\n");
+				_pprintString_("     and recompile                                                       " << "\n");
+				_pprintString_("=========================================================================" << "\n");
+				_pprintString_("" << "\n");
 				_error_("Enums not consistent (See error message above)");
 			}
Index: /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Loads/Friction.cpp	(revision 15099)
@@ -43,7 +43,7 @@
 /*FUNCTION Friction::Echo {{{*/
 void Friction::Echo(void){
-	_printLine_("Friction:");
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
-	_printLine_("   element_type: " << this->element_type);
+	_printString_("Friction:" << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+	_printString_("   element_type: " << this->element_type << "\n");
 	inputs->Echo();
 	matpar->Echo();
Index: /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15099)
@@ -134,14 +134,14 @@
 /*FUNCTION Icefront::Echo {{{*/
 void Icefront::Echo(void){
-	_printLine_("Icefront:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Icefront:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->Echo();
 	hvertices->Echo();
 	helement->Echo();
 	hmatpar->Echo();
-	_printLine_("   parameters: " << parameters);
+	_printString_("   parameters: " << parameters << "\n");
 	if(parameters)parameters->Echo();
-	_printLine_("   inputs: " << inputs);
+	_printString_("   inputs: " << inputs << "\n");
 	if(inputs)inputs->Echo();
 }
@@ -150,14 +150,14 @@
 void Icefront::DeepEcho(void){
 
-	_printLine_("Icefront:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Icefront:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->DeepEcho();
 	hvertices->DeepEcho();
 	helement->DeepEcho();
 	hmatpar->DeepEcho();
-	_printLine_("   parameters: " << parameters);
+	_printString_("   parameters: " << parameters << "\n");
 	if(parameters)parameters->DeepEcho();
-	_printLine_("   inputs: " << inputs);
+	_printString_("   inputs: " << inputs << "\n");
 	if(inputs)inputs->DeepEcho();
 }
Index: /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 15099)
@@ -155,12 +155,12 @@
 /*FUNCTION Numericalflux::Echo {{{*/
 void Numericalflux::Echo(void){
-	_printLine_("Numericalflux:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Numericalflux:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->Echo();
 	hvertices->Echo();
 	helement->Echo();
-	_printLine_("   parameters: " << parameters);
-	_printLine_("   inputs: " << inputs);
+	_printString_("   parameters: " << parameters << "\n");
+	_printString_("   inputs: " << inputs << "\n");
 }
 /*}}}*/
@@ -168,16 +168,16 @@
 void Numericalflux::DeepEcho(void){
 
-	_printLine_("Numericalflux:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Numericalflux:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->DeepEcho();
 	hvertices->DeepEcho();
 	helement->DeepEcho();
-	_printLine_("   parameters");
+	_printString_("   parameters" << "\n");
 	if(parameters)
 	 parameters->DeepEcho();
 	else
-	 _printLine_("      NULL");
-	_printLine_("   inputs");
+	 _printString_("      NULL" << "\n");
+	_printString_("   inputs" << "\n");
 	inputs->DeepEcho();
 
Index: /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Loads/Pengrid.cpp	(revision 15099)
@@ -103,15 +103,15 @@
 void Pengrid::DeepEcho(void){
 
-	_printLine_("Pengrid:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Pengrid:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnode->DeepEcho();
 	helement->DeepEcho();
 	hmatpar->DeepEcho();
-	_printLine_("   active " << this->active);
-	_printLine_("   zigzag_counter " << this->zigzag_counter);
-	_printLine_("   parameters");
+	_printString_("   active " << this->active << "\n");
+	_printString_("   zigzag_counter " << this->zigzag_counter << "\n");
+	_printString_("   parameters" << "\n");
 	parameters->DeepEcho();
-	_printLine_("   inputs");
+	_printString_("   inputs" << "\n");
 	inputs->DeepEcho();
 }
Index: /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp	(revision 15099)
@@ -51,7 +51,7 @@
 void Penpair::Echo(void){
 
-	_printLine_("Penpair:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Penpair:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->Echo();
 
@@ -62,7 +62,7 @@
 void Penpair::DeepEcho(void){
 
-	_printLine_("Penpair:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Penpair:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->DeepEcho();
 
Index: /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15099)
@@ -138,26 +138,26 @@
 	input=(Input*)this->inputs->GetInput(FractionIncrementEnum); input->GetInputValue(&fractionincrement);
 
-	_printLine_("Riftfront:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
-	_printLine_("   hnodes: " << hnodes);
-	_printLine_("   helements: " << helements);
-	_printLine_("   hmatpar: " << hmatpar);
-	_printLine_("   parameters: " << parameters);
-	_printLine_("   inputs: " << inputs);
-	_printLine_("   internal parameters: ");
-	_printLine_("   normal: " << normal[0] << "|" << normal[1]);
-	_printLine_("   length: " << length);
-	_printLine_("   penalty_lock: " << penalty_lock);
-	_printLine_("   active: " <<(active ? "true":"false"));
-	_printLine_("   counter: " << counter);
-	_printLine_("   prestable: " << (prestable ? "true":"false"));
-	_printLine_("   material_converged: " << (material_converged ? "true":"false"));
-	_printLine_("   fill: " << fill);
-	_printLine_("   friction: " << friction);
-	_printLine_("   fraction: " << fraction);
-	_printLine_("   fractionincrement: " << fractionincrement);
-	_printLine_("   state: " << state);
-	_printLine_("   frozen: " << (frozen ? "true":"false"));
+	_printString_("Riftfront:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
+	_printString_("   hnodes: " << hnodes << "\n");
+	_printString_("   helements: " << helements << "\n");
+	_printString_("   hmatpar: " << hmatpar << "\n");
+	_printString_("   parameters: " << parameters << "\n");
+	_printString_("   inputs: " << inputs << "\n");
+	_printString_("   internal parameters: " << "\n");
+	_printString_("   normal: " << normal[0] << "|" << normal[1] << "\n");
+	_printString_("   length: " << length << "\n");
+	_printString_("   penalty_lock: " << penalty_lock << "\n");
+	_printString_("   active: " <<(active ? "true":"false") << "\n");
+	_printString_("   counter: " << counter << "\n");
+	_printString_("   prestable: " << (prestable ? "true":"false") << "\n");
+	_printString_("   material_converged: " << (material_converged ? "true":"false") << "\n");
+	_printString_("   fill: " << fill << "\n");
+	_printString_("   friction: " << friction << "\n");
+	_printString_("   fraction: " << fraction << "\n");
+	_printString_("   fractionincrement: " << fractionincrement << "\n");
+	_printString_("   state: " << state << "\n");
+	_printString_("   frozen: " << (frozen ? "true":"false") << "\n");
 
 }
@@ -166,13 +166,13 @@
 void Riftfront::DeepEcho(void){
 
-	_printLine_("Riftfront:");
-	_printLine_("   id: " << id);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Riftfront:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	hnodes->DeepEcho();
 	helements->DeepEcho();
 	hmatpar->DeepEcho();
-	_printLine_("   parameters");
+	_printString_("   parameters" << "\n");
 	if(parameters)parameters->DeepEcho();
-	_printLine_("   inputs");
+	_printString_("   inputs" << "\n");
 	if(inputs)inputs->DeepEcho();
 }
@@ -687,5 +687,5 @@
 		this->fraction+=fractionincrement;
 		if (this->fraction>1)this->fraction=(IssmDouble)1.0;
-		//_printLine_("riftfront " << this->Id() << " fraction: " << this->fraction);
+		//_printString_("riftfront " << this->Id() << " fraction: " << this->fraction << "\n");
 	}
 
@@ -702,5 +702,5 @@
 	this->active=activate;
 
-	//if ((penetration>0) && (this->active==1))_printLine_("Riftfront " << Id() << " wants to be released");
+	//if ((penetration>0) && (this->active==1))_printString_("Riftfront " << Id() << " wants to be released" << "\n");
 
 	/*assign output pointer: */
Index: /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matdamageice.cpp	(revision 15099)
@@ -55,9 +55,9 @@
 void Matdamageice::Echo(void){
 
-	_printLine_("Matdamageice:");
-	_printLine_("   mid: " << mid);
-	_printLine_("   inputs:");
+	_printString_("Matdamageice:" << "\n");
+	_printString_("   mid: " << mid << "\n");
+	_printString_("   inputs:" << "\n");
 	inputs->Echo();
-	_printLine_("   element:");
+	_printString_("   element:" << "\n");
 	helement->Echo();
 }
@@ -66,9 +66,9 @@
 void Matdamageice::DeepEcho(void){
 
-	_printLine_("Matdamageice:");
-	_printLine_("   mid: " << mid);
-	_printLine_("   inputs:");
+	_printString_("Matdamageice:" << "\n");
+	_printString_("   mid: " << mid << "\n");
+	_printString_("   inputs:" << "\n");
 	inputs->DeepEcho();
-	_printLine_("   element:");
+	_printString_("   element:" << "\n");
 	helement->Echo();
 }		
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 15099)
@@ -69,9 +69,9 @@
 void Matice::Echo(void){
 
-	_printLine_("Matice:");
-	_printLine_("   mid: " << mid);
-	_printLine_("   inputs:");
+	_printString_("Matice:" << "\n");
+	_printString_("   mid: " << mid << "\n");
+	_printString_("   inputs:" << "\n");
 	inputs->Echo();
-	_printLine_("   element:");
+	_printString_("   element:" << "\n");
 	helement->Echo();
 }
@@ -80,9 +80,9 @@
 void Matice::DeepEcho(void){
 
-	_printLine_("Matice:");
-	_printLine_("   mid: " << mid);
-	_printLine_("   inputs:");
+	_printString_("Matice:" << "\n");
+	_printString_("   mid: " << mid << "\n");
+	_printString_("   inputs:" << "\n");
 	inputs->DeepEcho();
-	_printLine_("   element:");
+	_printString_("   element:" << "\n");
 	helement->Echo();
 }		
Index: /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matpar.cpp	(revision 15099)
@@ -95,21 +95,21 @@
 void Matpar::Echo(void){
 
-	_printLine_("Matpar:");
-	_printLine_("   mid: " << mid);
-	_printLine_("   rho_ice: " << rho_ice);
-	_printLine_("   rho_water: " << rho_water);
-	_printLine_("   rho_freshwater: " << rho_freshwater);
-	_printLine_("   mu_water: " << mu_water);
-	_printLine_("   heatcapacity: " << heatcapacity);
-	_printLine_("   thermalconductivity: " << thermalconductivity);
-	_printLine_("   latentheat: " << latentheat);
-	_printLine_("   beta: " << beta);
-	_printLine_("   meltingpoint: " << meltingpoint);
-	_printLine_("   referencetemperature: " << referencetemperature);
-	_printLine_("   mixed_layer_capacity: " << mixed_layer_capacity);
-	_printLine_("   thermal_exchange_velocity: " << thermal_exchange_velocity);
-	_printLine_("   g: " << g);
-	_printLine_("   desfac: " << desfac);
-	_printLine_("   s0p: " << s0p);
+	_printString_("Matpar:" << "\n");
+	_printString_("   mid: " << mid << "\n");
+	_printString_("   rho_ice: " << rho_ice << "\n");
+	_printString_("   rho_water: " << rho_water << "\n");
+	_printString_("   rho_freshwater: " << rho_freshwater << "\n");
+	_printString_("   mu_water: " << mu_water << "\n");
+	_printString_("   heatcapacity: " << heatcapacity << "\n");
+	_printString_("   thermalconductivity: " << thermalconductivity << "\n");
+	_printString_("   latentheat: " << latentheat << "\n");
+	_printString_("   beta: " << beta << "\n");
+	_printString_("   meltingpoint: " << meltingpoint << "\n");
+	_printString_("   referencetemperature: " << referencetemperature << "\n");
+	_printString_("   mixed_layer_capacity: " << mixed_layer_capacity << "\n");
+	_printString_("   thermal_exchange_velocity: " << thermal_exchange_velocity << "\n");
+	_printString_("   g: " << g << "\n");
+	_printString_("   desfac: " << desfac << "\n");
+	_printString_("   s0p: " << s0p << "\n");
 	return;
 }
Index: /issm/trunk-jpl/src/c/classes/Node.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Node.cpp	(revision 15099)
@@ -155,11 +155,11 @@
 void Node::Echo(void){
 
-	_printLine_("Node:");
-	_printLine_("   id: " << id);
-	_printLine_("   sid: " << sid);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Node:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	indexing.Echo();
-	_printLine_("   hvertex:     not displayed");
-	_printLine_("   inputs:      " << inputs);
+	_printString_("   hvertex:     not displayed" << "\n");
+	_printString_("   inputs:      " << inputs << "\n");
 
 }
@@ -168,12 +168,12 @@
 void Node::DeepEcho(void){
 
-	_printLine_("Node:");
-	_printLine_("   id: " << id);
-	_printLine_("   sid: " << sid);
-	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
+	_printString_("Node:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   analysis_type: " << EnumToStringx(analysis_type) << "\n");
 	indexing.DeepEcho();
-	_printLine_("Vertex:");
+	_printString_("Vertex:" << "\n");
 	hvertex->DeepEcho();
-	_printLine_("   inputs");
+	_printString_("   inputs" << "\n");
 
 }
Index: /issm/trunk-jpl/src/c/classes/Options/GenericOption.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Options/GenericOption.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Options/GenericOption.h	(revision 15099)
@@ -64,13 +64,13 @@
 			bool  flag=true;
 
-			if(flag) _pprintLine_(indent << "         name: \"" << name << "\"");
-			if(flag) _pprintLine_(indent << "         numel: " << numel);
-			if(flag) _pprintLine_(indent << "         ndims: " << ndims);
+			if(flag) _pprintString_(indent << "         name: \"" << name << "\"" << "\n");
+			if(flag) _pprintString_(indent << "         numel: " << numel << "\n");
+			if(flag) _pprintString_(indent << "         ndims: " << ndims << "\n");
 			if(size){
 				StringFromSize(cstr,size,ndims);
-				if(flag) _pprintLine_(indent << "          size: " << cstr);
+				if(flag) _pprintString_(indent << "          size: " << cstr << "\n");
 			}
-			else if(flag) _pprintLine_(indent << "          size: [empty]");
-			_printLine_(indent << "         value: " << value);;
+			else if(flag) _pprintString_(indent << "          size: [empty]" << "\n");
+			_printString_(indent << "         value: " << value << "\n");;
 		} /*}}}*/
 		int  Id(){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Options/Options.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Options/Options.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Options/Options.h	(revision 15099)
@@ -64,5 +64,5 @@
 			}
 			else{
-				if(GetOption(name)) _printLine_("WARNING: option "<<name<<" found but fetched format not consistent, defaulting...");
+				if(GetOption(name)) _printString_("WARNING: option "<<name<<" found but fetched format not consistent, defaulting..." << "\n");
 				*pvalue=default_value;
 			}
Index: /issm/trunk-jpl/src/c/classes/Params/BoolParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/BoolParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/BoolParam.cpp	(revision 15099)
@@ -43,7 +43,7 @@
 void BoolParam::DeepEcho(void){
 
-	_printLine_("BoolParam:");
-	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " <<(this->value?"true":"false"));
+	_printString_("BoolParam:" << "\n");
+	_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " <<(this->value?"true":"false") << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/DataSetParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DataSetParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/DataSetParam.cpp	(revision 15099)
@@ -44,6 +44,6 @@
 void DataSetParam::DeepEcho(void){
 
-	_printLine_("DataSetParam:");
-	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+	_printString_("DataSetParam:" << "\n");
+	_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
 	this->value->Echo();
 }
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleMatArrayParam.cpp	(revision 15099)
@@ -82,8 +82,8 @@
 void DoubleMatArrayParam::Echo(void){
 
-	_printLine_("DoubleMatArrayParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   array size: " << this->M);
-	_printLine_("   array pointer: " << this->array);
+	_printString_("DoubleMatArrayParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   array size: " << this->M << "\n");
+	_printString_("   array pointer: " << this->array << "\n");
 
 }
@@ -96,9 +96,9 @@
 	IssmDouble* matrix=NULL;
 
-	_printLine_("DoubleMatArrayParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   array size: " << this->M);
-	for(i=0;i<M;i++){
-		_printLine_("   array " << i << " (" << mdim_array[i] << "x" << ndim_array[i] << "):");
+	_printString_("DoubleMatArrayParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   array size: " << this->M << "\n");
+	for(i=0;i<M;i++){
+		_printString_("   array " << i << " (" << mdim_array[i] << "x" << ndim_array[i] << "):" << "\n");
 		matrix=array[i];
 		m=mdim_array[i];
@@ -108,5 +108,5 @@
 			_printString_("   ");
 			for(k=0;k<n;k++)_printString_(*(matrix+n*j+k) << " ");
-			_printLine_("");
+			_printString_("" << "\n");
 		}
 	}
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleMatParam.cpp	(revision 15099)
@@ -43,7 +43,7 @@
 void DoubleMatParam::Echo(void){
 
-	_printLine_("DoubleMatParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   matrix size: " << this->M << "x" << this->N);
+	_printString_("DoubleMatParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   matrix size: " << this->M << "x" << this->N << "\n");
 
 }
@@ -54,10 +54,10 @@
 	int i,j;
 
-	_printLine_("DoubleMatParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   matrix size: " << this->M << "x" << this->N);
+	_printString_("DoubleMatParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   matrix size: " << this->M << "x" << this->N << "\n");
 	for(i=0;i<this->M;i++){
 		for(i=0;i<this->N;i++){
-			_printLine_(i << " " << j << " " << *(this->value+N*i+j));
+			_printString_(i << " " << j << " " << *(this->value+N*i+j) << "\n");
 		}
 	}
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleParam.cpp	(revision 15099)
@@ -40,7 +40,7 @@
 void DoubleParam::DeepEcho(void){
 
-	_printLine_("DoubleParam:");
-	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << this->value);
+	_printString_("DoubleParam:" << "\n");
+	_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/DoubleVecParam.cpp	(revision 15099)
@@ -42,7 +42,7 @@
 void DoubleVecParam::Echo(void){
 
-	_printLine_("DoubleVecParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   vector size: " << this->M);
+	_printString_("DoubleVecParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   vector size: " << this->M << "\n");
 
 }
@@ -53,9 +53,9 @@
 	int i;
 
-	_printLine_("DoubleVecParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   vector size: " << this->M);
+	_printString_("DoubleVecParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   vector size: " << this->M << "\n");
 	for(i=0;i<this->M;i++){
-		_printLine_(i << " " << this->values[i]);
+		_printString_(i << " " << this->values[i] << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/Params/FileParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/FileParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/FileParam.cpp	(revision 15099)
@@ -43,7 +43,7 @@
 void FileParam::DeepEcho(void){
 
-	_printLine_("FileParam:");
-	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << this->value);
+	_printString_("FileParam:" << "\n");
+	_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/GenericParam.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/GenericParam.h	(revision 15099)
@@ -39,7 +39,7 @@
                 // that any structured P must provide the friend << operator
                 void  DeepEcho() {
-                  _printLine_("GenericParam:");
-                  _printLine_("   enum:  " << myEnumVal << " (" << EnumToStringx(myEnumVal) << ")");
-                  _printLine_("   value: " << myP);;
+                  _printString_("GenericParam:" << "\n");
+                  _printString_("   enum:  " << myEnumVal << " (" << EnumToStringx(myEnumVal) << ")" << "\n");
+                  _printString_("   value: " << myP << "\n");;
                 }
                 void  Echo() {DeepEcho();};
Index: /issm/trunk-jpl/src/c/classes/Params/IntMatParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/IntMatParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/IntMatParam.cpp	(revision 15099)
@@ -43,7 +43,7 @@
 void IntMatParam::Echo(void){
 
-	_printLine_("IntMatParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   matrix size: " << this->M << "x" << this->N);
+	_printString_("IntMatParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   matrix size: " << this->M << "x" << this->N << "\n");
 
 }
@@ -54,10 +54,10 @@
 	int i,j;
 
-	_printLine_("IntMatParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   matrix size: " << this->M << "x" << this->N);
+	_printString_("IntMatParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   matrix size: " << this->M << "x" << this->N << "\n");
 	for(i=0;i<this->M;i++){
 		for(i=0;i<this->N;i++){
-			_printLine_("(" << i << "," << j << ") " << *(this->value+N*i+j));
+			_printString_("(" << i << "," << j << ") " << *(this->value+N*i+j) << "\n");
 		}
 	}
Index: /issm/trunk-jpl/src/c/classes/Params/IntParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/IntParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/IntParam.cpp	(revision 15099)
@@ -43,7 +43,7 @@
 void IntParam::DeepEcho(void){
 
-	_printLine_("IntParam:");
-	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << this->value);
+	_printString_("IntParam:" << "\n");
+	_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/IntVecParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/IntVecParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/IntVecParam.cpp	(revision 15099)
@@ -58,7 +58,7 @@
 void IntVecParam::Echo(void){
 
-	_printLine_("IntVecParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   vector size: " << this->M);
+	_printString_("IntVecParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   vector size: " << this->M << "\n");
 
 }
@@ -69,9 +69,9 @@
 	int i;
 
-	_printLine_("IntVecParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   vector size: " << this->M);
+	_printString_("IntVecParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   vector size: " << this->M << "\n");
 	for(i=0;i<this->M;i++){
-		_printLine_(i << " " << this->values[i]);
+		_printString_(i << " " << this->values[i] << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/Params/MatrixParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/MatrixParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/MatrixParam.cpp	(revision 15099)
@@ -42,6 +42,6 @@
 void MatrixParam::Echo(void){
 
-	_printLine_("MatrixParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+	_printString_("MatrixParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
 
 }
@@ -50,6 +50,6 @@
 void MatrixParam::DeepEcho(void){
 
-	_printLine_("MatrixParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+	_printString_("MatrixParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
 	this->value->Echo();
 }
Index: /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/StringArrayParam.cpp	(revision 15099)
@@ -70,9 +70,9 @@
 	char* string=NULL;
 
-	_printLine_("StringArrayParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+	_printString_("StringArrayParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
 	for(i=0;i<this->numstrings;i++){
 		string=this->value[i];
-		_printLine_("   " << i << ": " << string);
+		_printString_("   " << i << ": " << string << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/Params/StringParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/StringParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/StringParam.cpp	(revision 15099)
@@ -44,7 +44,7 @@
 /*FUNCTION StringParam::DeepEcho{{{*/
 void StringParam::DeepEcho(void){
-	_printLine_("StringParam:");
-	_printLine_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   value: " << this->value);
+	_printString_("StringParam:" << "\n");
+	_printString_("   enum:  " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   value: " << this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Params/TransientParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/TransientParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/TransientParam.cpp	(revision 15099)
@@ -47,7 +47,7 @@
 void TransientParam::Echo(void){
 
-	_printLine_("TransientParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   size: " << this->N);
+	_printString_("TransientParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   size: " << this->N << "\n");
 
 }
@@ -56,9 +56,9 @@
 void TransientParam::DeepEcho(void){
 
-	_printLine_("TransientParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
-	_printLine_("   size: " << this->N);
+	_printString_("TransientParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
+	_printString_("   size: " << this->N << "\n");
 	for(int i=0;i<this->N;i++){
-		_printLine_(   "time: " << this->timesteps[i] << " value: " << this->values[i]);
+		_printString_(   "time: " << this->timesteps[i] << " value: " << this->values[i] << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/Params/VectorParam.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Params/VectorParam.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Params/VectorParam.cpp	(revision 15099)
@@ -44,6 +44,6 @@
 void VectorParam::Echo(void){
 
-	_printLine_("VectorParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+	_printString_("VectorParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
 
 }
@@ -52,6 +52,6 @@
 void VectorParam::DeepEcho(void){
 
-	_printLine_("VectorParam:");
-	_printLine_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")");
+	_printString_("VectorParam:" << "\n");
+	_printString_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")" << "\n");
 	value->Echo();
 }
Index: /issm/trunk-jpl/src/c/classes/Profiler.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Profiler.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Profiler.cpp	(revision 15099)
@@ -36,6 +36,6 @@
 void Profiler::Echo(void){
 
-	_printLine_("Profiler:");
-	_printLine_("   time tags: ");
+	_printString_("Profiler:" << "\n");
+	_printString_("   time tags: " << "\n");
 	this->time->Echo();
 
@@ -45,6 +45,6 @@
 void Profiler::DeepEcho(void){
 
-	_printLine_("Profiler:");
-	_printLine_("   time tags: ");
+	_printString_("Profiler:" << "\n");
+	_printString_("   time tags: " << "\n");
 	this->time->DeepEcho();
 
Index: /issm/trunk-jpl/src/c/classes/Segment.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Segment.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Segment.h	(revision 15099)
@@ -52,8 +52,8 @@
 		void Echo(void){
 
-			_printLine_("Segment:");
-			_printLine_("   eid: " << eid);
-			_printLine_("   node 1: " << this->x1 << "|" << this->y1);
-			_printLine_("   node 2: " << this->x2 << "|" << this->y2);
+			_printString_("Segment:" << "\n");
+			_printString_("   eid: " << eid << "\n");
+			_printString_("   node 1: " << this->x1 << "|" << this->y1 << "\n");
+			_printString_("   node 2: " << this->x2 << "|" << this->y2 << "\n");
 
 		}
Index: /issm/trunk-jpl/src/c/classes/Vertex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/Vertex.cpp	(revision 15099)
@@ -62,14 +62,14 @@
 void Vertex::Echo(void){
 
-	_printLine_("Vertex:");
-	_printLine_("   id: " << id);
-	_printLine_("   sid: " << sid);
-	_printLine_("   pid: " << pid);
-	_printLine_("   x: " << x);
-	_printLine_("   y: " << y);
-	_printLine_("   z: " << z);
-	_printLine_("   sigma: " << sigma);
-	_printLine_("   connectivity: " << connectivity);
-	_printLine_("   clone: " << clone);
+	_printString_("Vertex:" << "\n");
+	_printString_("   id: " << id << "\n");
+	_printString_("   sid: " << sid << "\n");
+	_printString_("   pid: " << pid << "\n");
+	_printString_("   x: " << x << "\n");
+	_printString_("   y: " << y << "\n");
+	_printString_("   z: " << z << "\n");
+	_printString_("   sigma: " << sigma << "\n");
+	_printString_("   connectivity: " << connectivity << "\n");
+	_printString_("   clone: " << clone << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussPenta.cpp	(revision 15099)
@@ -251,43 +251,43 @@
 void GaussPenta::Echo(void){
 
-	_printLine_("GaussPenta:");
-	_printLine_("   numgauss: " << numgauss);
+	_printString_("GaussPenta:" << "\n");
+	_printString_("   numgauss: " << numgauss << "\n");
 
 	if (weights){
 	 _printString_("   weights = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << weights[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("weights = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << weights[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("weights = NULL" << "\n");
 	if (coords1){
 	 _printString_("   coords1 = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << coords1[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("coords1 = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << coords1[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("coords1 = NULL" << "\n");
 	if (coords2){
 	 _printString_("   coords2 = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << coords2[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("coords2 = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << coords2[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("coords2 = NULL" << "\n");
 	if (coords3){
 	 _printString_("   coords3 = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << coords3[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("coords3 = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << coords3[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("coords3 = NULL" << "\n");
 	if (coords4){
 		_printString_("   coords4 = ["); 
-		for(int i=0;i<numgauss;i++) _printLine_(" " << coords4[i]);
-		_printLine_("]");
-	}
-	else _printLine_("coords4 = NULL");
-
-	_printLine_("   weight = " << weight);
-	_printLine_("   coord1 = " << coord1);
-	_printLine_("   coord2 = " << coord2);
-	_printLine_("   coord3 = " << coord3);
-	_printLine_("   coord4 = " << coord4);
+		for(int i=0;i<numgauss;i++) _printString_(" " << coords4[i] << "\n");
+		_printString_("]" << "\n");
+	}
+	else _printString_("coords4 = NULL" << "\n");
+
+	_printString_("   weight = " << weight << "\n");
+	_printString_("   coord1 = " << coord1 << "\n");
+	_printString_("   coord2 = " << coord2 << "\n");
+	_printString_("   coord3 = " << coord3 << "\n");
+	_printString_("   coord4 = " << coord4 << "\n");
 
 }
Index: /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/gauss/GaussTria.cpp	(revision 15099)
@@ -263,36 +263,36 @@
 void GaussTria::Echo(void){
 
-	_printLine_("GaussTria:");
-	_printLine_("   numgauss: " << numgauss);
+	_printString_("GaussTria:" << "\n");
+	_printString_("   numgauss: " << numgauss << "\n");
 
 	if (weights){
 	 _printString_("   weights = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << weights[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("weights = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << weights[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("weights = NULL" << "\n");
 	if (coords1){
 	 _printString_("   coords1 = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << coords1[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("coords1 = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << coords1[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("coords1 = NULL" << "\n");
 	if (coords2){
 	 _printString_("   coords2 = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << coords2[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("coords2 = NULL");
+	 for(int i=0;i<numgauss;i++) _printString_(" " << coords2[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("coords2 = NULL" << "\n");
 	if (coords3){
 	 _printString_("   coords3 = ["); 
-	 for(int i=0;i<numgauss;i++) _printLine_(" " << coords3[i]);
-	 _printLine_("]");
-	}
-	else _printLine_("coords3 = NULL");
-
-	_printLine_("   weight = " << weight);
-	_printLine_("   coord1 = " << coord1);
-	_printLine_("   coord2 = " << coord2);
-	_printLine_("   coord3 = " << coord3);
+	 for(int i=0;i<numgauss;i++) _printString_(" " << coords3[i] << "\n");
+	 _printString_("]" << "\n");
+	}
+	else _printString_("coords3 = NULL" << "\n");
+
+	_printString_("   weight = " << weight << "\n");
+	_printString_("   coord1 = " << coord1 << "\n");
+	_printString_("   coord2 = " << coord2 << "\n");
+	_printString_("   coord3 = " << coord3 << "\n");
 
 }
Index: /issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/ExponentialVariogram.cpp	(revision 15099)
@@ -47,8 +47,8 @@
 /*FUNCTION ExponentialVariogram::Echo {{{*/
 void ExponentialVariogram::Echo(void){
-	_printLine_("ExponentialVariogram");
-	_printLine_("   nugget: " << this->nugget);
-	_printLine_("   sill  : " << this->sill);
-	_printLine_("   range : " << this->range);
+	_printString_("ExponentialVariogram" << "\n");
+	_printString_("   nugget: " << this->nugget << "\n");
+	_printString_("   sill  : " << this->sill << "\n");
+	_printString_("   range : " << this->range << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/GaussianVariogram.cpp	(revision 15099)
@@ -47,8 +47,8 @@
 /*FUNCTION GaussianVariogram::Echo {{{*/
 void GaussianVariogram::Echo(void){
-	_printLine_("GaussianVariogram");
-	_printLine_("   nugget: " << this->nugget);
-	_printLine_("   sill  : " << this->sill);
-	_printLine_("   range : " << this->range);
+	_printString_("GaussianVariogram" << "\n");
+	_printString_("   nugget: " << this->nugget << "\n");
+	_printString_("   sill  : " << this->sill << "\n");
+	_printString_("   range : " << this->range << "\n");
 }
 /*}}}*/
@@ -89,6 +89,6 @@
 	gamma = (sill-nugget)*(1.-exp(-h2/(a*range*range))) + nugget;
 
-	//if(h2>1000*1000) _printLine_("gamma = " << gamma << " h= " << sqrt(h2));
-	_printLine_("h = " << sqrt(h2) << " gamma = " << gamma);
+	//if(h2>1000*1000) _printString_("gamma = " << gamma << " h= " << sqrt(h2) << "\n");
+	_printString_("h = " << sqrt(h2) << " gamma = " << gamma << "\n");
 	return gamma;
 }
Index: /issm/trunk-jpl/src/c/classes/kriging/Observation.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Observation.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/Observation.cpp	(revision 15099)
@@ -35,12 +35,12 @@
 void Observation::Echo(void){
 
-	_printLine_("Observation");
-	_printLine_("   index : " << this->index);
-	_printLine_("   x     : " << this->x);
-	_printLine_("   y     : " << this->y);
-	_printLine_("   xi    : "); printbinary(this->xi); _printLine_("");
-	_printLine_("   yi    : "); printbinary(this->yi); _printLine_("");
-	_printLine_("   weight: " << this->weight);
-	_printLine_("   value : " << this->value);
+	_printString_("Observation" << "\n");
+	_printString_("   index : " << this->index << "\n");
+	_printString_("   x     : " << this->x << "\n");
+	_printString_("   y     : " << this->y << "\n");
+	_printString_("   xi    : " << "\n"); printbinary(this->xi); _printString_("\n");
+	_printString_("   yi    : " << "\n"); printbinary(this->yi); _printString_("\n");
+	_printString_("   weight: " << this->weight << "\n");
+	_printString_("   value : " << this->value << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/Observations.cpp	(revision 15099)
@@ -107,7 +107,7 @@
 		}
 	}
-	_pprintLine_("done");
-	_pprintLine_("Initial number of observations: " << n);
-	_pprintLine_("  Final number of observations: " << this->quadtree->NbObs);
+	_pprintString_("done" << "\n");
+	_pprintString_("Initial number of observations: " << n << "\n");
+	_pprintString_("  Final number of observations: " << this->quadtree->NbObs << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/PowerVariogram.cpp	(revision 15099)
@@ -48,8 +48,8 @@
 /*FUNCTION PowerVariogram::Echo {{{*/
 void PowerVariogram::Echo(void){
-	_printLine_("PowerVariogram");
-	_printLine_("   nugget: " << this->nugget);
-	_printLine_("   slope : " << this->slope);
-	_printLine_("   power : " << this->power);
+	_printString_("PowerVariogram" << "\n");
+	_printString_("   nugget: " << this->nugget << "\n");
+	_printString_("   slope : " << this->slope << "\n");
+	_printString_("   power : " << this->power << "\n");
 }
 /*}}}*/
@@ -85,5 +85,5 @@
 	gamma = this->nugget + this->slope*pow(h,this->power);
 
-	//if(h>1000) _printLine_("gamma = " << gamma << " h=" << h);
+	//if(h>1000) _printString_("gamma = " << gamma << " h=" << h << "\n");
 	return gamma;
 }
Index: /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/Quadtree.cpp	(revision 15099)
@@ -297,9 +297,9 @@
 void  Quadtree::Echo(void){
 
-	_printLine_("Quadtree:");
-	_printLine_("   MaxDepth      = " << this->MaxDepth);
-	_printLine_("   NbQuadtreeBox = " << this->NbQuadtreeBox);
-	_printLine_("   NbObs         = " << this->NbObs);
-	_printLine_("   root          = " << this->root);
+	_printString_("Quadtree:" << "\n");
+	_printString_("   MaxDepth      = " << this->MaxDepth << "\n");
+	_printString_("   NbQuadtreeBox = " << this->NbQuadtreeBox << "\n");
+	_printString_("   NbObs         = " << this->NbObs << "\n");
+	_printString_("   root          = " << this->root << "\n");
 
 }/*}}}*/
@@ -307,9 +307,9 @@
 void  Quadtree::DeepEcho(void){
 
-	_printLine_("Quadtree:");
-	_printLine_("   MaxDepth      = " << this->MaxDepth);
-	_printLine_("   NbQuadtreeBox = " << this->NbQuadtreeBox);
-	_printLine_("   NbObs         = " << this->NbObs);
-	_printLine_("   root          = " << this->root);
+	_printString_("Quadtree:" << "\n");
+	_printString_("   MaxDepth      = " << this->MaxDepth << "\n");
+	_printString_("   NbQuadtreeBox = " << this->NbQuadtreeBox << "\n");
+	_printString_("   NbObs         = " << this->NbObs << "\n");
+	_printString_("   root          = " << this->root << "\n");
 	boxcontainer->Echo();
 
@@ -512,9 +512,9 @@
 void  Quadtree::QuadtreeBox::Echo(void){
 
-	_printLine_("QuadtreeBox:");
-	_printLine_("   nbitems = " << this->nbitems);
-	_printLine_("   xcenter = " << this->xcenter);
-	_printLine_("   ycenter = " << this->ycenter);
-	_printLine_("   length  = " << this->length);
+	_printString_("QuadtreeBox:" << "\n");
+	_printString_("   nbitems = " << this->nbitems << "\n");
+	_printString_("   xcenter = " << this->xcenter << "\n");
+	_printString_("   ycenter = " << this->ycenter << "\n");
+	_printString_("   length  = " << this->length << "\n");
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/kriging/SphericalVariogram.cpp	(revision 15099)
@@ -47,8 +47,8 @@
 /*FUNCTION SphericalVariogram::Echo {{{*/
 void SphericalVariogram::Echo(void){
-	_printLine_("SphericalVariogram");
-	_printLine_("   nugget: " << this->nugget);
-	_printLine_("   sill  : " << this->sill);
-	_printLine_("   range : " << this->range);
+	_printString_("SphericalVariogram" << "\n");
+	_printString_("   nugget: " << this->nugget << "\n");
+	_printString_("   sill  : " << this->sill << "\n");
+	_printString_("   range : " << this->range << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementMatrix.cpp	(revision 15099)
@@ -377,43 +377,43 @@
 
 	int i,j;
-	_printLine_("Element Matrix echo:");
-	_printLine_("   nrows: " << this->nrows);
-	_printLine_("   ncols: " << this->ncols);
-	_printLine_("   dofsymmetrical: " << (dofsymmetrical?"true":"false"));
-
-	_printLine_("   values:");
+	_printString_("Element Matrix echo:" << "\n");
+	_printString_("   nrows: " << this->nrows << "\n");
+	_printString_("   ncols: " << this->ncols << "\n");
+	_printString_("   dofsymmetrical: " << (dofsymmetrical?"true":"false") << "\n");
+
+	_printString_("   values:" << "\n");
 	for(i=0;i<nrows;i++){
 		_printString_(setw(4) << right << i << ": ");
 		for(j=0;j<ncols;j++) _printString_( " " << setw(11) << setprecision (5) << right << values[i*ncols+j]);
-		_printLine_("");
+		_printString_("" << "\n");
 	}
 
 	_printString_("   gglobaldoflist (" << gglobaldoflist << "): ");
-	if(gglobaldoflist) for(i=0;i<nrows;i++) _printString_(" " << gglobaldoflist[i]); _printLine_("");
-
-	_printLine_("   row_fsize: " << row_fsize);
+	if(gglobaldoflist) for(i=0;i<nrows;i++) _printString_(" " << gglobaldoflist[i] << "\n"); _printString_("" << "\n");
+
+	_printString_("   row_fsize: " << row_fsize << "\n");
 	_printString_("   row_flocaldoflist  (" << row_flocaldoflist << "): ");
-	if(row_flocaldoflist) for(i=0;i<row_fsize;i++) _printString_(" " << row_flocaldoflist[i]); _printLine_(" ");
+	if(row_flocaldoflist) for(i=0;i<row_fsize;i++) _printString_(" " << row_flocaldoflist[i] << "\n"); _printString_(" " << "\n");
 	_printString_("   row_fglobaldoflist  (" << row_fglobaldoflist << "): ");
-	if(row_fglobaldoflist) for(i=0;i<row_fsize;i++) _printString_(" " << row_fglobaldoflist[i]); _printLine_(" ");
-
-	_printLine_("   row_ssize: " << row_ssize);
+	if(row_fglobaldoflist) for(i=0;i<row_fsize;i++) _printString_(" " << row_fglobaldoflist[i] << "\n"); _printString_(" " << "\n");
+
+	_printString_("   row_ssize: " << row_ssize << "\n");
 	_printString_("   row_slocaldoflist  (" << row_slocaldoflist << "): ");
-	if(row_slocaldoflist) for(i=0;i<row_ssize;i++) _printString_(" " << row_slocaldoflist[i]); _printLine_(" ");
+	if(row_slocaldoflist) for(i=0;i<row_ssize;i++) _printString_(" " << row_slocaldoflist[i] << "\n"); _printString_(" " << "\n");
 	_printString_("   row_sglobaldoflist  (" << row_sglobaldoflist << "): ");
-	if(row_sglobaldoflist) for(i=0;i<row_ssize;i++) _printString_(" " << row_sglobaldoflist[i]); _printLine_(" ");
+	if(row_sglobaldoflist) for(i=0;i<row_ssize;i++) _printString_(" " << row_sglobaldoflist[i] << "\n"); _printString_(" " << "\n");
 
 	if(!dofsymmetrical){
-		_printLine_("   col_fsize: " << col_fsize);
+		_printString_("   col_fsize: " << col_fsize << "\n");
 		_printString_("   col_flocaldoflist  (" << col_flocaldoflist << "): ");
-		if(col_flocaldoflist) for(i=0;i<col_fsize;i++) _printString_(" " << col_flocaldoflist[i]); _printLine_(" ");
+		if(col_flocaldoflist) for(i=0;i<col_fsize;i++) _printString_(" " << col_flocaldoflist[i] << "\n"); _printString_(" " << "\n");
 		_printString_("   col_fglobaldoflist  (" << col_fglobaldoflist << "): ");
-		if(col_fglobaldoflist) for(i=0;i<col_fsize;i++) _printString_(" " << col_fglobaldoflist[i]); _printLine_(" ");
-
-		_printLine_("   col_ssize: " << col_ssize);
+		if(col_fglobaldoflist) for(i=0;i<col_fsize;i++) _printString_(" " << col_fglobaldoflist[i] << "\n"); _printString_(" " << "\n");
+
+		_printString_("   col_ssize: " << col_ssize << "\n");
 		_printString_("   col_slocaldoflist  (" << col_slocaldoflist << "): ");
-		if(col_slocaldoflist) for(i=0;i<col_ssize;i++) _printString_(" " << col_slocaldoflist[i]); _printLine_(" ");
+		if(col_slocaldoflist) for(i=0;i<col_ssize;i++) _printString_(" " << col_slocaldoflist[i] << "\n"); _printString_(" " << "\n");
 		_printString_("   col_sglobaldoflist  (" << col_sglobaldoflist << "): ");
-		if(col_sglobaldoflist) for(i=0;i<col_ssize;i++) _printString_(" " << col_sglobaldoflist[i]); _printLine_(" ");
+		if(col_sglobaldoflist) for(i=0;i<col_ssize;i++) _printString_(" " << col_sglobaldoflist[i] << "\n"); _printString_(" " << "\n");
 	}
 }
Index: /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/classes/matrix/ElementVector.cpp	(revision 15099)
@@ -219,22 +219,22 @@
 	int i;
 
-	_printLine_("Element Vector echo:");
-	_printLine_("   nrows: " << nrows);
-	_printLine_("   values:");
+	_printString_("Element Vector echo:" << "\n");
+	_printString_("   nrows: " << nrows << "\n");
+	_printString_("   values:" << "\n");
 	for(i=0;i<nrows;i++){
-		_printLine_(setw(4) << right << i << ": " << setw(10) << values[i]);
+		_printString_(setw(4) << right << i << ": " << setw(10) << values[i] << "\n");
 	}
 
 	_printString_("   gglobaldoflist (" << gglobaldoflist << "): ");
 	if(gglobaldoflist) for(i=0;i<nrows;i++) _printString_(" " << gglobaldoflist[i] );
-	_printLine_(" ");
-
-	_printLine_("   fsize: " << fsize);
+	_printString_(" " << "\n");
+
+	_printString_("   fsize: " << fsize << "\n");
 	_printString_("   flocaldoflist  (" << flocaldoflist << "): ");
 	if(flocaldoflist) for(i=0;i<fsize;i++) _printString_(" " << flocaldoflist[i] );
-	_printLine_(" ");
+	_printString_(" " << "\n");
 	_printString_("   fglobaldoflist (" << fglobaldoflist << "): ");
 	if(fglobaldoflist) for(i=0;i<fsize;i++) _printString_(" " << fglobaldoflist[i] );
-	_printLine_(" ");
+	_printString_(" " << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/datastructures/DataSet.cpp
===================================================================
--- /issm/trunk-jpl/src/c/datastructures/DataSet.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/datastructures/DataSet.cpp	(revision 15099)
@@ -130,5 +130,5 @@
 	if(this==NULL)_error_("trying to echo a NULL dataset");
 
-	_pprintLine_("DataSet echo: " << objects.size() << " objects");
+	_pprintString_("DataSet echo: " << objects.size() << " objects" << "\n");
 
 	for ( object=objects.begin() ; object < objects.end(); object++ ){
@@ -147,5 +147,5 @@
 	if(this==NULL)_error_("trying to echo a NULL dataset");
 
-	_pprintLine_("DataSet echo: " << objects.size() << " objects");
+	_pprintString_("DataSet echo: " << objects.size() << " objects" << "\n");
 
 	for ( object=objects.begin() ; object < objects.end(); object++ ){
Index: /issm/trunk-jpl/src/c/kml/KMLFileReadUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KMLFileReadUtils.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KMLFileReadUtils.cpp	(revision 15099)
@@ -133,8 +133,8 @@
 
 //	if      (itag)
-//		_pprintLine_("tag buffer (length=" << ibuf << "):");
+//		_pprintString_("tag buffer (length=" << ibuf << "):" << "\n");
 //	else if (ifield)
-//		_pprintLine_("field buffer (length=" << ibuf << "):");
-//	_pprintLine_(buffer);
+//		_pprintString_("field buffer (length=" << ibuf << "):" << "\n");
+//	_pprintString_(buffer << "\n");
 
 	if (!ibuf)
@@ -199,6 +199,6 @@
 		}
 
-//	_pprintLine_("comment buffer (length=" << ibuf << "):");
-//	_pprintLine_(buffer);
+//	_pprintString_("comment buffer (length=" << ibuf << "):" << "\n");
+//	_pprintString_(buffer << "\n");
 
 	if (!ibuf)
@@ -265,5 +265,5 @@
 
 	ktokn=strtok(ktagi,"< >");
-//	_pprintLine_("KMLFileTagName -- initial token=\"" << ktokn << "\".");
+//	_pprintString_("KMLFileTagName -- initial token=\"" << ktokn << "\"." << "\n");
 
 	if (!pname) {
@@ -275,6 +275,6 @@
 
 	if (maxlen && (maxlen < strlen(ktokn))) {
-		_pprintLine_("KMLFileTagName -- string field too short for " << ktag << ".");
-		_pprintLine_("KMLFileTagName -- \"" << ktokn << "\" truncated to " << maxlen << " characters.");
+		_pprintString_("KMLFileTagName -- string field too short for " << ktag << "." << "\n");
+		_pprintString_("KMLFileTagName -- \"" << ktokn << "\" truncated to " << maxlen << " characters." << "\n");
 		strncpy(pname,ktokn,maxlen);
 	}
@@ -311,5 +311,5 @@
 	/*  return first non blank and move past subsequent blank  */
 	ktokn=strtok(ktagi," ");
-//	_pprintLine_("KMLFileTagAttrib -- initial token=\"" << ktokn << "\".");
+//	_pprintString_("KMLFileTagAttrib -- initial token=\"" << ktokn << "\"." << "\n");
 
 	/*  return next non " =?/>" and move past subsequent " =?/>"  */
@@ -318,5 +318,5 @@
 		/*  return next non quote and move past subsequent quote  */
 		ktokv=strtok(NULL,quote);
-//		_pprintLine_("KMLFileTagAttrib -- attribute " << ktokn << "=\"" << ktokv << "\".");
+//		_pprintString_("KMLFileTagAttrib -- attribute " << ktokn << "=\"" << ktokv << "\"." << "\n");
 
 /*  add the attribute to the dataset  */
@@ -334,5 +334,5 @@
 		(!strncmp(&ktag[0],"<"        ,1) && !strncmp(&ktag[strlen(ktag)-2],"/>",2)))
 		isolo=1;
-//	_pprintLine_("KMLFileTagAttrib -- isolo=" << isolo << ".");
+//	_pprintString_("KMLFileTagAttrib -- isolo=" << isolo << "." << "\n");
 
 	return(isolo);
@@ -368,5 +368,5 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=" << *pival << ".");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=" << *pival << "." << "\n");
 
 	return(0);
@@ -402,5 +402,5 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=" << (*pbval ? "true" : "false") << ".");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=" << (*pbval ? "true" : "false") << "." << "\n");
 
 	return(0);
@@ -439,6 +439,6 @@
 
 	if (maxlen && (maxlen < strlen(kstr))) {
-		_pprintLine_("KMLFileTokenParse -- string field too short for " << ktag << ".");
-		_pprintLine_("KMLFileTokenParse -- \"" << kstr << "\" truncated to " << maxlen << " characters.");
+		_pprintString_("KMLFileTokenParse -- string field too short for " << ktag << "." << "\n");
+		_pprintString_("KMLFileTokenParse -- \"" << kstr << "\" truncated to " << maxlen << " characters." << "\n");
 		strncpy(pstr,kstr,maxlen);
 	}
@@ -463,5 +463,5 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=\"" << pstr << "\".");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=\"" << pstr << "\"." << "\n");
 
 	return(pstr);
@@ -497,5 +497,5 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=" << *pfval << ".");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=" << *pfval << "." << "\n");
 
 	return(0);
@@ -531,5 +531,5 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=" << *pdval << ".");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=" << *pdval << "." << "\n");
 
 	return(0);
@@ -595,7 +595,7 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=...");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=..." << "\n");
 //	for (j=0; j<=i; j++)
-//		_pprintLine_("   [" << j << "]: " << (*pdval)[j] << "g");
+//		_pprintString_("   [" << j << "]: " << (*pdval)[j] << "g" << "\n");
 
 	return(0);
@@ -651,5 +651,5 @@
 
 	if ((i+1) % n)
-		_pprintLine_("KMLFileTokenParse -- Double [m x n] field for " << ktag << " does not have multiple of n values.");
+		_pprintString_("KMLFileTokenParse -- Double [m x n] field for " << ktag << " does not have multiple of n values." << "\n");
 
 /*  get additional token and compare to closing tag  */
@@ -665,7 +665,7 @@
 			xDelete<char>(kstr);
 
-//	_pprintLine_("KMLFileTokenParse -- " << ktag << "=...");
+//	_pprintString_("KMLFileTokenParse -- " << ktag << "=..." << "\n");
 //	for (j=0; j<=i; j++)
-//		_pprintLine_("   [" << j << "]: " << (*pdval)[j] << "g");
+//		_pprintString_("   [" << j << "]: " << (*pdval)[j] << "g" << "\n");
 
 	return(0);
@@ -681,5 +681,5 @@
 	opening tag, must find corresponding closing tag  */
 
-	_pprintLine_("KMLFileTagSkip -- input tag " << ktag << ".");
+	_pprintString_("KMLFileTagSkip -- input tag " << ktag << "." << "\n");
 
 /*  if next token is a closing tag, compare to input  */
@@ -690,5 +690,5 @@
 				 (kstr[1] == '/') &&
 				 (!strncmp(&(kstr[2]),&(ktag[1]),(strcspn(ktag," >")-1)/sizeof(char)))) {
-			_pprintLine_("KMLFileTagSkip -- closing tag " << kstr << ".");
+			_pprintString_("KMLFileTagSkip -- closing tag " << kstr << "." << "\n");
 			xDelete<char>(kstr);
 			return(0);
@@ -699,5 +699,5 @@
 		else if ((kstr[0] == '<') &&
 				 (kstr[1] != '/')) {
-			_pprintLine_("KMLFileTagSkip -- opening tag " << kstr << ".");
+			_pprintString_("KMLFileTagSkip -- opening tag " << kstr << "." << "\n");
 			KMLFileTagSkip(kstr,
 						   fid);
Index: /issm/trunk-jpl/src/c/kml/KML_Attribute.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Attribute.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Attribute.cpp	(revision 15099)
@@ -43,5 +43,5 @@
 	for (i=0;i<10-strlen(name);i++)
 		if(flag) _pprintString_(" ");
-	if(flag) _pprintLine_(name << ": \"" << value << "\"");
+	if(flag) _pprintString_(name << ": \"" << value << "\"" << "\n");
 
 	return;
@@ -67,5 +67,5 @@
 	for (i=0;i<10-strlen(name);i++)
 		if(flag) _pprintString_(" ");
-	if(flag) _pprintLine_(name << ": \"" << value << "\"");
+	if(flag) _pprintString_(name << ": \"" << value << "\"" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_ColorStyle.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_ColorStyle.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_ColorStyle.cpp	(revision 15099)
@@ -42,6 +42,6 @@
 	KML_SubStyle::Echo();
 
-	if(flag) _pprintLine_("         color: " << color);
-	if(flag) _pprintLine_("     colormode: " << colormode);
+	if(flag) _pprintString_("         color: " << color << "\n");
+	if(flag) _pprintString_("     colormode: " << colormode << "\n");
 
 	return;
@@ -65,6 +65,6 @@
 	KML_SubStyle::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "         color: " << color);
-	if(flag) _pprintLine_(indent << "     colormode: " << colormode);
+	if(flag) _pprintString_(indent << "         color: " << color << "\n");
+	if(flag) _pprintString_(indent << "     colormode: " << colormode << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/kml/KML_Comment.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Comment.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Comment.cpp	(revision 15099)
@@ -38,5 +38,5 @@
 
 	if(flag) _pprintString_("    ");
-	if(flag) _pprintLine_(value);
+	if(flag) _pprintString_(value << "\n");
 
 	return;
@@ -59,5 +59,5 @@
 
 	if(flag) _pprintString_(indent << "    ");
-	if(flag) _pprintLine_(value);
+	if(flag) _pprintString_(value << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Container.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Container.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Container.cpp	(revision 15099)
@@ -47,5 +47,5 @@
 	KML_Feature::Echo();
 
-	if(flag) _pprintLine_("       feature: (size=" << feature->Size() << ")");
+	if(flag) _pprintString_("       feature: (size=" << feature->Size() << ")" << "\n");
 
 	return;
@@ -78,10 +78,10 @@
 	if (feature->Size())
 		for (i=0; i<feature->Size(); i++) {
-			if(flag) _pprintLine_(indent << "       feature: -------- begin [" << i << "] --------");
+			if(flag) _pprintString_(indent << "       feature: -------- begin [" << i << "] --------" << "\n");
 			((KML_Feature *)feature->GetObjectByOffset(i))->DeepEcho(indent2);
-			if(flag) _pprintLine_(indent << "       feature: --------  end  [" << i << "] --------");
+			if(flag) _pprintString_(indent << "       feature: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "       feature: [empty]");
+		if(flag) _pprintString_(indent << "       feature: [empty]" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Document.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Document.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Document.cpp	(revision 15099)
@@ -38,5 +38,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Document:");
+	if(flag) _pprintString_("KML_Document:" << "\n");
 	KML_Container::Echo();
 
@@ -59,5 +59,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Document:");
+	if(flag) _pprintString_(indent << "KML_Document:" << "\n");
 	KML_Container::DeepEcho(indent);
 
Index: /issm/trunk-jpl/src/c/kml/KML_Feature.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Feature.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Feature.cpp	(revision 15099)
@@ -60,11 +60,11 @@
 	KML_Object::Echo();
 
-	if(flag) _pprintLine_("          name: \"" << name << "\"");
-	if(flag) _pprintLine_("    visibility: " << (visibility ? "true" : "false"));
-	if(flag) _pprintLine_("          open: " << (open ? "true" : "false"));
-	if(flag) _pprintLine_("       snippet: \"" << snippet << "\"");
-	if(flag) _pprintLine_("      descript: \"" << descript << "\"");
-	if(flag) _pprintLine_("      styleurl: \"" << styleurl << "\"");
-	if(flag) _pprintLine_("         style: (size=" << style->Size() << ")");
+	if(flag) _pprintString_("          name: \"" << name << "\"" << "\n");
+	if(flag) _pprintString_("    visibility: " << (visibility ? "true" : "false") << "\n");
+	if(flag) _pprintString_("          open: " << (open ? "true" : "false") << "\n");
+	if(flag) _pprintString_("       snippet: \"" << snippet << "\"" << "\n");
+	if(flag) _pprintString_("      descript: \"" << descript << "\"" << "\n");
+	if(flag) _pprintString_("      styleurl: \"" << styleurl << "\"" << "\n");
+	if(flag) _pprintString_("         style: (size=" << style->Size() << ")" << "\n");
 
 	return;
@@ -90,10 +90,10 @@
 	KML_Object::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "          name: \"" << name << "\"");
-	if(flag) _pprintLine_(indent << "    visibility: " << (visibility ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "          open: " << (open ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "       snippet: \"" << snippet << "\"");
-	if(flag) _pprintLine_(indent << "      descript: \"" << descript << "\"");
-	if(flag) _pprintLine_(indent << "      styleurl: \"" << styleurl << "\"");
+	if(flag) _pprintString_(indent << "          name: \"" << name << "\"" << "\n");
+	if(flag) _pprintString_(indent << "    visibility: " << (visibility ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "          open: " << (open ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "       snippet: \"" << snippet << "\"" << "\n");
+	if(flag) _pprintString_(indent << "      descript: \"" << descript << "\"" << "\n");
+	if(flag) _pprintString_(indent << "      styleurl: \"" << styleurl << "\"" << "\n");
 
 /*  loop over any styles for the feature  */
@@ -104,10 +104,10 @@
 	if (style->Size())
 		for (i=0; i<style->Size(); i++) {
-			if(flag) _pprintLine_(indent << "         style: -------- begin [" << i << "] --------");
+			if(flag) _pprintString_(indent << "         style: -------- begin [" << i << "] --------" << "\n");
 			((KML_Style *)style->GetObjectByOffset(i))->DeepEcho(indent2);
-			if(flag) _pprintLine_(indent << "         style: --------  end  [" << i << "] --------");
+			if(flag) _pprintString_(indent << "         style: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "         style: [empty]");
+		if(flag) _pprintString_(indent << "         style: [empty]" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_File.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_File.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_File.cpp	(revision 15099)
@@ -39,5 +39,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_File:");
+	if(flag) _pprintString_("KML_File:" << "\n");
 	KML_Object::Echo();
 
@@ -60,5 +60,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_File:");
+	if(flag) _pprintString_(indent << "KML_File:" << "\n");
 	KML_Object::DeepEcho(indent);
 
Index: /issm/trunk-jpl/src/c/kml/KML_Folder.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Folder.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Folder.cpp	(revision 15099)
@@ -38,5 +38,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Folder:");
+	if(flag) _pprintString_("KML_Folder:" << "\n");
 	KML_Container::Echo();
 
@@ -59,5 +59,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Folder:");
+	if(flag) _pprintString_(indent << "KML_Folder:" << "\n");
 	KML_Container::DeepEcho(indent);
 
Index: /issm/trunk-jpl/src/c/kml/KML_GroundOverlay.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_GroundOverlay.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_GroundOverlay.cpp	(revision 15099)
@@ -44,10 +44,10 @@
 void  KML_GroundOverlay::Echo(){
 
-	_printLine_("KML_GroundOverlay:");
+	_printString_("KML_GroundOverlay:" << "\n");
 	KML_Overlay::Echo();
 
-	_printLine_("         altitude: " << altitude);
-	_printLine_("          altmode: " << altmode);
-	_printLine_("            llbox: " << llbox);
+	_printString_("         altitude: " << altitude << "\n");
+	_printString_("          altmode: " << altmode << "\n");
+	_printString_("            llbox: " << llbox << "\n");
 }
 /*}}}*/
@@ -67,5 +67,5 @@
 	char  indent2[81];
 
-	_printLine_(indent << "KML_GroundOverlay:");
+	_printString_(indent << "KML_GroundOverlay:" << "\n");
 	KML_Overlay::DeepEcho(indent);
 
@@ -73,10 +73,10 @@
 	strcat(indent2,"  ");
 
-	_printLine_(indent<<"      altitude: " << altitude);
-	_printLine_(indent<<"       altmode: " << altmode);
+	_printString_(indent<<"      altitude: " << altitude << "\n");
+	_printString_(indent<<"       altmode: " << altmode << "\n");
 	if (llbox)
 	 llbox->DeepEcho(indent2);
 	else
-	 _printLine_(indent<<"         llbox: " << llbox);
+	 _printString_(indent<<"         llbox: " << llbox << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/kml/KML_Icon.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Icon.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Icon.cpp	(revision 15099)
@@ -45,15 +45,15 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Icon:");
+	if(flag) _pprintString_("KML_Icon:" << "\n");
 	KML_Object::Echo();
 
-	if(flag) _pprintLine_("          href: \"" << href << "\"");
-	if(flag) _pprintLine_("       refmode: \"" << refmode << "\"");
-	if(flag) _pprintLine_("        refint: " << refint);
-	if(flag) _pprintLine_("      vrefmode: \"" << vrefmode << "\"");
-	if(flag) _pprintLine_("      vreftime: " << vreftime);
-	if(flag) _pprintLine_("      vboundsc: " << vboundsc);
-	if(flag) _pprintLine_("       vformat: \"" << vformat << "\"");
-	if(flag) _pprintLine_("        hquery: \"" << hquery << "\"");
+	if(flag) _pprintString_("          href: \"" << href << "\"" << "\n");
+	if(flag) _pprintString_("       refmode: \"" << refmode << "\"" << "\n");
+	if(flag) _pprintString_("        refint: " << refint << "\n");
+	if(flag) _pprintString_("      vrefmode: \"" << vrefmode << "\"" << "\n");
+	if(flag) _pprintString_("      vreftime: " << vreftime << "\n");
+	if(flag) _pprintString_("      vboundsc: " << vboundsc << "\n");
+	if(flag) _pprintString_("       vformat: \"" << vformat << "\"" << "\n");
+	if(flag) _pprintString_("        hquery: \"" << hquery << "\"" << "\n");
 
 	return;
@@ -75,15 +75,15 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Icon:");
+	if(flag) _pprintString_(indent << "KML_Icon:" << "\n");
 	KML_Object::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "          href: \"" << href << "\"");
-	if(flag) _pprintLine_(indent << "       refmode: \"" << refmode << "\"");
-	if(flag) _pprintLine_(indent << "        refint: " << refint);
-	if(flag) _pprintLine_(indent << "      vrefmode: \"" << vrefmode << "\"");
-	if(flag) _pprintLine_(indent << "      vreftime: " << vreftime);
-	if(flag) _pprintLine_(indent << "      vboundsc: " << vboundsc);
-	if(flag) _pprintLine_(indent << "       vformat: \"" << vformat << "\"");
-	if(flag) _pprintLine_(indent << "        hquery: \"" << hquery << "\"");
+	if(flag) _pprintString_(indent << "          href: \"" << href << "\"" << "\n");
+	if(flag) _pprintString_(indent << "       refmode: \"" << refmode << "\"" << "\n");
+	if(flag) _pprintString_(indent << "        refint: " << refint << "\n");
+	if(flag) _pprintString_(indent << "      vrefmode: \"" << vrefmode << "\"" << "\n");
+	if(flag) _pprintString_(indent << "      vreftime: " << vreftime << "\n");
+	if(flag) _pprintString_(indent << "      vboundsc: " << vboundsc << "\n");
+	if(flag) _pprintString_(indent << "       vformat: \"" << vformat << "\"" << "\n");
+	if(flag) _pprintString_(indent << "        hquery: \"" << hquery << "\"" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_LatLonBox.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_LatLonBox.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_LatLonBox.cpp	(revision 15099)
@@ -40,12 +40,12 @@
 void  KML_LatLonBox::Echo(){
 
-	_printLine_("KML_LatLonBox:");
+	_printString_("KML_LatLonBox:" << "\n");
 	KML_Object::Echo();
 
-	_printLine_("         north: " << north);
-	_printLine_("         south: " << south);
-	_printLine_("          east: " << east);
-	_printLine_("          west: " << west);
-	_printLine_("      rotation: " << rotation);
+	_printString_("         north: " << north << "\n");
+	_printString_("         south: " << south << "\n");
+	_printString_("          east: " << east << "\n");
+	_printString_("          west: " << west << "\n");
+	_printString_("      rotation: " << rotation << "\n");
 }
 /*}}}*/
@@ -63,12 +63,12 @@
 void  KML_LatLonBox::DeepEcho(const char* indent){
 
-	_printLine_(indent << "KML_LatLonBox:");
+	_printString_(indent << "KML_LatLonBox:" << "\n");
 	KML_Object::DeepEcho(indent);
 
-	_printLine_("         north: " << north);
-	_printLine_("         south: " << south);
-	_printLine_("          east: " << east);
-	_printLine_("          west: " << west);
-	_printLine_("      rotation: " << rotation);
+	_printString_("         north: " << north << "\n");
+	_printString_("         south: " << south << "\n");
+	_printString_("          east: " << east << "\n");
+	_printString_("          west: " << west << "\n");
+	_printString_("      rotation: " << rotation << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/kml/KML_LineString.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_LineString.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_LineString.cpp	(revision 15099)
@@ -46,11 +46,11 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_LineString:");
+	if(flag) _pprintString_("KML_LineString:" << "\n");
 	KML_Geometry::Echo();
 
-	if(flag) _pprintLine_("       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_("    tessellate: " << (tessellate ? "true" : "false"));
-	if(flag) _pprintLine_("       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_("        coords: (ncoord=" << ncoord << ")");
+	if(flag) _pprintString_("       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_("    tessellate: " << (tessellate ? "true" : "false") << "\n");
+	if(flag) _pprintString_("       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_("        coords: (ncoord=" << ncoord << ")" << "\n");
 
 	return;
@@ -73,13 +73,13 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_LineString:");
+	if(flag) _pprintString_(indent << "KML_LineString:" << "\n");
 	KML_Geometry::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "    tessellate: " << (tessellate ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_(indent << "        coords: (ncoord=" << ncoord << ")");
+	if(flag) _pprintString_(indent << "       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "    tessellate: " << (tessellate ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_(indent << "        coords: (ncoord=" << ncoord << ")" << "\n");
 	for (i=0; i<ncoord; i++)
-		if(flag) _pprintLine_(indent << "                (" << coords[3*i+0] << "," << coords[3*i+1] << "," << coords[3*i+2] << ")");
+		if(flag) _pprintString_(indent << "                (" << coords[3*i+0] << "," << coords[3*i+1] << "," << coords[3*i+2] << ")" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_LineStyle.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_LineStyle.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_LineStyle.cpp	(revision 15099)
@@ -38,8 +38,8 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_LineStyle:");
+	if(flag) _pprintString_("KML_LineStyle:" << "\n");
 	KML_ColorStyle::Echo();
 
-	if(flag) _pprintLine_("         width: " << width);
+	if(flag) _pprintString_("         width: " << width << "\n");
 
 	return;
@@ -61,8 +61,8 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_LineStyle:");
+	if(flag) _pprintString_(indent << "KML_LineStyle:" << "\n");
 	KML_ColorStyle::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "         width: " << width);
+	if(flag) _pprintString_(indent << "         width: " << width << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_LinearRing.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_LinearRing.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_LinearRing.cpp	(revision 15099)
@@ -46,11 +46,11 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_LinearRing:");
+	if(flag) _pprintString_("KML_LinearRing:" << "\n");
 	KML_Geometry::Echo();
 
-	if(flag) _pprintLine_("       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_("    tessellate: " << (tessellate ? "true" : "false"));
-	if(flag) _pprintLine_("       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_("        coords: (ncoord=" << ncoord << ")");
+	if(flag) _pprintString_("       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_("    tessellate: " << (tessellate ? "true" : "false") << "\n");
+	if(flag) _pprintString_("       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_("        coords: (ncoord=" << ncoord << ")" << "\n");
 
 	return;
@@ -73,13 +73,13 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_LinearRing:");
+	if(flag) _pprintString_(indent << "KML_LinearRing:" << "\n");
 	KML_Geometry::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "    tessellate: " << (tessellate ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_(indent << "        coords: (ncoord=" << ncoord << ")");
+	if(flag) _pprintString_(indent << "       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "    tessellate: " << (tessellate ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_(indent << "        coords: (ncoord=" << ncoord << ")" << "\n");
 	for (i=0; i<ncoord; i++)
-		if(flag)_printLine_(indent << "                (" <<coords[3*i+0] << "," <<coords[3*i+1] << "," <<coords[3*i+2] << ")\n");
+		if(flag)_printString_(indent << "                (" <<coords[3*i+0] << "," <<coords[3*i+1] << "," <<coords[3*i+2] << ")\n" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_MultiGeometry.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_MultiGeometry.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_MultiGeometry.cpp	(revision 15099)
@@ -46,8 +46,8 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Multigeometry:");
+	if(flag) _pprintString_("KML_Multigeometry:" << "\n");
 	KML_Geometry::Echo();
 
-	if(flag) _pprintLine_("      geometry: (size=" << geometry->Size() << ")");
+	if(flag) _pprintString_("      geometry: (size=" << geometry->Size() << ")" << "\n");
 
 	return;
@@ -71,5 +71,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Multigeometry:");
+	if(flag) _pprintString_(indent << "KML_Multigeometry:" << "\n");
 	KML_Geometry::DeepEcho(indent);
 
@@ -81,10 +81,10 @@
 	if (geometry->Size())
 		for (i=0; i<geometry->Size(); i++) {
-			if(flag) _pprintLine_(indent << "      geometry: -------- begin [" << i << "] --------");
+			if(flag) _pprintString_(indent << "      geometry: -------- begin [" << i << "] --------" << "\n");
 			((KML_Geometry *)geometry->GetObjectByOffset(i))->DeepEcho(indent2);
-			if(flag) _pprintLine_(indent << "      geometry: --------  end  [" << i << "] --------");
+			if(flag) _pprintString_(indent << "      geometry: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "      geometry: [empty]");
+		if(flag) _pprintString_(indent << "      geometry: [empty]" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Object.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Object.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Object.cpp	(revision 15099)
@@ -66,7 +66,7 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("        attrib: (size=" << attrib->Size() << ")");
-	if(flag) _pprintLine_("        commnt: (size=" << commnt->Size() << ")");
-	if(flag) _pprintLine_("        kmlobj: (size=" << kmlobj->Size() << ")");
+	if(flag) _pprintString_("        attrib: (size=" << attrib->Size() << ")" << "\n");
+	if(flag) _pprintString_("        commnt: (size=" << commnt->Size() << ")" << "\n");
+	if(flag) _pprintString_("        kmlobj: (size=" << kmlobj->Size() << ")" << "\n");
 
 	return;
@@ -97,5 +97,5 @@
 		}
 	else
-		if(flag) _pprintLine_(indent << "        attrib: [empty]");
+		if(flag) _pprintString_(indent << "        attrib: [empty]" << "\n");
 
 /*  loop over the comments for the object  */
@@ -106,5 +106,5 @@
 		}
 	else
-		if(flag) _pprintLine_(indent << "        commnt: [empty]");
+		if(flag) _pprintString_(indent << "        commnt: [empty]" << "\n");
 
 /*  loop over the unknown objects for the object  */
@@ -115,10 +115,10 @@
 	if (kmlobj->Size())
 		for (i=0; i<kmlobj->Size(); i++) {
-            if(flag) _pprintLine_(indent << "        kmlobj: -------- begin [" << i << "] --------");
+            if(flag) _pprintString_(indent << "        kmlobj: -------- begin [" << i << "] --------" << "\n");
 			((KML_Unknown *)kmlobj->GetObjectByOffset(i))->DeepEcho(indent2);
-            if(flag) _pprintLine_(indent << "        kmlobj: --------  end  [" << i << "] --------");
+            if(flag) _pprintString_(indent << "        kmlobj: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "        kmlobj: [empty]");
+		if(flag) _pprintString_(indent << "        kmlobj: [empty]" << "\n");
 
 	return;
@@ -264,5 +264,5 @@
 
 	else if (!strncmp(kstr,"<",1)) {
-		_pprintLine_("KML_Object::Read -- Unrecognized opening tag " << kstr << ".");
+		_pprintString_("KML_Object::Read -- Unrecognized opening tag " << kstr << "." << "\n");
 //		KMLFileTagSkip(kstr,
 //					   fid);
Index: /issm/trunk-jpl/src/c/kml/KML_Overlay.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Overlay.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Overlay.cpp	(revision 15099)
@@ -45,7 +45,7 @@
 
 	KML_Feature::Echo();
-	_pprintLine_("         color: \"" << color << "\"");
-	_pprintLine_("       draword: " << draword);
-	_pprintLine_("          icon: " << icon);
+	_pprintString_("         color: \"" << color << "\"" << "\n");
+	_pprintString_("       draword: " << draword << "\n");
+	_pprintString_("          icon: " << icon << "\n");
 }
 /*}}}*/
@@ -69,10 +69,10 @@
 	strcat(indent2,"  ");
 
-	_pprintLine_(indent << "         color: " << color);
-	_pprintLine_(indent << "       draword: " << draword);
+	_pprintString_(indent << "         color: " << color << "\n");
+	_pprintString_(indent << "       draword: " << draword << "\n");
 	if (icon)
 		icon->DeepEcho(indent2);
 	else
-		_pprintLine_(indent << "          icon: " << icon);
+		_pprintString_(indent << "          icon: " << icon << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/kml/KML_Placemark.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Placemark.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Placemark.cpp	(revision 15099)
@@ -47,8 +47,8 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Placemark:");
+	if(flag) _pprintString_("KML_Placemark:" << "\n");
 	KML_Feature::Echo();
 
-	if(flag) _pprintLine_("      geometry: (size=" << geometry->Size() << ")");
+	if(flag) _pprintString_("      geometry: (size=" << geometry->Size() << ")" << "\n");
 
 	return;
@@ -72,5 +72,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Placemark:");
+	if(flag) _pprintString_(indent << "KML_Placemark:" << "\n");
 	KML_Feature::DeepEcho(indent);
 
@@ -82,10 +82,10 @@
 	if (geometry->Size())
 		for (i=0; i<geometry->Size(); i++) {
-			if(flag) _pprintLine_(indent << "      geometry: -------- begin [" << i << "] --------");
+			if(flag) _pprintString_(indent << "      geometry: -------- begin [" << i << "] --------" << "\n");
 			((KML_Geometry *)geometry->GetObjectByOffset(i))->DeepEcho(indent2);
-			if(flag) _pprintLine_(indent << "      geometry: --------  end  [" << i << "] --------");
+			if(flag) _pprintString_(indent << "      geometry: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "      geometry: [empty]");
+		if(flag) _pprintString_(indent << "      geometry: [empty]" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Point.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Point.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Point.cpp	(revision 15099)
@@ -43,10 +43,10 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Point:");
+	if(flag) _pprintString_("KML_Point:" << "\n");
 	KML_Geometry::Echo();
 
-	if(flag) _pprintLine_("       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_("       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_("        coords: (" << coords[0] << "," << coords[1] << "," << coords[2] << ")");
+	if(flag) _pprintString_("       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_("       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_("        coords: (" << coords[0] << "," << coords[1] << "," << coords[2] << ")" << "\n");
 
 	return;
@@ -68,10 +68,10 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Point:");
+	if(flag) _pprintString_(indent << "KML_Point:" << "\n");
 	KML_Geometry::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_(indent << "        coords: (" << coords[0] << "," << coords[1] << "," << coords[2] << ")");
+	if(flag) _pprintString_(indent << "       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_(indent << "        coords: (" << coords[0] << "," << coords[1] << "," << coords[2] << ")" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_PolyStyle.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_PolyStyle.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_PolyStyle.cpp	(revision 15099)
@@ -41,9 +41,9 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_PolyStyle:");
+	if(flag) _pprintString_("KML_PolyStyle:" << "\n");
 	KML_ColorStyle::Echo();
 
-	if(flag) _pprintLine_("          fill: " << fill);
-	if(flag) _pprintLine_("       outline: " << outline);
+	if(flag) _pprintString_("          fill: " << fill << "\n");
+	if(flag) _pprintString_("       outline: " << outline << "\n");
 
 	return;
@@ -65,9 +65,9 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_PolyStyle:");
+	if(flag) _pprintString_(indent << "KML_PolyStyle:" << "\n");
 	KML_ColorStyle::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "          fill: " << fill);
-	if(flag) _pprintLine_(indent << "       outline: " << outline);
+	if(flag) _pprintString_(indent << "          fill: " << fill << "\n");
+	if(flag) _pprintString_(indent << "       outline: " << outline << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Polygon.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Polygon.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Polygon.cpp	(revision 15099)
@@ -52,12 +52,12 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Polygon:");
+	if(flag) _pprintString_("KML_Polygon:" << "\n");
 	KML_Geometry::Echo();
 
-	if(flag) _pprintLine_("       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_("    tessellate: " << (tessellate ? "true" : "false"));
-	if(flag) _pprintLine_("       altmode: \"" << altmode << "\"");
-	if(flag) _pprintLine_("         outer: (size=" << outer->Size() << ")");
-	if(flag) _pprintLine_("         inner: (size=" << inner->Size() << ")");
+	if(flag) _pprintString_("       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_("    tessellate: " << (tessellate ? "true" : "false") << "\n");
+	if(flag) _pprintString_("       altmode: \"" << altmode << "\"" << "\n");
+	if(flag) _pprintString_("         outer: (size=" << outer->Size() << ")" << "\n");
+	if(flag) _pprintString_("         inner: (size=" << inner->Size() << ")" << "\n");
 
 	return;
@@ -81,10 +81,10 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Polygon:");
+	if(flag) _pprintString_(indent << "KML_Polygon:" << "\n");
 	KML_Geometry::DeepEcho(indent);
 
-	if(flag) _pprintLine_(indent << "       extrude: " << (extrude ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "    tessellate: " << (tessellate ? "true" : "false"));
-	if(flag) _pprintLine_(indent << "       altmode: \"" << altmode << "\"");
+	if(flag) _pprintString_(indent << "       extrude: " << (extrude ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "    tessellate: " << (tessellate ? "true" : "false") << "\n");
+	if(flag) _pprintString_(indent << "       altmode: \"" << altmode << "\"" << "\n");
 
 	memcpy(indent2,indent,(strlen(indent)+1)*sizeof(char));
@@ -93,19 +93,19 @@
 	if (outer->Size())
 		for (i=0; i<outer->Size(); i++) {
-			if(flag) _pprintLine_(indent << "         outer: -------- begin [" << i << "] --------");
+			if(flag) _pprintString_(indent << "         outer: -------- begin [" << i << "] --------" << "\n");
 			((KML_LinearRing *)outer->GetObjectByOffset(i))->DeepEcho(indent2);
-			if(flag) _pprintLine_(indent << "         outer: --------  end  [" << i << "] --------");
+			if(flag) _pprintString_(indent << "         outer: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "         outer: [empty]");
+		if(flag) _pprintString_(indent << "         outer: [empty]" << "\n");
 
 	if (inner->Size())
 		for (i=0; i<inner->Size(); i++) {
-			if(flag) _pprintLine_(indent << "         inner: -------- begin [" << i << "] --------");
+			if(flag) _pprintString_(indent << "         inner: -------- begin [" << i << "] --------" << "\n");
 			((KML_LinearRing *)inner->GetObjectByOffset(i))->DeepEcho(indent2);
-			if(flag) _pprintLine_(indent << "         inner: --------  end  [" << i << "] --------");
+			if(flag) _pprintString_(indent << "         inner: --------  end  [" << i << "] --------" << "\n");
 		}
 	else
-		if(flag) _pprintLine_(indent << "         inner: [empty]");
+		if(flag) _pprintString_(indent << "         inner: [empty]" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Style.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Style.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Style.cpp	(revision 15099)
@@ -68,13 +68,13 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Style:");
+	if(flag) _pprintString_("KML_Style:" << "\n");
 	KML_StyleSelector::Echo();
 
-	if(flag) _pprintLine_("          icon: " << icon);
-	if(flag) _pprintLine_("         label: " << label);
-	if(flag) _pprintLine_("          line: " << line);
-	if(flag) _pprintLine_("          poly: " << poly);
-	if(flag) _pprintLine_("       balloon: " << balloon);
-	if(flag) _pprintLine_("          list: " << list);
+	if(flag) _pprintString_("          icon: " << icon << "\n");
+	if(flag) _pprintString_("         label: " << label << "\n");
+	if(flag) _pprintString_("          line: " << line << "\n");
+	if(flag) _pprintString_("          poly: " << poly << "\n");
+	if(flag) _pprintString_("       balloon: " << balloon << "\n");
+	if(flag) _pprintString_("          list: " << list << "\n");
 
 	return;
@@ -97,5 +97,5 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Style:");
+	if(flag) _pprintString_(indent << "KML_Style:" << "\n");
 	KML_StyleSelector::DeepEcho(indent);
 
@@ -106,25 +106,25 @@
 //		icon->DeepEcho(indent2);
 //	else
-		if(flag) _pprintLine_(indent << "          icon: " << icon);
+		if(flag) _pprintString_(indent << "          icon: " << icon << "\n");
 //	if (label)
 //		label->DeepEcho(indent2);
 //	else
-		if(flag) _pprintLine_(indent << "         label: " << label);
+		if(flag) _pprintString_(indent << "         label: " << label << "\n");
 	if (line)
 		line->DeepEcho(indent2);
 	else
-		if(flag) _pprintLine_(indent << "          line: " << line);
+		if(flag) _pprintString_(indent << "          line: " << line << "\n");
 	if (poly)
 		poly->DeepEcho(indent2);
 	else
-		if(flag) _pprintLine_(indent << "          poly: " << poly);
+		if(flag) _pprintString_(indent << "          poly: " << poly << "\n");
 //	if (balloon)
 //		balloon->DeepEcho(indent2);
 //	else
-		if(flag) _pprintLine_(indent << "       balloon: " << balloon);
+		if(flag) _pprintString_(indent << "       balloon: " << balloon << "\n");
 //	if (list)
 //		list->DeepEcho(indent2);
 //	else
-		if(flag) _pprintLine_(indent << "          list: " << list);
+		if(flag) _pprintString_(indent << "          list: " << list << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/kml/KML_Unknown.cpp
===================================================================
--- /issm/trunk-jpl/src/c/kml/KML_Unknown.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/kml/KML_Unknown.cpp	(revision 15099)
@@ -40,11 +40,11 @@
 	bool  flag=true;
 
-	if(flag) _pprintLine_("KML_Unknown " << name << ":");
+	if(flag) _pprintString_("KML_Unknown " << name << ":" << "\n");
 	KML_Object::Echo();
 
 	if (value     )
-		if(flag) _pprintLine_("         value: \"" << value << "\"");
+		if(flag) _pprintString_("         value: \"" << value << "\"" << "\n");
     else
-        if(flag) _pprintLine_("         value: [none]");
+        if(flag) _pprintString_("         value: [none]" << "\n");
 
 	return;
@@ -69,5 +69,5 @@
 	bool         flag=true;
 
-	if(flag) _pprintLine_(indent << "KML_Unknown " << name << ":");
+	if(flag) _pprintString_(indent << "KML_Unknown " << name << ":" << "\n");
 	KML_Object::DeepEcho(indent);
 
@@ -81,10 +81,10 @@
 		while (vtoken=strtok(NULL,nl))
 			if(flag) _pprintString_("\n" << indent << "                 " << vtoken);
-		if(flag) _pprintLine_("\"");
+		if(flag) _pprintString_("\"" << "\n");
 
 		xDelete<char>(valuei);
 	}
     else
-        if(flag) _pprintLine_(indent << "         value: [none]");
+        if(flag) _pprintString_(indent << "         value: [none]" << "\n");
 
 	return;
@@ -136,5 +136,5 @@
 	name=KMLFileTagName(NULL,
 						kstr);
-//	_pprintLine_("KML_Unknown::Read -- opening name=" << name << ".");
+//	_pprintString_("KML_Unknown::Read -- opening name=" << name << "." << "\n");
 
 /*  get object attributes and check for solo tag  */
@@ -148,8 +148,8 @@
 	while (kstri=KMLFileToken(fid,
 							  &ncom,&pcom)) {
-//		_pprintLine_("KML_Unknown::Read -- kstri=" << kstri << ".");
+//		_pprintString_("KML_Unknown::Read -- kstri=" << kstri << "." << "\n");
 		if      (!strncmp(&kstri[0],"</", 2) &&
 				 !strncmp(&kstri[2],name,strlen(name))) {
-//			_pprintLine_("KML_Unknown::Read -- closing name=" << name << ".");
+//			_pprintString_("KML_Unknown::Read -- closing name=" << name << "." << "\n");
 			xDelete<char>(kstri);
 			break;
Index: /issm/trunk-jpl/src/c/main/kriging.cpp
===================================================================
--- /issm/trunk-jpl/src/c/main/kriging.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/main/kriging.cpp	(revision 15099)
@@ -51,8 +51,8 @@
 	pfclose(input_fid,binfilename);
 
-	_pprintLine_("call computational core:");
+	_pprintString_("call computational core:" << "\n");
 	pKrigingx(&predictions,&error,x,y,data,nobs,x_interp,y_interp,ninterp,options);
 
-	_pprintLine_("write results to disk:");
+	_pprintString_("write results to disk:" << "\n");
 	Results *results = new Results();
 	if(IssmComm::GetRank()==0){
@@ -68,5 +68,5 @@
 
 	/*Close output and toolkits options file and write lock file if requested*/
-	_pprintLine_("write lock file:");
+	_pprintString_("write lock file:" << "\n");
 	WriteLockFile(lockfilename);
 
Index: /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Bamgx/Bamgx.cpp	(revision 15099)
@@ -40,6 +40,6 @@
 
 		//Step1: generate geometry Gh
-		if (verbosity>0) _printLine_("Construction of a mesh from a given geometry");
-		if (verbosity>1) _printLine_("   Processing geometry...");
+		if (verbosity>0) _printString_("Construction of a mesh from a given geometry" << "\n");
+		if (verbosity>1) _printString_("   Processing geometry..." << "\n");
 		Geometry Gh(bamggeom_in,bamgopts);
 
@@ -49,5 +49,5 @@
 
 		//build metric using geometry
-		if (verbosity>1) _printLine_("   Generating Metric...");
+		if (verbosity>1) _printString_("   Generating Metric..." << "\n");
 		for(i=0;i<Gh.nbv;i++){
 			Metric M=Gh[i];
@@ -59,5 +59,5 @@
 
 		//generate mesh
-		if (verbosity>1) _printLine_("   Generating Mesh...");
+		if (verbosity>1) _printString_("   Generating Mesh..." << "\n");
 		Mesh Th(maxnbv,Gh,bamgopts);
 
@@ -72,7 +72,7 @@
 
 		//Build output
-		if (verbosity>1) _printLine_("   Write Mesh...");
+		if (verbosity>1) _printString_("   Write Mesh..." << "\n");
 		Th.WriteMesh(bamgmesh_out,bamgopts);
-		if (verbosity>1) _printLine_("   Write Geometry...");
+		if (verbosity>1) _printString_("   Write Geometry..." << "\n");
 		Gh.WriteGeometry(bamggeom_out,bamgopts);
 
@@ -86,6 +86,6 @@
 
 		// read background mesh 
-		if (verbosity>0) _printLine_("Anisotropic mesh adaptation");
-		if (verbosity>1) _printLine_("   Processing initial mesh and geometry...");
+		if (verbosity>0) _printString_("Anisotropic mesh adaptation" << "\n");
+		if (verbosity>1) _printString_("   Processing initial mesh and geometry..." << "\n");
 		Mesh BTh(bamggeom_in,bamgmesh_in,bamgopts); 
 
@@ -99,9 +99,9 @@
 		//Generate initial metric
 		if (bamgopts->metric){
-			if (verbosity>1) _printLine_("   Processing Metric...");
+			if (verbosity>1) _printString_("   Processing Metric..." << "\n");
 			BTh.ReadMetric(bamgopts);
 		}
 		else { 
-			if (verbosity>1) _printLine_("   Generating initial Metric...");
+			if (verbosity>1) _printString_("   Generating initial Metric..." << "\n");
 			Metric Mhmax(bamgopts->hmax);
 			for (int iv=0;iv<BTh.nbv;iv++) BTh[iv].m = Mhmax;
@@ -110,5 +110,5 @@
 		//use present fields to generate metric if present
 		if (bamgopts->field){
-			if (verbosity>1) _printLine_("   Merge metric with field provided...");
+			if (verbosity>1) _printString_("   Merge metric with field provided..." << "\n");
 			BTh.AddMetric(bamgopts);
 		}
@@ -116,5 +116,5 @@
 		// change using hVertices if provided
 		if(bamgopts->hVertices && bamgopts->hVerticesSize[0]==BTh.nbv){
-			if (verbosity>1) _printLine_("   Merging Metric with hVertices...");
+			if (verbosity>1) _printString_("   Merging Metric with hVertices..." << "\n");
 			for (i=0;i<BTh.nbv;i++){
 				if (!xIsNan<IssmPDouble>(bamgopts->hVertices[i])){
@@ -126,5 +126,5 @@
 		// change using hminVertices if provided
 		if (bamgopts->hminVertices){
-			if (verbosity>1) _printLine_("   Merging Metric with hminVertices...");
+			if (verbosity>1) _printString_("   Merging Metric with hminVertices..." << "\n");
 			for (i=0;i<BTh.nbv;i++){
 				if (!xIsNan<IssmPDouble>(bamgopts->hminVertices[i])){
@@ -139,5 +139,5 @@
 		// change using hmaxVertices if provided
 		if (bamgopts->hmaxVertices){
-			if (verbosity>1) _printLine_("   Merging Metric with hmaxVertices...");
+			if (verbosity>1) _printString_("   Merging Metric with hmaxVertices..." << "\n");
 			for (i=0;i<BTh.nbv;i++){
 				if (!xIsNan<IssmPDouble>(bamgopts->hmaxVertices[i])){
@@ -163,5 +163,5 @@
 
 		//Build new mesh
-		if (verbosity>1) _printLine_("   Generating Mesh...");
+		if (verbosity>1) _printString_("   Generating Mesh..." << "\n");
 		Thr=&BTh,Thb=0;
 		Mesh & Th( *(0 ?  new Mesh(*Thr,&Thr->Gh,Thb,maxnbv) :  new Mesh(maxnbv,BTh,bamgopts,bamgopts->KeepVertices)));
@@ -184,17 +184,17 @@
 		if(verbosity>0) {
 			if (Th.nbt-Th.nbtout-Th.nbq*2){
-				_printLine_("   new number of triangles = " << (Th.nbt-Th.nbtout-Th.nbq*2));
+				_printString_("   new number of triangles = " << (Th.nbt-Th.nbtout-Th.nbq*2) << "\n");
 			}
 			if (Th.nbq ){
-				_printLine_("   new number of quads = " << Th.nbq);
+				_printString_("   new number of quads = " << Th.nbq << "\n");
 			}
 		}
 
 		//Build output
-		if (verbosity>1) _printLine_("   Write Mesh...");
+		if (verbosity>1) _printString_("   Write Mesh..." << "\n");
 		Th.WriteMesh(bamgmesh_out,bamgopts);
-		if (verbosity>1) _printLine_("   Write Geometry...");
+		if (verbosity>1) _printString_("   Write Geometry..." << "\n");
 		Th.Gh.WriteGeometry(bamggeom_out,bamgopts);
-		if (verbosity>1) _printLine_("   Write Metric...");
+		if (verbosity>1) _printString_("   Write Metric..." << "\n");
 		BTh.WriteMetric(bamgopts);
 
@@ -206,5 +206,5 @@
 
 	/*No error return*/
-	if (verbosity>1) _printLine_("   Exiting Bamg.");
+	if (verbosity>1) _printString_("   Exiting Bamg." << "\n");
 	return noerr;
 
Index: /issm/trunk-jpl/src/c/modules/Chacox/Chacox.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Chacox/Chacox.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Chacox/Chacox.cpp	(revision 15099)
@@ -63,10 +63,10 @@
 
 	if (DEBUG_TRACE > 0) {
-		_printLine_("<Entering main>");
+		_printString_("<Entering main>" << "\n");
 	}
 
 	if (PRINT_HEADERS) {
-		_printLine_("\n                    Chaco 2.0");
-		_printLine_("          Sandia National Laboratories\n");
+		_printString_("\n                    Chaco 2.0" << "\n");
+		_printString_("          Sandia National Laboratories\n" << "\n");
 	}
 
@@ -166,5 +166,5 @@
 
 	if (DEBUG_MEMORY > 0) {
-		_printLine_("");
+		_printString_("" << "\n");
 		smalloc_stats();
 	}
@@ -174,5 +174,5 @@
 
 	if (DEBUG_TRACE > 1) {
-		_printLine_("<Leaving main>");
+		_printString_("<Leaving main>" << "\n");
 	}
 
Index: /issm/trunk-jpl/src/c/modules/Chacox/input_parse.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Chacox/input_parse.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Chacox/input_parse.cpp	(revision 15099)
@@ -37,13 +37,13 @@
 
 	if (DEBUG_TRACE > 0) {
-		_printLine_("<Entering input_parse>");
+		_printString_("<Entering input_parse>" << "\n");
 	}
 
 	if (PROMPT) {
-		_printLine_("Parallel machine architecture:");
-		_printLine_("  (0) Hypercube");
-		_printLine_("  (1) One-dimensional mesh");
-		_printLine_("  (2) Two-dimensional mesh");
-		_printLine_("  (3) Three-dimensional mesh");
+		_printString_("Parallel machine architecture:" << "\n");
+		_printString_("  (0) Hypercube" << "\n");
+		_printString_("  (1) One-dimensional mesh" << "\n");
+		_printString_("  (2) Two-dimensional mesh" << "\n");
+		_printString_("  (3) Three-dimensional mesh" << "\n");
 	}
 	*architecture = (int)options[OPT_ARCH];
@@ -73,12 +73,12 @@
 	else {
 		if (PROMPT) {
-			_printLine_("Global partitioning method:");
-			_printLine_("  (1) Multilevel-KL");
-			_printLine_("  (2) Spectral");
-			_printLine_("  (3) Inertial");
-			_printLine_("  (4) Linear");
-			_printLine_("  (5) Random");
-			_printLine_("  (6) Scattered");
-			_printLine_("  (7) Read-from-file");
+			_printString_("Global partitioning method:" << "\n");
+			_printString_("  (1) Multilevel-KL" << "\n");
+			_printString_("  (2) Spectral" << "\n");
+			_printString_("  (3) Inertial" << "\n");
+			_printString_("  (4) Linear" << "\n");
+			_printString_("  (5) Random" << "\n");
+			_printString_("  (6) Scattered" << "\n");
+			_printString_("  (7) Read-from-file" << "\n");
 		}
 		*global_method = (int)options[OPT_GLOBAL];
@@ -101,7 +101,7 @@
 	else if (*global_method == 2) {
 		if (PROMPT) {
-			_printLine_("Eigensolver:");
-			_printLine_("  (1) Multilevel RQI/Symmlq");
-			_printLine_("  (2) Lanczos"); 
+			_printString_("Eigensolver:" << "\n");
+			_printString_("  (1) Multilevel RQI/Symmlq" << "\n");
+			_printString_("  (2) Lanczos" << "\n"); 
 		}
 		eigensolver = (int)options[OPT_RQI];
@@ -162,7 +162,7 @@
 	else {
 		if (PROMPT) {
-			_printLine_("Local refinement method:");
-			_printLine_("  (1) Kernighan-Lin");
-			_printLine_("  (2) None");
+			_printString_("Local refinement method:" << "\n");
+			_printString_("  (1) Kernighan-Lin" << "\n");
+			_printString_("  (2) None" << "\n");
 		}
 		*local_method = (int)options[OPT_LOCAL];
@@ -181,5 +181,5 @@
 		*ndims_tot = nparts[0];
 		if (*ndims_tot < 1) {
-			_printLine_(" Number of divisions must be at least 1");
+			_printString_(" Number of divisions must be at least 1" << "\n");
 			printf("%s -- Number of divisions %d must be at least 1.\n",
 				   __FUNCT__,nparts[0]);
@@ -220,7 +220,7 @@
 	else if (*nprocs <= 7) {
 		if (PROMPT) {
-			_printLine_("Partitioning dimension: ");
-			_printLine_("  (1) Bisection");
-			_printLine_("  (2) Quadrisection");
+			_printString_("Partitioning dimension: " << "\n");
+			_printString_("  (1) Bisection" << "\n");
+			_printString_("  (2) Quadrisection" << "\n");
 		}
 		*ndims = (int)options[OPT_NDIMS];
@@ -232,8 +232,8 @@
 	else {
 		if (PROMPT) {
-			_printLine_("Partitioning dimension: ");
-			_printLine_("  (1) Bisection");
-			_printLine_("  (2) Quadrisection");
-			_printLine_("  (3) Octasection");
+			_printString_("Partitioning dimension: " << "\n");
+			_printString_("  (1) Bisection" << "\n");
+			_printString_("  (2) Quadrisection" << "\n");
+			_printString_("  (3) Octasection" << "\n");
 		}
 		*ndims = (int)options[OPT_NDIMS];
Index: /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 15099)
@@ -23,10 +23,10 @@
 	parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
 
-	if(VerboseMProcessor()) _pprintLine_("      Configuring elements...");
+	if(VerboseMProcessor()) _pprintString_("      Configuring elements..." << "\n");
 	for (i=0;i<elements->Size();i++){
 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->Configure(elements,loads,nodes,vertices,materials,parameters);
 	}
-	if(VerboseMProcessor()) _pprintLine_("      Configuring loads...");
+	if(VerboseMProcessor()) _pprintString_("      Configuring loads..." << "\n");
 	for (i=0;i<loads->Size();i++){
 		load=(Load*)loads->GetObjectByOffset(i);
@@ -35,5 +35,5 @@
 		}
 	}
-	if(VerboseMProcessor()) _pprintLine_("      Configuring nodes...");
+	if(VerboseMProcessor()) _pprintString_("      Configuring nodes..." << "\n");
 	for (i=0;i<nodes->Size();i++){
 		node=(Node*)nodes->GetObjectByOffset(i);
@@ -43,5 +43,5 @@
 	}
 
-	if(VerboseMProcessor()) _pprintLine_("      Configuring materials...");
+	if(VerboseMProcessor()) _pprintString_("      Configuring materials..." << "\n");
 	for (i=0;i<materials->Size();i++){
 		material=(Material*)materials->GetObjectByOffset(i);
Index: /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/ConstraintsStatex/ConstraintsStatex.cpp	(revision 15099)
@@ -17,5 +17,5 @@
 
 	/*Display message*/
-	if(VerboseModule()) _pprintLine_("   Constraining penalties");
+	if(VerboseModule()) _pprintString_("   Constraining penalties" << "\n");
 
 	/*recover parameters: */
Index: /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/ConstraintsStatex/RiftConstraintsState.cpp	(revision 15099)
@@ -51,5 +51,5 @@
 	}
 	else if(num_unstable_constraints<=min_mechanical_constraints){
-		if(VerboseModule()) _pprintLine_("   freezing constraints");
+		if(VerboseModule()) _pprintString_("   freezing constraints" << "\n");
 		RiftFreezeConstraints(loads,configuration_type);
 	}
Index: /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/CreateNodalConstraintsx/CreateNodalConstraintsx.cpp	(revision 15099)
@@ -17,5 +17,5 @@
 	int slocalsize;
 
-	if(VerboseModule()) _pprintLine_("   Create nodal constraints");
+	if(VerboseModule()) _pprintString_("   Create nodal constraints" << "\n");
 
 	/*figure out how many dofs we have: */
Index: /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Exp2Kmlx/Exp2Kmlx.cpp	(revision 15099)
@@ -53,7 +53,7 @@
 	if (!ExpRead(&nprof,&pnvert,&pprofx,&pprofy,&closed,filexp))
 		_error_("Error reading exp file.");
-	_pprintLine_("Exp2Kmlx -- Reading " << nprof << " exp profiles from file \"" << filexp << "\".");
+	_pprintString_("Exp2Kmlx -- Reading " << nprof << " exp profiles from file \"" << filexp << "\"." << "\n");
 //	for (i=0; i<nprof; i++)
-//		_printLine_("i=" << i << "; nvert=" << pnvert[i] << ", closed=" << closed[i]);
+//		_printString_("i=" << i << "; nvert=" << pnvert[i] << ", closed=" << closed[i] << "\n");
 
 /*  construct kml file  */
@@ -118,5 +118,5 @@
 
 	if (holes && nprof && (pnvert[0] <= 1 || pprofx[0][pnvert[0]-1] != pprofx[0][0] || pprofy[0][pnvert[0]-1] != pprofy[0][0])) {
-		_pprintLine_("Warning -- Outer profile is not closed, so \"holes\" option will be ignored.");
+		_pprintString_("Warning -- Outer profile is not closed, so \"holes\" option will be ignored." << "\n");
 		holes=false;
 	}
@@ -150,5 +150,5 @@
 		for (i=1; i<nprof; i++) {
 			if (pnvert[i] <= 1 || pprofx[i][pnvert[i]-1] != pprofx[i][0] || pprofy[i][pnvert[i]-1] != pprofy[i][0]) {
-				_pprintLine_("Warning -- Inner profile " << i+1 << " is not closed with \"holes\" specified, so it will be ignored.");
+				_pprintString_("Warning -- Inner profile " << i+1 << " is not closed with \"holes\" specified, so it will be ignored." << "\n");
 				continue;
 			}
@@ -272,5 +272,5 @@
 /*  write kml file  */
 
-	_pprintLine_("Exp2Kmlx -- Writing kml document to file \"" << filkml << "\".");
+	_pprintString_("Exp2Kmlx -- Writing kml document to file \"" << filkml << "\"." << "\n");
 	fid=fopen(filkml,"w");
 	fprintf(fid,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
@@ -287,5 +287,5 @@
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("Exp2Kmlx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0) << " elapsed seconds.\n\n");
+	_printString_("Exp2Kmlx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0) << " elapsed seconds.\n\n" << "\n");
 
 	return(iret);
Index: /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 15099)
@@ -19,5 +19,5 @@
 	Vector<IssmDouble>* solution=NULL;
 
-	if(VerboseModule()) _pprintLine_("   Get solution from inputs");
+	if(VerboseModule()) _pprintString_("   Get solution from inputs" << "\n");
 
 	/*retrive parameters: */
Index: /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 15099)
@@ -17,5 +17,5 @@
 	Element            *element                          = NULL;
 
-	if(VerboseModule()) _pprintLine_("   Migrating grounding line");
+	if(VerboseModule()) _pprintString_("   Migrating grounding line" << "\n");
 
 	/*retrieve parameters: */
@@ -162,5 +162,5 @@
 		#ifdef _HAVE_MPI_
 		MPI_Allreduce(&local_nflipped,&nflipped,1,MPI_INT,MPI_SUM,IssmComm::GetComm());
-		if(VerboseConvergence()) _pprintLine_("   Additional number of vertices allowed to unground: " << nflipped);
+		if(VerboseConvergence()) _pprintString_("   Additional number of vertices allowed to unground: " << nflipped << "\n");
 		#else
 		nflipped=local_nflipped;
Index: /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/HoleFillerx/HoleFillerx.cpp	(revision 15099)
@@ -69,5 +69,5 @@
 			}
 		}
-		_printLine_( "" );
+		_printString_( ""  << "\n");
 		_printString_("Number of zeroes remaining: " << lines*samps-counter);
 		fflush( stdout );
@@ -268,5 +268,5 @@
 
 			#ifdef _DEBUG2_
-				//_printLine_(temp << " " << elev << " " << range << " ");
+				//_printString_(temp << " " << elev << " " << range << " " << "\n");
 			#endif
 
@@ -338,5 +338,5 @@
 	#ifdef _DEBUG2_
 		_printString_( "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" );
-		_printLine_("Number of zeroes remaining:          0\n");
+		_printString_("Number of zeroes remaining:          0\n" << "\n");
 		printf ( "\n");
 	#endif
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 15099)
@@ -10,5 +10,5 @@
 
 	int i;
-	if(VerboseModule()) _pprintLine_("   Input updates from constant");
+	if(VerboseModule()) _pprintString_("   Input updates from constant" << "\n");
 
 	/*Elements and loads drive the update: */
@@ -31,5 +31,5 @@
 
 	int i;
-	if(VerboseModule()) _pprintLine_("   Input updates from constant");
+	if(VerboseModule()) _pprintString_("   Input updates from constant" << "\n");
 
 	/*Elements and loads drive the update: */
@@ -52,5 +52,5 @@
 
 	int i;
-	if(VerboseModule()) _pprintLine_("   Input updates from constant");
+	if(VerboseModule()) _pprintString_("   Input updates from constant" << "\n");
 
 	/*Elements and loads drive the update: */
Index: /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/InterpFromGridToMeshx/InterpFromGridToMeshx.cpp	(revision 15099)
@@ -87,5 +87,5 @@
 	/*launch the thread manager with InterpFromGridToMeshxt as a core: */
 	LaunchThread(InterpFromGridToMeshxt,(void*)&gate,num);
-	_printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+	_printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 
 	/*Assign output pointers:*/
@@ -176,5 +176,5 @@
 					break;
 				default:
-					_printLine_("Interpolation " << EnumToStringx(interpenum) << " not supported yet");
+					_printString_("Interpolation " << EnumToStringx(interpenum) << " not supported yet" << "\n");
 					return NULL; /*WARNING: no error because it would blow up the multithreading!*/
 			}
Index: /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/InterpFromMesh2dx/InterpFromMesh2dxt.cpp	(revision 15099)
@@ -99,5 +99,5 @@
 	}
 	if(debug && my_thread==0)
-	 _printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+	 _printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 	return NULL;
 }
Index: /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/InterpFromMeshToGridx/InterpFromMeshToGridx.cpp	(revision 15099)
@@ -168,5 +168,5 @@
 	}
 	if (debug)
-	 _printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+	 _printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 
 	/*Assign output pointers:*/
Index: /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp	(revision 15099)
@@ -142,5 +142,5 @@
 		}
 	}
-	//if(N_interp>=100) _printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+	//if(N_interp>=100) _printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 
 	/*clean-up and return*/
Index: /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/InterpFromMeshToMesh3dx/InterpFromMeshToMesh3dx.cpp	(revision 15099)
@@ -132,5 +132,5 @@
 	}
 	if (debug)
-	 _printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+	 _printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 
 	/*Assign output pointers:*/
Index: /issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/KMLFileReadx/KMLFileReadx.cpp	(revision 15099)
@@ -40,15 +40,15 @@
 		}
 
-//		_pprintLine_(kstr);
+//		_pprintString_(kstr << "\n");
 		xDelete<char>(kstr);
 	}
 
 	if (kxml) {
-		_pprintLine_("XML declaration:");
+		_pprintString_("XML declaration:" << "\n");
 		kxml->DeepEcho("  ");
 		delete kxml;
 	}
 	if (kdtd) {
-		_pprintLine_("DTD declaration (not yet implemented):");
+		_pprintString_("DTD declaration (not yet implemented):" << "\n");
 		kdtd->DeepEcho("  ");
 		delete kdtd;
@@ -57,5 +57,5 @@
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("KMLFileReadx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0) << " elapsed seconds.\n\n");
+	_printString_("KMLFileReadx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0) << " elapsed seconds.\n\n" << "\n");
 
 	return(kfil);
Index: /issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/KMLMeshWritex/KMLMeshWritex.cpp	(revision 15099)
@@ -80,5 +80,5 @@
 
 	if (cmap) {
-		_pprintLine_("Writing " << mcmap << " Matlab colors as KML style templates.");
+		_pprintString_("Writing " << mcmap << " Matlab colors as KML style templates." << "\n");
 		ipt=0;
 		for (i=0; i<mcmap; i++) {
@@ -115,5 +115,5 @@
 
 	if (!nodecon) {
-		_pprintLine_("Creating the node connectivity table.");
+		_pprintString_("Creating the node connectivity table." << "\n");
 		nncon=mxepg+1;
 		nodecon=xNewZeroInit<int>(mncon*nncon);
@@ -146,5 +146,5 @@
 
 		else if (mdata == mncon) {
-			_pprintLine_("Averaging nodal data to element data.");
+			_pprintString_("Averaging nodal data to element data." << "\n");
 			edata=xNewZeroInit<double>(melem*ndata);
 			edfree=true;
@@ -185,9 +185,9 @@
 	clock0a=clock();
 	time0a =time(NULL);
-	_printLine_("  Constructed kml document -- " << ((double)(clock0a-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time0a,time0) << " elapsed seconds.\n\n");
+	_printString_("  Constructed kml document -- " << ((double)(clock0a-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time0a,time0) << " elapsed seconds.\n\n" << "\n");
 
 /*  write kml file  */
 
-	_pprintLine_("Writing kml document to file.");
+	_pprintString_("Writing kml document to file." << "\n");
 	fprintf(fid,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 	fprintf(fid,"<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n");
@@ -196,15 +196,15 @@
 	clock0b=clock();
 	time0b =time(NULL);
-	_printLine_("  Wrote kml file -- " << ((double)(clock0b-clock0a))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time0b,time0a) << " elapsed seconds.\n\n");
-
-	_pprintLine_("Deleting kml document.");
+	_printString_("  Wrote kml file -- " << ((double)(clock0b-clock0a))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time0b,time0a) << " elapsed seconds.\n\n" << "\n");
+
+	_pprintString_("Deleting kml document." << "\n");
 	delete kdoc;
 	clock0c=clock();
 	time0c =time(NULL);
-	_printLine_("  Deleted kml document -- " << ((double)(clock0c-clock0b))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time0c,time0b) << " elapsed seconds.\n\n");
+	_printString_("  Deleted kml document -- " << ((double)(clock0c-clock0b))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time0c,time0b) << " elapsed seconds.\n\n" << "\n");
 
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("KMLMeshWritex Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n");
+	_printString_("KMLMeshWritex Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n" << "\n");
 
 	return;
@@ -297,5 +297,5 @@
 /*  write each element as a polygon placemark  */
 
-	_pprintLine_("Writing " << melem << " tria elements as KML polygons.");
+	_pprintString_("Writing " << melem << " tria elements as KML polygons." << "\n");
 
 	for (i=0; i<melem; i++) {
@@ -349,7 +349,7 @@
 
 //		if (!(int)fmod((double)(i+1),1000))
-//			_pprintLine_("  " << (i+1) << " tria elements written.");
+//			_pprintString_("  " << (i+1) << " tria elements written." << "\n");
 	}
-	_pprintLine_("  " << melem << " tria elements written.");
+	_pprintString_("  " << melem << " tria elements written." << "\n");
 
 	return(kfold);
Index: /issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/KMLOverlayx/KMLOverlayx.cpp	(revision 15099)
@@ -79,5 +79,5 @@
 /*  write kml file  */
 
-	_pprintLine_("Writing kml document to file.");
+	_pprintString_("Writing kml document to file." << "\n");
 	fprintf(fid,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 	kfile->Write(fid,indent);
@@ -87,5 +87,5 @@
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("KMLOverlayx Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n");
+	_printString_("KMLOverlayx Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n" << "\n");
 
 	return;
Index: /issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Kml2Expx/Kml2Expx.cpp	(revision 15099)
@@ -46,5 +46,5 @@
 /*  open exp file  */
 
-	_pprintLine_("Writing exp profiles to file.");
+	_pprintString_("Writing exp profiles to file." << "\n");
 	fido=fopen(filexp,"w");
 
@@ -61,5 +61,5 @@
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("Kml2Expx Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n");
+	_printString_("Kml2Expx Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n" << "\n");
 
 	return(iret);
Index: /issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Krigingx/Krigingx.cpp	(revision 15099)
@@ -83,8 +83,8 @@
 		observations->ObservationList(&x,&y,&data,&nobs);
 
-		_printLine_("Generation Delaunay Triangulation");
+		_printString_("Generation Delaunay Triangulation" << "\n");
 		BamgTriangulatex(&index,&nel,x,y,nobs);
 
-		_printLine_("Interpolating");
+		_printString_("Interpolating" << "\n");
 		xDelete<double>(predictions);
 		InterpFromMeshToMesh2dx(&predictions,index,x,y,nobs,nel,data,nobs,1,x_interp,y_interp,n_interp,options);
@@ -110,5 +110,5 @@
 		/*launch the thread manager with Krigingxt as a core: */
 		LaunchThread(NearestNeighbort,(void*)&gate,num);
-		_printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+		_printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 		xDelete<int>(gate.numdone);
 	}
@@ -132,5 +132,5 @@
 		/*launch the thread manager with Krigingxt as a core: */
 		LaunchThread(idwt,(void*)&gate,num);
-		_printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+		_printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 		xDelete<int>(gate.numdone);
 	}
@@ -154,5 +154,5 @@
 		/*launch the thread manager with Krigingxt as a core: */
 		LaunchThread(v4t,(void*)&gate,num);
-		_printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+		_printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 		xDelete<int>(gate.numdone);
 	}
@@ -177,5 +177,5 @@
 		/*launch the thread manager with Krigingxt as a core: */
 		LaunchThread(Krigingxt,(void*)&gate,num);
-		_printLine_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+		_printString_("\r      interpolation progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 		xDelete<int>(gate.numdone);
 	}
Index: /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Krigingx/pKrigingx.cpp	(revision 15099)
@@ -68,8 +68,8 @@
 		/*partition loop across threads: */
 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
-			_pprintLine_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%");
+			_pprintString_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%" << "\n");
 			observations->InterpolationKriging(&predictions[idx],&error[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,variogram);
 		}
-		_pprintLine_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%");
+		_pprintString_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%" << "\n");
 
 #ifdef _HAVE_MPI_
@@ -86,8 +86,8 @@
 		/*partition loop across threads: */
 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
-			_pprintLine_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%");
+			_pprintString_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%" << "\n");
 			observations->InterpolationV4(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata);
 		}
-		_pprintLine_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%");
+		_pprintString_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%" << "\n");
 
 #ifdef _HAVE_MPI_
@@ -101,8 +101,8 @@
 		/*partition loop across threads: */
 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
-			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%");
+			_pprintString_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%" << "\n");
 			observations->InterpolationNearestNeighbor(&predictions[idx],x_interp[idx],y_interp[idx],radius);
 		}
-		_pprintLine_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%");
+		_pprintString_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%" << "\n");
 
 #ifdef _HAVE_MPI_
@@ -118,8 +118,8 @@
 		/*partition loop across threads: */
 		for(int idx=my_rank;idx<n_interp;idx+=num_procs){
-			_pprintLine_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%");
+			_pprintString_("      interpolation progress: "<<setw(6)<<setprecision(4)<<double(idx)/double(n_interp)*100.<<"%" << "\n");
 			observations->InterpolationIDW(&predictions[idx],x_interp[idx],y_interp[idx],radius,mindata,maxdata,power);
 		}
-		_pprintLine_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%");
+		_pprintString_("      interpolation progress: "<<fixed<<setw(6)<<setprecision(4)<<100.<<"%" << "\n");
 
 #ifdef _HAVE_MPI_
@@ -142,7 +142,7 @@
 
 	MPI_Barrier(MPI_COMM_WORLD); finish=MPI_Wtime( );
-	_printLine_("\n   " << setw(34) << left << "Observation fitering elapsed time: " << finish_init-start_init << " seconds  \n");
-	_printLine_("   " << setw(34) << left << "Kriging prediction elapsed time: " << finish_core-start_core << " seconds  \n");
-	_printLine_("\n   " << "Total elapsed time " << int((finish-start)/3600) << " hrs " << int(int(finish-start)%3600/60) << " min " << int(finish-start)%60 << " sec\n\n");
+	_printString_("\n   " << setw(34) << left << "Observation fitering elapsed time: " << finish_init-start_init << " seconds  \n" << "\n");
+	_printString_("   " << setw(34) << left << "Kriging prediction elapsed time: " << finish_core-start_core << " seconds  \n" << "\n");
+	_printString_("\n   " << "Total elapsed time " << int((finish-start)/3600) << " hrs " << int(int(finish-start)%3600/60) << " min " << int(finish-start)%60 << " sec\n\n" << "\n");
 	return 1;
 #else
Index: /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Mergesolutionfromftogx/Mergesolutionfromftogx.cpp	(revision 15099)
@@ -17,5 +17,5 @@
 
 	/*Display message*/
-	if(VerboseModule()) _pprintLine_("   Merging solution vector from fset to gset");
+	if(VerboseModule()) _pprintString_("   Merging solution vector from fset to gset" << "\n");
 
 	/*first, get gsize, fsize and ssize: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 15099)
@@ -41,5 +41,5 @@
 	SetVerbosityLevel(verbose);
 
-	if(VerboseMProcessor()) _pprintLine_("   starting model processor ");
+	if(VerboseMProcessor()) _pprintString_("   starting model processor " << "\n");
 
 	for(i=0;i<nummodels;i++){
@@ -65,8 +65,8 @@
 		if(solution_type==SteadystateSolutionEnum && analysis_type==EnthalpyAnalysisEnum && isenthalpy==false) continue;
 
-		if(VerboseMProcessor()) _pprintLine_("   creating datasets for analysis " << EnumToStringx(analysis_type));
+		if(VerboseMProcessor()) _pprintString_("   creating datasets for analysis " << EnumToStringx(analysis_type) << "\n");
 		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,rootpath,solution_type,analysis_type,nummodels,i);
 	}
-	if(VerboseMProcessor()) _pprintLine_("   done with model processor ");
+	if(VerboseMProcessor()) _pprintString_("   done with model processor " << "\n");
 
 	/*Free resources:*/
Index: /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/PointCloudFindNeighborsx/PointCloudFindNeighborsxt.cpp	(revision 15099)
@@ -70,5 +70,5 @@
 	}
 	if (my_thread==0)
-	 _printLine_("\r      loop progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%");
+	 _printString_("\r      loop progress: "<<fixed<<setw(6)<<setprecision(2)<<100.<<"%" << "\n");
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 15099)
@@ -54,5 +54,5 @@
 
   if (itm >= NPDMAX){
-    _printLine_("increase NPDMAX in massBalance.cpp");
+    _printString_("increase NPDMAX in massBalance.cpp" << "\n");
     exit (1);
       }
@@ -80,5 +80,5 @@
   itm = reCast<int,IssmDouble>((PDCUT+2.*siglimc)/DT + 1.5);
   if (itm >= NPDCMAX){
-    _printLine_("'increase NPDCMAX in p35com'");
+    _printString_("'increase NPDCMAX in p35com'" << "\n");
     exit (1);
       }
Index: /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Reduceloadx/Reduceloadx.cpp	(revision 15099)
@@ -22,5 +22,5 @@
 	bool        oldalloc  = false;
 
-	if(VerboseModule()) _pprintLine_("   Dirichlet lifting applied to load vector");
+	if(VerboseModule()) _pprintString_("   Dirichlet lifting applied to load vector" << "\n");
 
 	Kfs->GetSize(&global_m,&global_n);
Index: /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Reducevectorgtofx/Reducevectorgtofx.cpp	(revision 15099)
@@ -17,5 +17,5 @@
 	bool        oldalloc  = false;
 
-	if(VerboseModule()) _pprintLine_("   Reduce vector from g to f set");
+	if(VerboseModule()) _pprintString_("   Reduce vector from g to f set" << "\n");
 
 	/*first figure out fsize: */
Index: /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/ResetConstraintsx/ResetConstraintsx.cpp	(revision 15099)
@@ -14,5 +14,5 @@
 
 	/*Display message*/
-	if(VerboseModule()) _pprintLine_("   Resetting penalties");
+	if(VerboseModule()) _pprintString_("   Resetting penalties" << "\n");
 
 	/*recover parameters: */
Index: /issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Shp2Expx/Shp2Expx.cpp	(revision 15099)
@@ -295,7 +295,7 @@
 
 			if (pnpart[i] > 0)
-				_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n");
+				_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n" << "\n");
 			if (pnvert[i] > 1)
-				_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnvert[i] << " > 1 vertices.\n");
+				_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnvert[i] << " > 1 vertices.\n" << "\n");
 
 			kpoint=new KML_Point();
@@ -464,5 +464,5 @@
 				else {
 					if (!kpoly) {
-						_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\", part " << j << ", expected to be outer loop (cw).\n");
+						_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\", part " << j << ", expected to be outer loop (cw).\n" << "\n");
 						continue;
 					}
@@ -512,5 +512,5 @@
 
 			if (pnpart[i] > 0)
-				_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n");
+				_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n" << "\n");
 
 /*  create a multigeometry to hold all the points  */
@@ -555,5 +555,5 @@
 
 		else if (pstype[i] == SHPT_MULTIPATCH) {
-			_printLine_("Warning -- Shape " << i << " of type \"" <<SHPTypeName( pstype[i] ) << "\" will be ignored.\n");
+			_printString_("Warning -- Shape " << i << " of type \"" <<SHPTypeName( pstype[i] ) << "\" will be ignored.\n" << "\n");
 			continue;
 		}
@@ -562,5 +562,5 @@
 
 		else {
-			_printLine_(,"Warning -- Shape " << i << " of type \"" <<SHPTypeName( pstype[i] ) << "\" will be ignored.\n");
+			_printString_(,"Warning -- Shape " << i << " of type \"" <<SHPTypeName( pstype[i] ) << "\" will be ignored.\n" << "\n");
 		}
 	}
@@ -575,5 +575,5 @@
 /*  open exp file  */
 
-	_pprintLine_("Writing exp profiles to file.");
+	_pprintString_("Writing exp profiles to file." << "\n");
 	fid=fopen(filexp,"w");
 
@@ -609,5 +609,5 @@
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("Shp2Expx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0)  << " elapsed seconds.\n\n");
+	_printString_("Shp2Expx Module -- " <<((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " <<difftime(time1,time0)  << " elapsed seconds.\n\n" << "\n");
 
 	return(iret);
Index: /issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Shp2Kmlx/Shp2Kmlx.cpp	(revision 15099)
@@ -283,7 +283,7 @@
 
 			if (pnpart[i] > 0)
-				_printLine_("Warning -- Shape "<< i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n");
+				_printString_("Warning -- Shape "<< i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n" << "\n");
 			if (pnvert[i] > 1)
-				_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 1 vertices.\n");
+				_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 1 vertices.\n" << "\n");
 
 			kpoint=new KML_Point();
@@ -452,5 +452,5 @@
 				else {
 					if (!kpoly) {
-						_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\", part " << j << ", expected to be outer loop (cw).\n");
+						_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\", part " << j << ", expected to be outer loop (cw).\n" << "\n");
 						continue;
 					}
@@ -500,5 +500,5 @@
 
 			if (pnpart[i] > 0)
-				_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n");
+				_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" should not have " << pnpart[i] << " > 0 parts.\n" << "\n");
 
 /*  create a multigeometry to hold all the points  */
@@ -543,5 +543,5 @@
 
 		else if (pstype[i] == SHPT_MULTIPATCH) {
-			_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" will be ignored.\n");
+			_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" will be ignored.\n" << "\n");
 			continue;
 		}
@@ -550,5 +550,5 @@
 
 		else {
-			_printLine_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" will be ignored.\n");
+			_printString_("Warning -- Shape " << i << " of type \"" << SHPTypeName( pstype[i] ) << "\" will be ignored.\n" << "\n");
 		}
 	}
@@ -563,5 +563,5 @@
 /*  write kml file  */
 
-	_pprintLine_("Writing kml document to file.");
+	_pprintString_("Writing kml document to file." << "\n");
 	fid=fopen(filkml,"w");
 	fprintf(fid,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
@@ -592,5 +592,5 @@
 	clock1=clock();
 	time1 =time(NULL);
-	_printLine_("Shp2Kmlx Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n");
+	_printString_("Shp2Kmlx Module -- " << ((double)(clock1-clock0))/CLOCKS_PER_SEC << " CPU seconds; " << difftime(time1,time0) << " elapsed seconds.\n\n" << "\n");
 
 	return(iret);
Index: /issm/trunk-jpl/src/c/modules/Solverx/Solverx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Solverx/Solverx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/modules/Solverx/Solverx.cpp	(revision 15099)
@@ -20,5 +20,5 @@
 	Vector<IssmDouble> *uf=NULL;
 
-	if(VerboseModule()) _pprintLine_("   Solving matrix system");
+	if(VerboseModule()) _pprintString_("   Solving matrix system" << "\n");
 
 	/*Initialize solver: */
Index: /issm/trunk-jpl/src/c/shared/Elements/PrintArrays.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Elements/PrintArrays.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Elements/PrintArrays.cpp	(revision 15099)
@@ -5,15 +5,15 @@
 
 void printarray(IssmPDouble* array,int lines,int cols){
-	_printLine_("");
+	_printString_("" << "\n");
 	for(int i=0;i<lines;i++){  
 		_printString_("   [ ");
 		for(int j=0;j<cols;j++) _printString_( " " << setw(11) << setprecision (5) << array[i*cols+j]);
-		_printLine_(" ]");
+		_printString_(" ]" << "\n");
 	}  
-	_printLine_("");
+	_printString_("" << "\n");
 }
 void printsparsity(IssmPDouble* array,int lines,int cols){
 	int count;
-	_printLine_("");
+	_printString_("" << "\n");
 	for(int i=0;i<lines;i++){  
 		_printString_("   [ ");
@@ -26,19 +26,19 @@
 			 _printString_( " .");
 		}
-		_printLine_(" ] "<<i<<" => "<<count);
+		_printString_(" ] "<<i<<" => "<<count << "\n");
 	}  
-	_printLine_("");
+	_printString_("" << "\n");
 }
 void printarray(int* array,int lines,int cols){
-	_printLine_("");
+	_printString_("" << "\n");
 	for(int i=0;i<lines;i++){  
 		_printString_("   [ ");
 		for(int j=0;j<cols;j++) _printString_( " " << setw(11) << setprecision (5) << array[i*cols+j]);
-		_printLine_(" ]");
+		_printString_(" ]" << "\n");
 	}  
-	_printLine_("");
+	_printString_("" << "\n");
 }
 void printarray(bool* array,int lines,int cols){
-	_printLine_("");
+	_printString_("" << "\n");
 	for(int i=0;i<lines;i++){  
 		_printString_("   [ ");
@@ -47,7 +47,7 @@
 			else _printString_( " 0");
 		}
-		_printLine_(" ]");
+		_printString_(" ]" << "\n");
 	}  
-	_printLine_("");
+	_printString_("" << "\n");
 }
 void printbinary(int n){
Index: /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Exceptions/Exceptions.cpp	(revision 15099)
@@ -46,10 +46,10 @@
 	else{
 		if(num_procs==1){
-			_printLine_("\n??? Error in ==> " << file_name.c_str() << ":" << file_line);
-			_printLine_(function_name.c_str() << " error message: " << what() << "\n");
+			_printString_("\n??? Error in ==> " << file_name.c_str() << ":" << file_line << "\n");
+			_printString_(function_name.c_str() << " error message: " << what() << "\n" << "\n");
 		}
 		else{
-			_printLine_("\n[" << my_rank<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line);
-			_printLine_(  "[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n");
+			_printString_("\n[" << my_rank<< "] ??? Error using ==> " << file_name.c_str() << ":" << file_line << "\n");
+			_printString_(  "[" << my_rank << "] " << function_name.c_str() << " error message: " << what() << "\n" << "\n");
 		}
 	}
Index: /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Exceptions/exceptions.h	(revision 15099)
@@ -64,9 +64,9 @@
 	}\
 	catch (exception& e) {\
-		_printLine_("Standard exception: " << e.what() << "\n");\
+		_printString_("Standard exception: " << e.what() << "\n" << "\n");\
 		return 0;\
 	}\
 	catch(...){\
-		_printLine_("An unexpected error occurred \n");\
+		_printString_("An unexpected error occurred \n" << "\n");\
 		return 0;\
 	}
Index: /issm/trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/LatLong/Ll2xyx.cpp	(revision 15099)
@@ -114,10 +114,10 @@
 		*pdelta= 45;
 		*pslat = 70;
-		if(flag) _pprintLine_("Info: creating coordinates in polar stereographic (Std Latitude: 70N Meridian: 45).");
+		if(flag) _pprintString_("Info: creating coordinates in polar stereographic (Std Latitude: 70N Meridian: 45)." << "\n");
 	}
 	else if (sgn == -1) {
 		*pdelta= 0;
 		*pslat = 71;
-		if(flag) _pprintLine_("Info: creating coordinates in polar stereographic (Std Latitude: 71S Meridian: 0).");
+		if(flag) _pprintString_("Info: creating coordinates in polar stereographic (Std Latitude: 71S Meridian: 0)." << "\n");
 	}
 	else _error_("Sign should be either +1 or -1.\n");
Index: /issm/trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/LatLong/Xy2llx.cpp	(revision 15099)
@@ -122,10 +122,10 @@
 		*pdelta= 45;
 		*pslat = 70;
-		if(flag) _pprintLine_("Warning: expecting coordinates in polar stereographic (Std Latitude: 70N Meridian: 45).");
+		if(flag) _pprintString_("Warning: expecting coordinates in polar stereographic (Std Latitude: 70N Meridian: 45)." << "\n");
 	}
 	else if (sgn == -1) {
 		*pdelta= 0;
 		*pslat = 71;
-		if(flag) _pprintLine_("Warning: expecting coordinates in polar stereographic (Std Latitude: 71S Meridian: 0).");
+		if(flag) _pprintString_("Warning: expecting coordinates in polar stereographic (Std Latitude: 71S Meridian: 0)." << "\n");
 	}
 	else _error_("Sign should be either +1 or -1.\n");
Index: /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Matrix/MatrixUtils.cpp	(revision 15099)
@@ -205,5 +205,5 @@
 		pindx[ipiv]++;
 
-		//		_printLine_("pivot for i=" << i << ": irow=" << irow << ", icol=" << icol  << ", pindx[" << ipiv << "]=" << pindx[ipiv] << "\n");
+		//		_printString_("pivot for i=" << i << ": irow=" << irow << ", icol=" << icol  << ", pindx[" << ipiv << "]=" << pindx[ipiv] << "\n" << "\n");
 
 		/*  switch rows to put pivot element on diagonal, noting that the
@@ -211,5 +211,5 @@
 
 		if (irow != icol) {
-			//			_printLine_("row switch for i=" << i << ": irow=" << irow << ", icol=" << icol << "\n");
+			//			_printString_("row switch for i=" << i << ": irow=" << irow << ", icol=" << icol << "\n" << "\n");
 
 			ipt=irow*ndim;
@@ -292,5 +292,5 @@
 			icol=pivrc2[j];
 
-			//			_printLine_("column switch back for j=" << j << ": irow=" << irow << ", icol=" << icol << "\n");
+			//			_printString_("column switch back for j=" << j << ": irow=" << irow << ", icol=" << icol << "\n" << "\n");
 
 			ipt=0;
Index: /issm/trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Numerics/BrentSearch.cpp	(revision 15099)
@@ -50,11 +50,11 @@
 	if (xIsNan<IssmDouble>(fxmin)) _error_("Function evaluation returned NaN");
 	cout<<setprecision(5);
-	if(VerboseControl()) _pprintLine_("");
-	if(VerboseControl()) _pprintLine_("       Iteration         x           f(x)       Tolerance         Procedure");
-	if(VerboseControl()) _pprintLine_("");
-	if(VerboseControl()) _pprintLine_("           N/A    "<<setw(12)<<xmin<<"  "<<setw(12)<<fxmin<<"           N/A         boundary");
+	if(VerboseControl()) _pprintString_("" << "\n");
+	if(VerboseControl()) _pprintString_("       Iteration         x           f(x)       Tolerance         Procedure" << "\n");
+	if(VerboseControl()) _pprintString_("" << "\n");
+	if(VerboseControl()) _pprintString_("           N/A    "<<setw(12)<<xmin<<"  "<<setw(12)<<fxmin<<"           N/A         boundary" << "\n");
 	fxmax = (*f)(xmax,optargs);
 	if (xIsNan<IssmDouble>(fxmax)) _error_("Function evaluation returned NaN");
-	if(VerboseControl()) _pprintLine_("           N/A    "<<setw(12)<<xmax<<"  "<<setw(12)<<fxmax<<"           N/A         boundary");
+	if(VerboseControl()) _pprintString_("           N/A    "<<setw(12)<<xmax<<"  "<<setw(12)<<fxmax<<"           N/A         boundary" << "\n");
 
 	/*test if jump option activated and xmin==0*/
@@ -93,7 +93,7 @@
 	/*4: print result*/
 	if(VerboseControl())
-	 _pprintLine_("         "<<setw(5)<<iter<<"    "<<setw(12)<<xbest<<"  "<<setw(12)<<fxbest<<"  "<<setw(12)<<pow(pow(xbest-xm,2),0.5)<<"         initial");
+	 _pprintString_("         "<<setw(5)<<iter<<"    "<<setw(12)<<xbest<<"  "<<setw(12)<<fxbest<<"  "<<setw(12)<<pow(pow(xbest-xm,2),0.5)<<"         initial" << "\n");
 	if (!xIsNan<IssmDouble>(cm_jump) && (xmin==0) && ((fxbest/fxmin)<cm_jump)){
-		if(VerboseControl()) _pprintLine_("      optimization terminated: current x satisfies criteria 'cm_jump'=" << cm_jump);
+		if(VerboseControl()) _pprintString_("      optimization terminated: current x satisfies criteria 'cm_jump'=" << cm_jump << "\n");
 		loop=false;
 	}
@@ -189,18 +189,18 @@
 		tol2=2.0*tol1;
 		if(VerboseControl())
-		 _pprintLine_("         "<<setw(5)<<iter<<"    "<<setw(12)<<x<<"  "<<setw(12)<<fx<<"  "<<setw(12)<<pow(pow(xbest-xm,2),0.5)<<
+		 _pprintString_("         "<<setw(5)<<iter<<"    "<<setw(12)<<x<<"  "<<setw(12)<<fx<<"  "<<setw(12)<<pow(pow(xbest-xm,2),0.5)<<
 					 "         "<<(goldenflag?"golden":"parabolic"));
 
 		/*Stop the optimization?*/
 		if (sqrt(pow(xbest-xm,2)) < (tol2-0.5*(xmax-xmin))){
-			if(VerboseControl()) _pprintLine_("      optimization terminated: current x satisfies criteria 'tolx'=" << tolerance);
+			if(VerboseControl()) _pprintString_("      optimization terminated: current x satisfies criteria 'tolx'=" << tolerance << "\n");
 			loop=false;
 		}
 		else if (iter>=maxiter){
-			if(VerboseControl()) _pprintLine_("      exiting: Maximum number of iterations has been exceeded  ('maxiter'=" << maxiter << ")");
+			if(VerboseControl()) _pprintString_("      exiting: Maximum number of iterations has been exceeded  ('maxiter'=" << maxiter << ")" << "\n");
 			loop=false;
 		}
 		else if (!xIsNan<IssmDouble>(cm_jump) && (xmin==0) && ((fxbest/fxmin)<cm_jump)){
-			if(VerboseControl()) _pprintLine_("      optimization terminated: current x satisfies criteria 'cm_jump'=" << cm_jump);
+			if(VerboseControl()) _pprintString_("      optimization terminated: current x satisfies criteria 'cm_jump'=" << cm_jump << "\n");
 			loop=false;
 		}
Index: /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Numerics/GaussPoints.cpp	(revision 15099)
@@ -50,5 +50,5 @@
 		sizeof(wgt4 )/sizeof(IssmPDouble)};
 
-	//	_pprintLine_("Gauss-Legendre recurrence coefficients ngaus=" << ngaus);
+	//	_pprintString_("Gauss-Legendre recurrence coefficients ngaus=" << ngaus << "\n");
 	*pxgaus =xNew<IssmPDouble>(ngaus);
 	*pxwgt  =xNew<IssmPDouble>(ngaus);
@@ -1138,5 +1138,5 @@
 		sizeof(wgt20)/sizeof(IssmPDouble)};
 
-	//	_pprintLine_("GaussLegendreTria: iord=" << iord);
+	//	_pprintString_("GaussLegendreTria: iord=" << iord << "\n");
 
 	/*  check to see if Gauss points need to be calculated  */
@@ -1198,7 +1198,7 @@
 	}
 
-	//	_pprintLine_("GaussLegendreTria - ngaus=" << *pngaus);
+	//	_pprintString_("GaussLegendreTria - ngaus=" << *pngaus << "\n");
 	//	for (i=0; i<*pngaus; i++)
-	//		_pprintLine_("i=" << i << ": l1gaus=" << (*pl1 )[i] << ",l2gaus=" << (*pl2 )[i] << ",l3gaus=" << (*pl3 )[i]<< ",wgt=" << (*pwgt)[i]<< "\n");
+	//		_pprintString_("i=" << i << ": l1gaus=" << (*pl1 )[i] << ",l2gaus=" << (*pl2 )[i] << ",l3gaus=" << (*pl3 )[i]<< ",wgt=" << (*pwgt)[i]<< "\n" << "\n");
 
 	return;
@@ -1396,5 +1396,5 @@
 		sizeof(wgt6 )/sizeof(IssmPDouble)};
 
-	//	_pprintLine_("GaussLegendreTetra: iord=" << iord);
+	//	_pprintString_("GaussLegendreTetra: iord=" << iord << "\n");
 
 	/*  check to see if Gauss points need to be calculated  */
@@ -1519,5 +1519,5 @@
 		sizeof(wgt5 )/sizeof(IssmPDouble)};
 
-	//	_pprintLine_("Gauss-Lobatto recurrence coefficients ngaus=" << ngaus);
+	//	_pprintString_("Gauss-Lobatto recurrence coefficients ngaus=" << ngaus << "\n");
 	*pxgaus =xNew<IssmPDouble>(ngaus);
 	*pxwgt  =xNew<IssmPDouble>(ngaus);
Index: /issm/trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/Numerics/OptimalSearch.cpp	(revision 15099)
@@ -47,8 +47,8 @@
 	if (xIsNan<IssmDouble>(fx1)) _error_("Function evaluation returned NaN");
 	cout<<setprecision(5);
-	if(VerboseControl()) _pprintLine_("");
-	if(VerboseControl()) _pprintLine_("       Iteration         x           f(x)       Tolerance");
-	if(VerboseControl()) _pprintLine_("");
-	if(VerboseControl()) _pprintLine_("           N/A    "<<setw(12)<<x1<<"  "<<setw(12)<<fx1<<"           N/A");
+	if(VerboseControl()) _pprintString_("" << "\n");
+	if(VerboseControl()) _pprintString_("       Iteration         x           f(x)       Tolerance" << "\n");
+	if(VerboseControl()) _pprintString_("" << "\n");
+	if(VerboseControl()) _pprintString_("           N/A    "<<setw(12)<<x1<<"  "<<setw(12)<<fx1<<"           N/A" << "\n");
 
 	//update tolerances
@@ -63,13 +63,13 @@
 		if (xIsNan<IssmDouble>(fx2)) _error_("Function evaluation returned NaN");
 		if(VerboseControl())
-		 _pprintLine_("         "<<setw(5)<<iter<<"    "<<setw(12)<<x2<<"  "<<setw(12)<<fx2<<"  "<<(fabs(x2-x1)>fabs(fx2-fx1)?fabs(fx2-fx1):fabs(x2-x1)));
+		 _pprintString_("         "<<setw(5)<<iter<<"    "<<setw(12)<<x2<<"  "<<setw(12)<<fx2<<"  "<<(fabs(x2-x1)>fabs(fx2-fx1)?fabs(fx2-fx1):fabs(x2-x1)) << "\n");
 
 		//Stop the optimization?
 		if ((fabs(x2-x1)+seps)<tolerance || (fabs(fx2-fx1)+seps)<tolerance){
-			if(VerboseControl()) _pprintLine_("      " << "optimization terminated: the current x satisfies the termination criteria using 'tolx' of "  << tolerance);
+			if(VerboseControl()) _pprintString_("      " << "optimization terminated: the current x satisfies the termination criteria using 'tolx' of "  << tolerance << "\n");
 			loop=false;
 		}
 		else if (iter>=maxiter){
-			if(VerboseControl()) _pprintLine_("      " << "exiting: Maximum number of iterations has been exceeded  - increase 'maxiter'");
+			if(VerboseControl()) _pprintString_("      " << "exiting: Maximum number of iterations has been exceeded  - increase 'maxiter'" << "\n");
 			loop=false;
 		}
Index: /issm/trunk-jpl/src/c/shared/io/Print/Print.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Print/Print.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/io/Print/Print.h	(revision 15099)
@@ -19,24 +19,10 @@
 using namespace std;
 /*macros:*/
-/* _printLine_ {{{*/
-/* macro to print a line, adds std::endl, only on cpu 0 */
-#define _printLine_(StreamArgs)\
-  do{std::ostringstream aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy; \
-	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs << std::ends; \
-	  PrintfFunction3(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
-/*}}}*/
 /* _printString_ {{{*/
 /* macro to print some string. Only on cpu0 */
 #define _printString_(StreamArgs)\
   do{std::ostringstream aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy; \
-	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs << std::ends; \
-	  PrintfFunction4(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
-/*}}}*/
-/* _pprintLine_ {{{*/
-/* macro to print a line, adds std::endl, only on cpu 0 */
-#define _pprintLine_(StreamArgs)\
-  do{std::ostringstream aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy; \
-	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs << std::ends; \
-	  PrintfFunction(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
+	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs; \
+	  PrintfFunctionOnAllCpus(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
 /*}}}*/
 /* _pprintString_ {{{*/
@@ -44,22 +30,11 @@
 #define _pprintString_(StreamArgs)\
   do{std::ostringstream aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy; \
-	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs << std::ends; \
-	  PrintfFunction2(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
-/*}}}*/
-
-/* _printLine_ {{{*/
-/* macro to print a line, adds std::endl, only on cpu 0 */
-#define _printLine_(StreamArgs)\
-  do{std::ostringstream aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy; \
-	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs << std::ends; \
-	  PrintfFunction3(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
+	  aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy << StreamArgs; \
+	  PrintfFunctionOnCpu0(aLoNgAnDwEiRdLoCaLnAmeFoRtHiSmAcRoOnLy.str());}while(0)
 /*}}}*/
 
 /*functions: */
-int PrintfFunction(const char* format,...);
-int PrintfFunction(const string & message);
-int PrintfFunction2(const string & message);
-int PrintfFunction3(const string & message);
-int PrintfFunction4(const string & message);
+int PrintfFunctionOnCpu0(const string & message);
+int PrintfFunctionOnAllCpus(const string & message);
 
 #endif	
Index: /issm/trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/shared/io/Print/PrintfFunction.cpp	(revision 15099)
@@ -1,4 +1,4 @@
 /*\file PrintfFunction.c
- *\brief: this function is used by the print macros, to take into account the 
+ *\brief: this function is used by the _printf_ macro, to take into account the 
  *fact we may be running on a cluster. 
  */
@@ -20,47 +20,5 @@
 #include "../../MemOps/MemOps.h"
 
-int PrintfFunction(const char* format,...){
-	/*http://linux.die.net/man/3/vsnprintf*/
-
-	/*string to be printed: */
-	char *buffer = NULL;
-	int   n,size = 100;
-	int   my_rank;
-	//variable list of arguments
-	va_list args;
-
-	/*recover my_rank:*/
-	my_rank=IssmComm::GetRank();
-
-	while(true){
-
-		/*allocate buffer for given string size*/
-		buffer=xNew<char>(size);
-
-		/* Try to print in the allocated space. */
-		va_start(args, format);
-		n=vsnprintf(buffer,size,format,args);
-		va_end(args);
-
-		/* If that worked, return the string. */
-		if(n>-1 && n<size) break;
-
-		/* Else try again with more space. */
-		if(n>-1)   /* glibc 2.1 */
-		 size=n+1; /* precisely what is needed */
-		else       /* glibc 2.0 */
-		 size*=2;  /* twice the old size */
-
-		xDelete<char>(buffer);
-	}
-
-	/*Ok, if we are running in parallel, get node 0 to print*/
-	if(my_rank==0)_printString_(buffer);
-
-	/*Clean up and return*/
-	xDelete<char>(buffer);
-	return 1;
-}
-int PrintfFunction(const string & message){
+int PrintfFunctionOnCpu0(const string & message){
 	int  my_rank;
 
@@ -72,34 +30,17 @@
 		__android_log_print(ANDROID_LOG_INFO, "Native",message.c_str());
 		#else
-		ApiPrintf("%s\n",message.c_str());
+		ApiPrintf("%s",message.c_str());
 		#endif
 	}
 	return 1;
 }
-int PrintfFunction2(const string & message){
-	int  my_rank;
-
-	/*recover my_rank:*/
-	my_rank=IssmComm::GetRank();
-
-	if(my_rank==0){
-		ApiPrintf("%s",message.c_str());
-	}
-	return 1;
-}
-int PrintfFunction3(const string & message){
+int PrintfFunctionOnAllCpus(const string & message){
 
 	#ifdef _HAVE_ANDROID_JNI_
 	__android_log_print(ANDROID_LOG_INFO, "Native",message.c_str());
 	#else
-	ApiPrintf("%s\n",message.c_str());
+	ApiPrintf("%s",message.c_str());
 	#endif
 
 	return 1;
 }
-int PrintfFunction4(const string & message){
-
-	ApiPrintf("%s",message.c_str());
-
-	return 1;
-}
Index: /issm/trunk-jpl/src/c/solutionsequences/convergence.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/convergence.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/solutionsequences/convergence.cpp	(revision 15099)
@@ -30,5 +30,5 @@
 	IssmDouble yts;
 
-	if(VerboseModule()) _pprintLine_("   checking convergence");
+	if(VerboseModule()) _pprintString_("   checking convergence" << "\n");
 
 	/*If uf is NULL in input, f-set is nil, model is fully constrained, therefore converged from 
@@ -56,5 +56,5 @@
 		nF=pf->Norm(NORM_TWO);
 		solver_residue=nKUF/nF;
-		_pprintLine_("\n" << "   solver residue: norm(KU-F)/norm(F)=" << solver_residue);
+		_pprintString_("\n" << "   solver residue: norm(KU-F)/norm(F)=" << solver_residue << "\n");
 
 		//clean up
@@ -73,5 +73,5 @@
 	res=nKUoldF/nF;
 	if (xIsNan<IssmDouble>(res)){
-		_pprintLine_("norm nf = " << nF << "f and norm kuold = " << nKUoldF << "f");
+		_pprintString_("norm nf = " << nF << "f and norm kuold = " << nKUoldF << "f" << "\n");
 		_error_("mechanical equilibrium convergence criterion is NaN!");
 	}
@@ -83,9 +83,9 @@
 	//print
 	if(res<eps_res){
-		if(VerboseConvergence()) _pprintLine_(setw(50)<<left<<"   mechanical equilibrium convergence criterion"<<res*100<< " < "<<eps_res*100<<" %");
+		if(VerboseConvergence()) _pprintString_(setw(50)<<left<<"   mechanical equilibrium convergence criterion"<<res*100<< " < "<<eps_res*100<<" %" << "\n");
 		converged=true;
 	}
 	else{ 
-		if(VerboseConvergence()) _pprintLine_(setw(50)<<left<<"   mechanical equilibrium convergence criterion"<<res*100<<" > "<<eps_res*100<<" %");
+		if(VerboseConvergence()) _pprintString_(setw(50)<<left<<"   mechanical equilibrium convergence criterion"<<res*100<<" > "<<eps_res*100<<" %" << "\n");
 		converged=false;
 	}
@@ -106,12 +106,12 @@
 		if (!xIsNan<IssmDouble>(eps_rel)){
 			if((ndu/nu)<eps_rel){
-				if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " < " << eps_rel*100 << " %");
+				if(VerboseConvergence()) _pprintString_(setw(50) << left << "   Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " < " << eps_rel*100 << " %" << "\n");
 			}
 			else{ 
-				if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " > " << eps_rel*100 << " %");
+				if(VerboseConvergence()) _pprintString_(setw(50) << left << "   Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " > " << eps_rel*100 << " %" << "\n");
 				converged=false;
 			}
 		}
-		else _pprintLine_(setw(50) << left << "   Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " %");
+		else _pprintString_(setw(50) << left << "   Convergence criterion: norm(du)/norm(u)" << ndu/nu*100 << " %" << "\n");
 
 	}
@@ -131,12 +131,12 @@
 		if (!xIsNan<IssmDouble>(eps_abs)){
 			if ((nduinf*yts)<eps_abs){
-				if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   Convergence criterion: max(du)" << nduinf*yts << " < " << eps_abs << " m/yr");
+				if(VerboseConvergence()) _pprintString_(setw(50) << left << "   Convergence criterion: max(du)" << nduinf*yts << " < " << eps_abs << " m/yr" << "\n");
 			}
 			else{
-				if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   Convergence criterion: max(du)" << nduinf*yts << " > " << eps_abs << " m/yr");
+				if(VerboseConvergence()) _pprintString_(setw(50) << left << "   Convergence criterion: max(du)" << nduinf*yts << " > " << eps_abs << " m/yr" << "\n");
 				converged=false;
 			}
 		}
-		else  _pprintLine_(setw(50) << left << "   Convergence criterion: max(du)" << nduinf*yts << " m/yr");
+		else  _pprintString_(setw(50) << left << "   Convergence criterion: max(du)" << nduinf*yts << " m/yr" << "\n");
 
 	}
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp	(revision 15099)
@@ -91,5 +91,5 @@
 
 			if (!sedconverged){
-				if(VerboseConvergence()) _pprintLine_("   #unstable constraints = " << num_unstable_constraints);
+				if(VerboseConvergence()) _pprintString_("   #unstable constraints = " << num_unstable_constraints << "\n");
 				if(num_unstable_constraints==0) sedconverged = true;
 				if (sedcount>=hydro_maxiter){
@@ -131,5 +131,5 @@
 
 			if (!eplconverged){
-				if(VerboseConvergence()) _pprintLine_("   #unstable constraints = " << num_unstable_constraints);
+				if(VerboseConvergence()) _pprintString_("   #unstable constraints = " << num_unstable_constraints << "\n");
 				if(num_unstable_constraints==0) eplconverged = true;
 				if (eplcount>=hydro_maxiter){
@@ -164,22 +164,22 @@
 			if (!xIsNan<IssmDouble>(eps_hyd)){
 				if((ndu_sed/nu_sed)<eps_hyd){
-					if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " < " << eps_hyd*100 << " %");
+					if(VerboseConvergence()) _pprintString_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " < " << eps_hyd*100 << " %" << "\n");
 					hydroconverged=true;
 				}
 				else{ 
-					if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " > " << eps_hyd*100 << " %");
+					if(VerboseConvergence()) _pprintString_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " > " << eps_hyd*100 << " %" << "\n");
 					hydroconverged=false;
 				}
 				if(isefficientlayer){
 					if((ndu_epl/nu_epl)<eps_hyd){
-						if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " < " << eps_hyd*100 << " %");
+						if(VerboseConvergence()) _pprintString_(setw(50) << left << "   EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " < " << eps_hyd*100 << " %" << "\n");
 					}
 					else{ 
-						if(VerboseConvergence()) _pprintLine_(setw(50) << left << "   EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " > " << eps_hyd*100 << " %");
+						if(VerboseConvergence()) _pprintString_(setw(50) << left << "   EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " > " << eps_hyd*100 << " %" << "\n");
 						hydroconverged=false;
 					}
 				}
 			}
-			else _pprintLine_(setw(50) << left << "   Convergence criterion:" << ndu_sed/nu_sed*100 << " %");
+			else _pprintString_(setw(50) << left << "   Convergence criterion:" << ndu_sed/nu_sed*100 << " %" << "\n");
 			if (hydrocount>=hydro_maxiter){
 				_error_("   maximum number for hydrological global iterations (" << hydro_maxiter << ") exceeded");
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp	(revision 15099)
@@ -93,5 +93,5 @@
 		}
 		if(count>=max_nonlinear_iterations){
-			_pprintLine_("   maximum number of Newton iterations (" << max_nonlinear_iterations << ") exceeded"); 
+			_pprintString_("   maximum number of Newton iterations (" << max_nonlinear_iterations << ") exceeded" << "\n"); 
 			bool max_iteration_state=true;
 			int tempStep=1;
@@ -104,5 +104,5 @@
 	}
 
-	if(VerboseConvergence()) _pprintLine_("\n   total number of iterations: " << count-1);
+	if(VerboseConvergence()) _pprintString_("\n   total number of iterations: " << count-1 << "\n");
 
 	/*clean-up*/
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp	(revision 15099)
@@ -70,5 +70,5 @@
 
 		ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
-		if(VerboseConvergence()) _pprintLine_("   number of unstable constraints: " << num_unstable_constraints);
+		if(VerboseConvergence()) _pprintString_("   number of unstable constraints: " << num_unstable_constraints << "\n");
 
 		//rift convergence
@@ -90,5 +90,5 @@
 		}
 		if(count>=max_nonlinear_iterations){
-			_pprintLine_("   maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded"); 
+			_pprintString_("   maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded" << "\n"); 
 			converged=true;
 			InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);
@@ -102,5 +102,5 @@
 	}
 
-	if(VerboseConvergence()) _pprintLine_("\n   total number of iterations: " << count-1);
+	if(VerboseConvergence()) _pprintString_("\n   total number of iterations: " << count-1 << "\n");
 
 	/*clean-up*/
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp	(revision 15099)
@@ -89,5 +89,5 @@
 		if(converged==true)break;
 		if(count>=max_nonlinear_iterations){
-			_pprintLine_("   maximum number of iterations (" << max_nonlinear_iterations << ") exceeded"); 
+			_pprintString_("   maximum number of iterations (" << max_nonlinear_iterations << ") exceeded" << "\n"); 
 			break;
 		}
Index: /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp	(revision 15099)
@@ -59,9 +59,9 @@
 
 		if (!converged){
-			if(VerboseConvergence()) _pprintLine_("   #unstable constraints = " << num_unstable_constraints);
+			if(VerboseConvergence()) _pprintString_("   #unstable constraints = " << num_unstable_constraints << "\n");
 			if (num_unstable_constraints <= thermal_penalty_threshold)converged=true;
 			if (count>=thermal_maxiter){
 				converged=true;
-				_pprintLine_("   maximum number of iterations (" << thermal_maxiter << ") exceeded"); 
+				_pprintString_("   maximum number of iterations (" << thermal_maxiter << ") exceeded" << "\n"); 
 			}
 		}
Index: /issm/trunk-jpl/src/c/toolkits/issm/Bucket.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/Bucket.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/toolkits/issm/Bucket.h	(revision 15099)
@@ -88,23 +88,23 @@
 		/*object virtual functions definitions:*/
 		void    Echo(){ /*{{{*/
-			_printLine_("Bucket echo (cpu #: "<<IssmComm::GetRank()<<")");
-			_printLine_("bucket type: " << type);
-			_printLine_("num rows: "<<this->m<<" num cols: "<<this->n);
+			_printString_("Bucket echo (cpu #: "<<IssmComm::GetRank()<<")" << "\n");
+			_printString_("bucket type: " << type << "\n");
+			_printString_("num rows: "<<this->m<<" num cols: "<<this->n << "\n");
 		} /*}}}*/
 		void    DeepEcho(){ /*{{{*/
 			int i,j;
 
-			_printLine_("Bucket echo (cpu #: "<<IssmComm::GetRank()<<")");
-			_printLine_("bucket type: " << type);
-			_printLine_("num rows: "<<this->m<<" num cols: "<<this->n);
+			_printString_("Bucket echo (cpu #: "<<IssmComm::GetRank()<<")" << "\n");
+			_printString_("bucket type: " << type << "\n");
+			_printString_("num rows: "<<this->m<<" num cols: "<<this->n << "\n");
 			if(type==MATRIX_BUCKET){
 				for (i=0;i<this->m;i++){
-					_printLine_("row "<<this->idxm[i]<<", column indices: ");
+					_printString_("row "<<this->idxm[i]<<", column indices: " << "\n");
 					for (j=0;j<this->n;j++){
-						_printLine_(" "<<this->idxn[j]);
-					}
-					_printLine_("values: ");
+						_printString_(" "<<this->idxn[j] << "\n");
+					}
+					_printString_("values: " << "\n");
 					for (j=0;j<this->n;j++){
-						_printLine_(" "<<this->values[m*i+j]);
+						_printString_(" "<<this->values[m*i+j] << "\n");
 					}
 				}
@@ -112,5 +112,5 @@
 			else if(type==VECTOR_BUCKET){
 				for (i=0;i<this->m;i++){
-					_printLine_("row "<<this->idxm[i]<<", value " << this->values[i]);
+					_printString_("row "<<this->idxm[i]<<", value " << this->values[i] << "\n");
 				}
 			}
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmDenseMat.h	(revision 15099)
@@ -115,10 +115,10 @@
 
 			int i,j;
-			_printLine_("IssmDenseMat size " << this->M << "-" << this->N);
+			_printString_("IssmDenseMat size " << this->M << "-" << this->N << "\n");
 			for(i=0;i<M;i++){
 				for(j=0;j<N;j++){
 					_printString_(this->matrix[N*i+j] << " ");
 				}
-				_printLine_("");
+				_printString_("" << "\n");
 			}
 		}
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h	(revision 15099)
@@ -144,11 +144,11 @@
 			for(i=0;i<IssmComm::GetSize();i++){
 				if (my_rank==i){
-					_printLine_("cpu " << i << " #rows: " << this->m);
+					_printString_("cpu " << i << " #rows: " << this->m << "\n");
 					for (j=0;j<this->m;j++){
-						_printLine_("row " << j);
+						_printString_("row " << j << "\n");
 						for (k=0;k<this->N;k++){
-							_printLine_(this->matrix[j*this->N+k] << " ");
+							_printString_(this->matrix[j*this->N+k] << " " << "\n");
 						}
-						_printLine_("");
+						_printString_("" << "\n");
 					}
 				}
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmMpiVec.h	(revision 15099)
@@ -132,9 +132,9 @@
 			for(i=0;i<IssmComm::GetSize();i++){
 				if (IssmComm::GetRank()==i){
-					_printLine_("cpu " << i << " #rows: " << this->m);
+					_printString_("cpu " << i << " #rows: " << this->m << "\n");
 					for (j=0;j<this->m;j++){
-						_printLine_("row " << j << " " << this->vector[j]);
+						_printString_("row " << j << " " << this->vector[j] << "\n");
 					}
-					_printLine_("");
+					_printString_("" << "\n");
 				}
 				MPI_Barrier(IssmComm::GetComm());
Index: /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h	(revision 15098)
+++ /issm/trunk-jpl/src/c/toolkits/issm/IssmSeqVec.h	(revision 15099)
@@ -91,5 +91,5 @@
 
 			int i;
-			_printLine_("IssmSeqVec size " << this->M);
+			_printString_("IssmSeqVec size " << this->M << "\n");
 			for(i=0;i<M;i++){
 				_printString_(vector[i] << "\n ");
Index: /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp
===================================================================
--- /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp	(revision 15099)
@@ -93,12 +93,12 @@
 	MatInfo info;
 	MatGetInfo(this->matrix,MAT_GLOBAL_SUM,&info);
-	_pprintLine_("=========================== Stiffness matrix allocation info ===========================");
-	_pprintLine_("");
-   _pprintLine_(" Block size  : "<<info.block_size);
-	_pprintLine_(" nz_allocated: "<<info.nz_allocated);
-	_pprintLine_(" nz_used     : "<<info.nz_used);
-	_pprintLine_(" nz_unneeded : "<<info.nz_unneeded<<" ("<<double(info.nz_unneeded)/double(info.nz_allocated)*100.<<"%)");
-	_pprintLine_("");
-	_pprintLine_("========================================================================================");
+	_pprintString_("=========================== Stiffness matrix allocation info ===========================" << "\n");
+	_pprintString_("" << "\n");
+   _pprintString_(" Block size  : "<<info.block_size << "\n");
+	_pprintString_(" nz_allocated: "<<info.nz_allocated << "\n");
+	_pprintString_(" nz_used     : "<<info.nz_used << "\n");
+	_pprintString_(" nz_unneeded : "<<info.nz_unneeded<<" ("<<double(info.nz_unneeded)/double(info.nz_allocated)*100.<<"%)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("========================================================================================" << "\n");
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/AverageFilter/AverageFilter.cpp	(revision 15099)
@@ -13,11 +13,11 @@
 
 void AverageFilterUsage(void){/*{{{*/
-	_printLine_("   AverageFilter usage:");
-	_printLine_("   [image_out]=AverageFilter(image_in,pixels);\n");
-	_printLine_("   where:");
-	_printLine_("      image_in in double format");
-	_printLine_("      pixels: characteristic size of smoothing");
-	_printLine_("      image_out in double format");
-	_printLine_("");
+	_printString_("   AverageFilter usage:" << "\n");
+	_printString_("   [image_out]=AverageFilter(image_in,pixels)" << "\n");
+	_printString_("   where:" << "\n");
+	_printString_("      image_in in double format" << "\n");
+	_printString_("      pixels: characteristic size of smoothing" << "\n");
+	_printString_("      image_out in double format" << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(AverageFilter){
Index: /issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/BamgConvertMesh/BamgConvertMesh.cpp	(revision 15099)
@@ -6,10 +6,10 @@
 void BamgConvertMeshUsage(void){/*{{{*/
 	_pprintString_("BAMGCONVERTMESH - convert [x y index] to a bamg geom and mesh geom");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [bamggeom bamgmesh]=BamgConvertMesh(index,x,y);");
-	_pprintLine_("      index: index of the mesh");
-	_pprintLine_("      x,y: coordinates of the nodes");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [bamggeom bamgmesh]=BamgConvertMesh(index,x,y)" << "\n");
+	_pprintString_("      index: index of the mesh" << "\n");
+	_pprintString_("      x,y: coordinates of the nodes" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(BamgConvertMesh){
Index: /issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/BamgMesher/BamgMesher.cpp	(revision 15099)
@@ -5,7 +5,7 @@
 
 void BamgMesherUsage(void){/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("   usage: [bamgmesh,bamggeom]=" << __FUNCT__ << "(bamgmesh,bamggeom,bamgoptions);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: [bamgmesh,bamggeom]=" << __FUNCT__ << "(bamgmesh,bamggeom,bamgoptions)" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(BamgMesher){
Index: /issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/BamgTriangulate/BamgTriangulate.cpp	(revision 15099)
@@ -6,10 +6,10 @@
 void BamgTriangulateUsage(void){/*{{{*/
 	_pprintString_("BAMGTRIANGULATE - Delaunay Triangulation of a list of points");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      index=BamgTriangulate(x,y);");
-	_pprintLine_("      index: index of the triangulation");
-	_pprintLine_("      x,y: coordinates of the nodes");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      index=BamgTriangulate(x,y);" << "\n");
+	_pprintString_("      index: index of the triangulation" << "\n");
+	_pprintString_("      x,y: coordinates of the nodes" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(BamgTriangulate){
@@ -36,5 +36,5 @@
 
 	/*Input datasets: */
-	if (verbose) _printLine_("Fetching inputs");
+	if (verbose) _printString_("Fetching inputs" << "\n");
 	FetchData(&x,&nods,&x_cols,XHANDLE);
 	FetchData(&y,&y_rows,&y_cols,YHANDLE);
@@ -46,5 +46,5 @@
 
 	/* Run core computations: */
-	if (verbose) _printLine_("Call core");
+	if (verbose) _printString_("Call core" << "\n");
 	BamgTriangulatex(&index,&nels,x,y,nods);
 
Index: /issm/trunk-jpl/src/wrappers/Chaco/Chaco.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Chaco/Chaco.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Chaco/Chaco.cpp	(revision 15099)
@@ -12,7 +12,7 @@
 
 void ChacoUsage(void){/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("Usage: [assgn] = Chaco(A,vwgts,ewgts,x,y,z,options,nparts,goal);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("Usage: [assgn] = Chaco(A,vwgts,ewgts,x,y,z,options,nparts,goal);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Chaco){
@@ -86,22 +86,22 @@
 	/*Some debugging print: {{{*/
 	#ifdef _DEBUG_
-	_printLine_("nvtxs: " << nvtxs);
+	_printString_("nvtxs: " << nvtxs << "\n");
 	_printString_("options: [");
 	for(i=0;i<10;i++)_printString_(options[i] << "|");
-	_printLine_("]");
-	_printLine_("start: ");
+	_printString_("]" << "\n");
+	_printString_("start: " << "\n");
 	for (i=0; i<nvtxs+1;i++)_printString_(start[i] << " ");
-	_printLine_("");
-	_printLine_("adjacency: ");
+	_printString_("" << "\n");
+	_printString_("adjacency: " << "\n");
 	for (i=0; i<mxGetNzmax(A_IN);i++)_printString_("" <<adjacency[i]<< " ");i++)
-	_printLine_("");
-	_printLine_("nedges: " << nedges << " " << ewgts);
+	_printString_("" << "\n");
+	_printString_("nedges: " << nedges << " " << ewgts << "\n");
 	if(ewgts) for (i = 0; i < nedges; i++)_printString_(ewgts[i] << " ");
-	_printLine_("");
-	_printLine_("vwgts:");
+	_printString_("" << "\n");
+	_printString_("vwgts:" << "\n");
 	for (i = 0; i < nvtxs; i++)_printString_(vwgts[i] << " ");
-	_printLine_("");
-	_printLine_("nparts: " << nparts[0]);
-	_printLine_("goal: " << goal);
+	_printString_("" << "\n");
+	_printString_("nparts: " << nparts[0] << "\n");
+	_printString_("goal: " << goal << "\n");
 	#endif
 	/*}}}*/
Index: /issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/ContourToMesh/ContourToMesh.cpp	(revision 15099)
@@ -7,23 +7,23 @@
 
 void ContourToMeshUsage(void){/*{{{*/
-	_printLine_("CONTOURTOMESH - Flag the elements or nodes inside a contour");
-	_printLine_("");
-	_printLine_("      Usage: ");
-	_printLine_("         [in_nod,in_elem]=ContourToMesh(index,x,y,contourname,interptype,edgevalue)\n");
-	_printLine_("");
-	_printLine_("         index,x,y: mesh triangulation.");
-	_printLine_("         contourname: name of .exp file containing the contours.");
-	_printLine_("         interptype: string definining type of interpolation ('element', or 'node').");
-	_printLine_("         edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.");
-	_printLine_("         in_nod: vector of flags (0 or 1), of size nods if interptype is set to 'node' or 'element and node', ");
-	_printLine_("            or of size 0 otherwise.");
-	_printLine_("         in_elem: vector of flags (0 or 1), of size nel if interptype is set to 'element' or 'element and node', ");
-	_printLine_("            or of size 0 otherwise.");
-	_printLine_("");
-	_printLine_("      Example: ");
-	_printLine_("         in_nod=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','node',1)");
-	_printLine_("         in_elements=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element',0)");
-	_printLine_("         [in_nodes,in_elements]=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element and node',0)");
-	_printLine_("");
+	_printString_("CONTOURTOMESH - Flag the elements or nodes inside a contour" << "\n");
+	_printString_("" << "\n");
+	_printString_("      Usage: " << "\n");
+	_printString_("         [in_nod,in_elem]=ContourToMesh(index,x,y,contourname,interptype,edgevalue)" << "\n");
+	_printString_("" << "\n");
+	_printString_("         index,x,y: mesh triangulation." << "\n");
+	_printString_("         contourname: name of .exp file containing the contours." << "\n");
+	_printString_("         interptype: string definining type of interpolation ('element', or 'node')." << "\n");
+	_printString_("         edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons." << "\n");
+	_printString_("         in_nod: vector of flags (0 or 1), of size nods if interptype is set to 'node' or 'element and node', " << "\n");
+	_printString_("            or of size 0 otherwise." << "\n");
+	_printString_("         in_elem: vector of flags (0 or 1), of size nel if interptype is set to 'element' or 'element and node', " << "\n");
+	_printString_("            or of size 0 otherwise." << "\n");
+	_printString_("" << "\n");
+	_printString_("      Example: " << "\n");
+	_printString_("         in_nod=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','node',1)" << "\n");
+	_printString_("         in_elements=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element',0)" << "\n");
+	_printString_("         [in_nodes,in_elements]=ContourToMesh(md.elements,md.x,md.y,'Contour.exp','element and node',0)" << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(ContourToMesh){
Index: /issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/ContourToNodes/ContourToNodes.cpp	(revision 15099)
@@ -6,12 +6,12 @@
 
 void ContourToNodesUsage(void){/*{{{*/
-	_printLine_("   usage:");
-	_printLine_("   [flags]=ContourToNodes(x,y,contourname,edgevalue);\n");
-	_printLine_("   where:");
-	_printLine_("      x,y: list of nodes.");
-	_printLine_("      contourname: name of .exp file containing the contours, or resulting structure from call to expread.");
-	_printLine_("      edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons.");
-	_printLine_("      flags: vector of flags (0 or 1), of size nods.");
-	_printLine_("");
+	_printString_("   usage:" << "\n");
+	_printString_("   [flags]=ContourToNodes(x,y,contourname,edgevalue);" << "\n");
+	_printString_("   where:" << "\n");
+	_printString_("      x,y: list of nodes." << "\n");
+	_printString_("      contourname: name of .exp file containing the contours, or resulting structure from call to expread." << "\n");
+	_printString_("      edgevalue: integer (0, 1 or 2) defining the value associated to the nodes on the edges of the polygons." << "\n");
+	_printString_("      flags: vector of flags (0 or 1), of size nods." << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(ContourToNodes){
Index: /issm/trunk-jpl/src/wrappers/EdgeDetection/EdgeDetection.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/EdgeDetection/EdgeDetection.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/EdgeDetection/EdgeDetection.cpp	(revision 15099)
@@ -6,15 +6,15 @@
 
 void EdgeDetectionUsage(void){/*{{{*/
-	_pprintLine_("EDGEDETECTION usage- detect edges of a boolean image");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      contours=EdgeDetection(image);");
-	_pprintLine_("");
-	_pprintLine_("      image: boolean matrix");
-	_pprintLine_("");
-	_pprintLine_("   Example:");
-	_pprintLine_("      load('velocities.mat');");
-	_pprintLine_("      md.inversion.vx_obs=EdgeDetection(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);");
-	_pprintLine_("");
+	_pprintString_("EDGEDETECTION usage- detect edges of a boolean image" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      contours=EdgeDetection(image);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      image: boolean matrix" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Example:" << "\n");
+	_pprintString_("      load('velocities.mat');" << "\n");
+	_pprintString_("      md.inversion.vx_obs=EdgeDetection(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(EdgeDetection){
Index: /issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/ElementConnectivity/ElementConnectivity.cpp	(revision 15099)
@@ -6,7 +6,7 @@
 
 void ElementConnectivityUsage(void) {/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("   usage: elementconnectivity = " << __FUNCT__ << "(elements, nodeconnectivity);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: elementconnectivity = " << __FUNCT__ << "(elements, nodeconnectivity);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(ElementConnectivity){
Index: /issm/trunk-jpl/src/wrappers/EnumToString/EnumToString.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/EnumToString/EnumToString.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/EnumToString/EnumToString.cpp	(revision 15099)
@@ -6,7 +6,7 @@
 
 void EnumToStringUsage(void){/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("   usage: " << __FUNCT__ << "string = EnumToString(enum);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: " << __FUNCT__ << "string = EnumToString(enum);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(EnumToString){
Index: /issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Exp2Kml/Exp2Kml.cpp	(revision 15099)
@@ -5,26 +5,26 @@
 
 void Exp2KmlUsage(void){/*{{{*/
-	_pprintLine_("Exp2Kml - exp to kml file conversion module:");
-	_pprintLine_("");
-	_pprintLine_("   This module converts a file from exp to kml format.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [ret]=Exp2Kml(filexp,filkml,sgn,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      filexp      file name of exp file to be read (char)");
-	_pprintLine_("      filkml      file name of kml file to be written (char)");
-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
-	_pprintLine_("");
-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
-	_pprintLine_("      holes       flag for treatment of multiple profiles (char, optional, 'yes' for holes))");
-	_pprintLine_("");
-	_pprintLine_("      ret         return code (non-zero for warning)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml', 1);");
-	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml', 1,'central_meridian',45,'standard_parallel',70,'holes','yes');");
-	_pprintLine_("      [ret]=Exp2Kml('file.exp','file.kml',-1,'central_meridian', 0,'standard_parallel',71,'holes','yes');");
-	_pprintLine_("");
+	_pprintString_("Exp2Kml - exp to kml file conversion module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module converts a file from exp to kml format." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [ret]=Exp2Kml(filexp,filkml,sgn,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      filexp      file name of exp file to be read (char)" << "\n");
+	_pprintString_("      filkml      file name of kml file to be written (char)" << "\n");
+	_pprintString_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      central_meridian     central meridian (double, optional, but must specify with sp)" << "\n");
+	_pprintString_("      standard_parallel    standard parallel (double, optional, but must specify with cm)" << "\n");
+	_pprintString_("      holes       flag for treatment of multiple profiles (char, optional, 'yes' for holes))" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ret         return code (non-zero for warning)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [ret]=Exp2Kml('file.exp','file.kml', 1);" << "\n");
+	_pprintString_("      [ret]=Exp2Kml('file.exp','file.kml', 1,'central_meridian',45,'standard_parallel',70,'holes','yes');" << "\n");
+	_pprintString_("      [ret]=Exp2Kml('file.exp','file.kml',-1,'central_meridian', 0,'standard_parallel',71,'holes','yes');" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Exp2Kml){
@@ -67,7 +67,7 @@
 	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
 		options->Get(&cm,"central_meridian");
-		if (verbose) _printLine_("  cm=" << cm);
+		if (verbose) _printString_("  cm=" << cm << "\n");
 		options->Get(&sp,"standard_parallel");
-		if (verbose) _printLine_("  sp=" << sp);
+		if (verbose) _printString_("  sp=" << sp << "\n");
 	}
 
Index: /issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/ExpSimplify/ExpSimplify.cpp	(revision 15099)
@@ -5,18 +5,18 @@
 
 void ExpSimplifyUsage(void){/*{{{*/
-	_printLine_("ExpSimplify - Simplify Exp contour");
-	_printLine_("");
-	_printLine_("   Recursive Douglas-Peucker Polygon Simplification");
-	_printLine_("");
-	_printLine_("   Usage:");
-	_printLine_("      ExpSimplify(expfile,tol);");
-	_printLine_("      - expfile: name of the exp file");
-	_printLine_("      - tol:  tolerance (maximal euclidean distance allowed between the new line and a vertex)");
-	_printLine_("      Additional options:");
-	_printLine_("      - 'min': minimum number of vertices to save contours in exp file (default is 3)");
-	_printLine_("");
-	_printLine_("   Example:");
-	_printLine_("      ExpSimplify('file.exp',100);");
-	_printLine_("      ExpSimplify('file.exp',100,'remove1',false);");
+	_printString_("ExpSimplify - Simplify Exp contour" << "\n");
+	_printString_("" << "\n");
+	_printString_("   Recursive Douglas-Peucker Polygon Simplification" << "\n");
+	_printString_("" << "\n");
+	_printString_("   Usage:" << "\n");
+	_printString_("      ExpSimplify(expfile,tol);" << "\n");
+	_printString_("      - expfile: name of the exp file" << "\n");
+	_printString_("      - tol:  tolerance (maximal euclidean distance allowed between the new line and a vertex)" << "\n");
+	_printString_("      Additional options:" << "\n");
+	_printString_("      - 'min': minimum number of vertices to save contours in exp file (default is 3)" << "\n");
+	_printString_("" << "\n");
+	_printString_("   Example:" << "\n");
+	_printString_("      ExpSimplify('file.exp',100);" << "\n");
+	_printString_("      ExpSimplify('file.exp',100,'remove1',false);" << "\n");
 }/*}}}*/
 void simplify(Contour<double>* contour,bool* flags,int ind0,int ind1,double tolerance){/*{{{*/
@@ -145,5 +145,5 @@
 		x       = contour->x;
 		y       = contour->y;
-		_printLine_("   Initial number of vertices in contour #"<<counter+1<<": "<<nods);
+		_printString_("   Initial number of vertices in contour #"<<counter+1<<": "<<nods << "\n");
 
 		/*Allocate flags (1=keep, 0=remove)*/
@@ -183,5 +183,5 @@
 		/*Do we save new profile?*/
 		if(newnods>=minimumvertices){
-			_printLine_("   Final   number of vertices in contour #"<<counter+1<<": "<<newnods);
+			_printString_("   Final   number of vertices in contour #"<<counter+1<<": "<<newnods << "\n");
 			newcontour       = xNew<Contour<double> >(1);
 			newcontour->nods = newnods;
@@ -202,5 +202,5 @@
 		}
 		else{
-			_printLine_("   Final   number of vertices in contour #"<<counter+1<<": "<<newnods<<" (not saved)");
+			_printString_("   Final   number of vertices in contour #"<<counter+1<<": "<<newnods<<" (not saved)" << "\n");
 		}
 
@@ -208,6 +208,6 @@
 		xDelete<bool>(flags);
 	}
-	_printLine_("   Initial number of contours: "<<oldcontours->Size());
-	_printLine_("   Final   number of contours: "<<newcontours->Size());
+	_printString_("   Initial number of contours: "<<oldcontours->Size() << "\n");
+	_printString_("   Final   number of contours: "<<newcontours->Size() << "\n");
 
 	/*Write data: */
Index: /issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/HoleFiller/HoleFiller.cpp	(revision 15099)
@@ -13,11 +13,11 @@
 
 void HoleFillerUsage(void){/*{{{*/
-	_printLine_("   HoleFiller usage:");
-	_printLine_("   [image_out]=HoleFiller(image_in,smooth);\n");
-	_printLine_("   where:");
-	_printLine_("      image_in in double format");
-	_printLine_("      smooth: 1 to smooth with a box filer, 0 to leave data raw");
-	_printLine_("      image_out in double format");
-	_printLine_("");
+	_printString_("   HoleFiller usage:" << "\n");
+	_printString_("   [image_out]=HoleFiller(image_in,smooth);" << "\n");
+	_printString_("   where:" << "\n");
+	_printString_("      image_in in double format" << "\n");
+	_printString_("      smooth: 1 to smooth with a box filer, 0 to leave data raw" << "\n");
+	_printString_("      image_out in double format" << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(HoleFiller){
Index: /issm/trunk-jpl/src/wrappers/InternalFront/InternalFront.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/InternalFront/InternalFront.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/InternalFront/InternalFront.cpp	(revision 15099)
@@ -6,7 +6,7 @@
 
 void InternalFrontUsage(void) {/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("   usage: icefront = " << __FUNCT__ << "(md);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: icefront = " << __FUNCT__ << "(md);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(InternalFront){
Index: /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.cpp	(revision 15099)
@@ -6,22 +6,22 @@
 
 void InterpFromGridToMeshUsage(void){/*{{{*/
-	_pprintLine_("INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points");
-	_pprintLine_("");
-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
-	_pprintLine_("   defined on a grid onto a list of points");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      data_mesh=InterpFromGridToMesh(x,y,data,x_mesh,y_mesh,default_value);");
-	_pprintLine_("");
-	_pprintLine_("      data: matrix holding the data to be interpolated onto the mesh.");
-	_pprintLine_("      x,y: coordinates of matrix data. (x and y must be in increasing order)");
-	_pprintLine_("      x_mesh,y_mesh: coordinates of the points onto which we interpolate.");
-	_pprintLine_("      default_value: default value if no data is found (holes).");
-	_pprintLine_("      data_mesh: vector of mesh interpolated data.");
-	_pprintLine_("");
-	_pprintLine_("   Example:");
-	_pprintLine_("      load('velocities.mat');");
-	_pprintLine_("      md.inversion.vx_obs=InterpFromGridToMesh(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);");
-	_pprintLine_("");
+	_pprintString_("INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This function is a multi-threaded mex file that interpolates a field" << "\n");
+	_pprintString_("   defined on a grid onto a list of points" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      data_mesh=InterpFromGridToMesh(x,y,data,x_mesh,y_mesh,default_value);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      data: matrix holding the data to be interpolated onto the mesh." << "\n");
+	_pprintString_("      x,y: coordinates of matrix data. (x and y must be in increasing order)" << "\n");
+	_pprintString_("      x_mesh,y_mesh: coordinates of the points onto which we interpolate." << "\n");
+	_pprintString_("      default_value: default value if no data is found (holes)." << "\n");
+	_pprintString_("      data_mesh: vector of mesh interpolated data." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Example:" << "\n");
+	_pprintString_("      load('velocities.mat');" << "\n");
+	_pprintString_("      md.inversion.vx_obs=InterpFromGridToMesh(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(InterpFromGridToMesh){
Index: /issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/InterpFromMesh2d/InterpFromMesh2d.cpp	(revision 15099)
@@ -6,17 +6,17 @@
 
 void InterpFromMesh2dUsage(void){/*{{{*/
-	_pprintLine_("   usage:");
-	_pprintLine_("         data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime);\n");
-	_pprintLine_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value);\n");
-	_pprintLine_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value,contourname);\n");
-	_pprintLine_("   where:");
-	_pprintLine_("      x,y: coordinates of the nodes where data is defined");
-	_pprintLine_("      index: index of the mesh where data is defined");
-	_pprintLine_("      data - vector holding the data to be interpolated onto the points.");
-	_pprintLine_("      x_prime,y_prime: coordinates of the mesh vertices onto which we interpolate.");
-	_pprintLine_("      default_value: a scalar or vector of size length(x_prime).");
-	_pprintLine_("      contourname: linear interpolation will happen on all x_interp,y_interp inside the contour, default value will be adopted on the rest of the mesh.");
-	_pprintLine_("      data_prime:  vector of prime interpolated data.");
-	_pprintLine_("");
+	_pprintString_("   usage:" << "\n");
+	_pprintString_("         data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime);" << "\n");
+	_pprintString_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value);" << "\n");
+	_pprintString_("      or data_prime=InterpFromMesh2d(index,x,y,data,x_prime,y_prime,default_value,contourname);" << "\n");
+	_pprintString_("   where:" << "\n");
+	_pprintString_("      x,y: coordinates of the nodes where data is defined" << "\n");
+	_pprintString_("      index: index of the mesh where data is defined" << "\n");
+	_pprintString_("      data - vector holding the data to be interpolated onto the points." << "\n");
+	_pprintString_("      x_prime,y_prime: coordinates of the mesh vertices onto which we interpolate." << "\n");
+	_pprintString_("      default_value: a scalar or vector of size length(x_prime)." << "\n");
+	_pprintString_("      contourname: linear interpolation will happen on all x_interp,y_interp inside the contour, default value will be adopted on the rest of the mesh." << "\n");
+	_pprintString_("      data_prime:  vector of prime interpolated data." << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(InterpFromMesh2d){
@@ -113,9 +113,9 @@
 		/* Debugging of contours :{{{1*/
 		/*for(i=0;i<numcontours;i++){
-		  _printLine_("\nContour echo: contour number  " << i+1 << " / " << numcontours);
+		  _printString_("\nContour echo: contour number  " << i+1 << " / " << numcontours << "\n");
 		  contouri=*(contours+i);
-		  _printLine_("   Number of vertices " << contouri->nods);
+		  _printString_("   Number of vertices " << contouri->nods << "\n");
 		  for (j=0;j<contouri->nods;j++){
-		  _printLine_("   " << *(contouri->x+j) << "f " << *(contouri->y+j) << "f");
+		  _printString_("   " << *(contouri->x+j) << "f " << *(contouri->y+j) << "f" << "\n");
 		  }
 		  }*/
Index: /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/InterpFromMeshToGrid/InterpFromMeshToGrid.cpp	(revision 15099)
@@ -6,17 +6,17 @@
 
 void InterpFromMeshToGridUsage(void){/*{{{*/
-	_pprintLine_("INTERPFROMMESHTOGRID - interpolation of a data defined on a mesh onto a grid");
-	_pprintLine_("");
-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
-	_pprintLine_("   defined on a triangular mesh onto a regular grid");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [x_m,y_m,griddata]=InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value)");
-	_pprintLine_("");
-	_pprintLine_("      index,x,y: delaunay triangulation defining the mesh.");
-	_pprintLine_("      meshdata: vertex values of data to be interpolated.");
-	_pprintLine_("      xmin,ymax,posting,nlines,ncols: parameters that define the grid");
-	_pprintLine_("      default_value: value of points located out of the mesh.");
-	_pprintLine_("");
+	_pprintString_("INTERPFROMMESHTOGRID - interpolation of a data defined on a mesh onto a grid" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This function is a multi-threaded mex file that interpolates a field" << "\n");
+	_pprintString_("   defined on a triangular mesh onto a regular grid" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [x_m,y_m,griddata]=InterpFromMeshToGrid(index,x,y,data,xmin,ymax,xposting,yposting,nlines,ncols,default_value)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      index,x,y: delaunay triangulation defining the mesh." << "\n");
+	_pprintString_("      meshdata: vertex values of data to be interpolated." << "\n");
+	_pprintString_("      xmin,ymax,posting,nlines,ncols: parameters that define the grid" << "\n");
+	_pprintString_("      default_value: value of points located out of the mesh." << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(InterpFromMeshToGrid){
Index: /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp	(revision 15099)
@@ -5,26 +5,26 @@
 
 void InterpFromMeshToMesh2dUsage(void){/*{{{*/
-	_pprintLine_("INTERFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point");
-	_pprintLine_("");
-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
-	_pprintLine_("   defined on a Delaunay triangulation onto a list of point");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("         data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp);");
-	_pprintLine_("      or data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp,OPTIONS);");
-	_pprintLine_("");
-	_pprintLine_("      index             : index of the mesh where data is defined");
-	_pprintLine_("      x,y               : coordinates of the nodes where data is defined");
-	_pprintLine_("      data              : matrix holding the data to be interpolated onto the mesh. (one column per field)");
-	_pprintLine_("      x_interp,y_interp : coordinates of the points onto which we interpolate.");
-	_pprintLine_("      data_interp       : vector of mesh interpolated data.");
-	_pprintLine_("      Available options :");
-	_pprintLine_("         - 'default' : default value if point is outsite of triangulation (instead of linear interolation)");
-	_pprintLine_("");
-	_pprintLine_("   Example:");
-	_pprintLine_("      load('temperature.mat');");
-	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y);");
-	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y,'default',253);");
-	_pprintLine_("");
+	_pprintString_("INTERFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This function is a multi-threaded mex file that interpolates a field" << "\n");
+	_pprintString_("   defined on a Delaunay triangulation onto a list of point" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("         data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp);" << "\n");
+	_pprintString_("      or data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp,OPTIONS);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      index             : index of the mesh where data is defined" << "\n");
+	_pprintString_("      x,y               : coordinates of the nodes where data is defined" << "\n");
+	_pprintString_("      data              : matrix holding the data to be interpolated onto the mesh. (one column per field)" << "\n");
+	_pprintString_("      x_interp,y_interp : coordinates of the points onto which we interpolate." << "\n");
+	_pprintString_("      data_interp       : vector of mesh interpolated data." << "\n");
+	_pprintString_("      Available options :" << "\n");
+	_pprintString_("         - 'default' : default value if point is outsite of triangulation (instead of linear interolation)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Example:" << "\n");
+	_pprintString_("      load('temperature.mat');" << "\n");
+	_pprintString_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y);" << "\n");
+	_pprintString_("      md.initialization.temperature=InterpFromMeshToMesh2d(index,x,y,temperature,md.mesh.x,md.mesh.y,'default',253);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(InterpFromMeshToMesh2d){
Index: /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/InterpFromMeshToMesh3d/InterpFromMeshToMesh3d.cpp	(revision 15099)
@@ -6,23 +6,23 @@
 
 void InterpFromMeshToMesh3dUsage(void){/*{{{*/
-	_pprintLine_("INTERPFROMMESHTOMESH3D - interpolation from a 3d hexahedron mesh onto a list of point");
-	_pprintLine_("");
-	_pprintLine_("   This function is a multi-threaded mex file that interpolates a field");
-	_pprintLine_("   defined on a triangular mesh onto a list of point");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      data_prime=InterpFromMeshToMesh3d(index,x,y,z,data,x_prime,y_prime,z_prime,default_value);");
-	_pprintLine_("");
-	_pprintLine_("      index: index of the mesh where data is defined");
-	_pprintLine_("      x,y,z: coordinates of the nodes where data is defined");
-	_pprintLine_("      data: matrix holding the data to be interpolated onto the mesh.");
-	_pprintLine_("      x_prime,y_prime,z_prime: coordinates of the points onto which we interpolate.");
-	_pprintLine_("      default_value: default value if no data is found (holes).");
-	_pprintLine_("      data_prime: vector of mesh interpolated data.");
-	_pprintLine_("");
-	_pprintLine_("   Example:");
-	_pprintLine_("      load('temperature.mat');");
-	_pprintLine_("      md.initialization.temperature=InterpFromMeshToMesh3d(index,x,y,z,temperature,md.mesh.x,md.mesh.y,md.mesh.z,253);");
-	_pprintLine_("");
+	_pprintString_("INTERPFROMMESHTOMESH3D - interpolation from a 3d hexahedron mesh onto a list of point" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This function is a multi-threaded mex file that interpolates a field" << "\n");
+	_pprintString_("   defined on a triangular mesh onto a list of point" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      data_prime=InterpFromMeshToMesh3d(index,x,y,z,data,x_prime,y_prime,z_prime,default_value);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      index: index of the mesh where data is defined" << "\n");
+	_pprintString_("      x,y,z: coordinates of the nodes where data is defined" << "\n");
+	_pprintString_("      data: matrix holding the data to be interpolated onto the mesh." << "\n");
+	_pprintString_("      x_prime,y_prime,z_prime: coordinates of the points onto which we interpolate." << "\n");
+	_pprintString_("      default_value: default value if no data is found (holes)." << "\n");
+	_pprintString_("      data_prime: vector of mesh interpolated data." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Example:" << "\n");
+	_pprintString_("      load('temperature.mat');" << "\n");
+	_pprintString_("      md.initialization.temperature=InterpFromMeshToMesh3d(index,x,y,z,temperature,md.mesh.x,md.mesh.y,md.mesh.z,253);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(InterpFromMeshToMesh3d){
Index: /issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/KMLFileRead/KMLFileRead.cpp	(revision 15099)
@@ -5,23 +5,23 @@
 
 void KMLFileReadUsage(void){/*{{{*/
-	_pprintLine_("KMLFileRead - KML file reader module:");
-	_pprintLine_("");
-	_pprintLine_("   This module reads a KML file.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [ierror]=KMLFileRead(kmlfile,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      kmlfile      file name of kml file to be read (char)");
-	_pprintLine_("");
-	_pprintLine_("      echo         echo command (char, optional, 'off'/'on')");
-	_pprintLine_("      deepecho     deep echo command (char, optional, 'off'/'on')");
-	_pprintLine_("      write        write command (char, optional, 'off'/'stdout'/kmlfile)");
-	_pprintLine_("");
-	_pprintLine_("      ierror       return code (non-zero for error)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [ierror]=KMLFileRead('file.kml','deepecho','on');");
-	_pprintLine_("      [ierror]=KMLFileRead('filin.kml','echo','on','write','filout.kml');");
-	_pprintLine_("");
+	_pprintString_("KMLFileRead - KML file reader module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module reads a KML file." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [ierror]=KMLFileRead(kmlfile,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      kmlfile      file name of kml file to be read (char)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      echo         echo command (char, optional, 'off'/'on')" << "\n");
+	_pprintString_("      deepecho     deep echo command (char, optional, 'off'/'on')" << "\n");
+	_pprintString_("      write        write command (char, optional, 'off'/'stdout'/kmlfile)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ierror       return code (non-zero for error)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [ierror]=KMLFileRead('file.kml','deepecho','on');" << "\n");
+	_pprintString_("      [ierror]=KMLFileRead('filin.kml','echo','on','write','filout.kml');" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(KMLFileRead){
@@ -84,12 +84,12 @@
 	if (!strlen(filnam)) strcpy(filnam,"stdout");
 
-	if (verbose) _printLine_("Opening file \"" << filnam << "\".");
+	if (verbose) _printString_("Opening file \"" << filnam << "\"." << "\n");
 	fidi=fopen(filnam,"r");
 
 	/* Run core computations: */
-	if (verbose) _printLine_("Calling core:");
+	if (verbose) _printString_("Calling core:" << "\n");
 	kobj=KMLFileReadx(fidi);
 
-	if (verbose) _printLine_("Closing file \"" << filnam << "\".");
+	if (verbose) _printString_("Closing file \"" << filnam << "\"." << "\n");
 	fclose(fidi);
 
@@ -104,8 +104,8 @@
 			}
 			else {
-				if (verbose) _printLine_("Opening file \"" << write << "\".");
+				if (verbose) _printString_("Opening file \"" << write << "\"." << "\n");
 				fido=fopen(write,"w");
 				kobj->Write(fido,"");
-				if (verbose) _printLine_("Closing file \"" << write << "\".");
+				if (verbose) _printString_("Closing file \"" << write << "\"." << "\n");
 				ierror=fclose(fido);
 			}
Index: /issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/KMLMeshWrite/KMLMeshWrite.cpp	(revision 15099)
@@ -5,27 +5,27 @@
 
 void KMLMeshWriteUsage(void){/*{{{*/
-	_pprintLine_("KMLMeshWrite - KML mesh writer module:");
-	_pprintLine_("");
-	_pprintLine_("   This module writes the mesh of a model as KML polygons into the specified KML file.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      ierror=KMLMeshWrite(name,notes,elem,nodecon,lat,long,part,data,cmap,kmlfile);");
-	_pprintLine_("");
-	_pprintLine_("      name       model name (string, may be empty)");
-	_pprintLine_("      notes      model notes (string or cell array of strings, may be empty)");
-	_pprintLine_("      elem       elements (double array)");
-	_pprintLine_("      nodecon    nodal connectivity array (double array, may be empty)");
-	_pprintLine_("      lat        nodal latititudes (double vector)");
-	_pprintLine_("      long       nodal longitudes (double vector)");
-	_pprintLine_("      part       nodal partitions (double vector, may be empty)");
-	_pprintLine_("      data       nodal or element data (double vector, may be empty)");
-	_pprintLine_("      cmap       color map (double nx3 array, may be empty)");
-	_pprintLine_("      kmlfile    KML file name (string)");
-	_pprintLine_("");
-	_pprintLine_("      ierror     error flag (double, non-zero for error)");
-	_pprintLine_("");
-	_pprintLine_("   Example:");
-	_pprintLine_("      KMLMeshWrite(md.name,md.notes,md.elements,md.nodeconnectivity,md.lat,md.long,md.part,md.fm_criterion,options.cmap,filekml);");
-	_pprintLine_("");
+	_pprintString_("KMLMeshWrite - KML mesh writer module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module writes the mesh of a model as KML polygons into the specified KML file." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      ierror=KMLMeshWrite(name,notes,elem,nodecon,lat,long,part,data,cmap,kmlfile);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      name       model name (string, may be empty)" << "\n");
+	_pprintString_("      notes      model notes (string or cell array of strings, may be empty)" << "\n");
+	_pprintString_("      elem       elements (double array)" << "\n");
+	_pprintString_("      nodecon    nodal connectivity array (double array, may be empty)" << "\n");
+	_pprintString_("      lat        nodal latititudes (double vector)" << "\n");
+	_pprintString_("      long       nodal longitudes (double vector)" << "\n");
+	_pprintString_("      part       nodal partitions (double vector, may be empty)" << "\n");
+	_pprintString_("      data       nodal or element data (double vector, may be empty)" << "\n");
+	_pprintString_("      cmap       color map (double nx3 array, may be empty)" << "\n");
+	_pprintString_("      kmlfile    KML file name (string)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ierror     error flag (double, non-zero for error)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Example:" << "\n");
+	_pprintString_("      KMLMeshWrite(md.name,md.notes,md.elements,md.nodeconnectivity,md.lat,md.long,md.part,md.fm_criterion,options.cmap,filekml);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(KMLMeshWrite){
Index: /issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/KMLOverlay/KMLOverlay.cpp	(revision 15099)
@@ -5,23 +5,23 @@
 
 void KMLOverlayUsage(void){/*{{{*/
-	_pprintLine_("KMLOverlay - KML file overlay module:");
-	_pprintLine_("");
-	_pprintLine_("   This module reads a list of image files and writes a KML or KMZ overlay file.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      ierror=KMLOverlay(kmlfile,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      kmlfile     KML or KMZ file name (string)");
-	_pprintLine_("");
-	_pprintLine_("      lataxis     latitude axis (double vector [south north], required)");
-	_pprintLine_("      longaxis    longitude axis (double vector [west east], required)");
-	_pprintLine_("      images      relative or http image file names (string or array of strings or cell array of strings, required)");
-	_pprintLine_("      zip         flag to zip the doc.kml and image files into kmzfile (double, non-zero for kmz)");
-	_pprintLine_("");
-	_pprintLine_("      ierror     error flag (double, non-zero for error)");
-	_pprintLine_("");
-	_pprintLine_("   Example:");
-	_pprintLine_("      KMLOverlay(kmlfile,'lataxis',[south north],'longaxis',[west east],'images',{'file1.png','http://issm/file2.png'},'zip',1);");
-	_pprintLine_("");
+	_pprintString_("KMLOverlay - KML file overlay module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module reads a list of image files and writes a KML or KMZ overlay file." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      ierror=KMLOverlay(kmlfile,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      kmlfile     KML or KMZ file name (string)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      lataxis     latitude axis (double vector [south north], required)" << "\n");
+	_pprintString_("      longaxis    longitude axis (double vector [west east], required)" << "\n");
+	_pprintString_("      images      relative or http image file names (string or array of strings or cell array of strings, required)" << "\n");
+	_pprintString_("      zip         flag to zip the doc.kml and image files into kmzfile (double, non-zero for kmz)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ierror     error flag (double, non-zero for error)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Example:" << "\n");
+	_pprintString_("      KMLOverlay(kmlfile,'lataxis',[south north],'longaxis',[west east],'images',{'file1.png','http://issm/file2.png'},'zip',1);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(KMLOverlay){
@@ -63,11 +63,11 @@
 
 	options->Get(&lataxis ,&nlat ,(char*)"lataxis");
-	if (verbose && lataxis) for (i=0; i<nlat; i++) _printLine_("  lataxis [" << i << "]=" << lataxis[i]);
+	if (verbose && lataxis) for (i=0; i<nlat; i++) _printString_("  lataxis [" << i << "]=" << lataxis[i] << "\n");
 	options->Get(&longaxis,&nlong,(char*)"longaxis");
-	if (verbose && longaxis) for (i=0; i<nlong; i++) _printLine_("  longaxis[" << i << "]=" << longaxis[i]);
+	if (verbose && longaxis) for (i=0; i<nlong; i++) _printString_("  longaxis[" << i << "]=" << longaxis[i] << "\n");
 	options->Get(&pimages,&nimages,(char*)"images");
-	if (verbose && pimages) for (i=0; i<nimages; i++) _printLine_("  pimages[" << i << "]=\"" << pimages[i] << "\"");
+	if (verbose && pimages) for (i=0; i<nimages; i++) _printString_("  pimages[" << i << "]=\"" << pimages[i] << "\"" << "\n");
 	options->Get(&dzip,(char*)"zip",0.);
-	if (verbose) _printLine_("  dzip=" << dzip);
+	if (verbose) _printString_("  dzip=" << dzip << "\n");
 
 	/*some checks*/
@@ -84,12 +84,12 @@
 	if(!strlen(filkml)) strcpy(filkml,"stdout");
 
-	if(verbose) _printLine_("Opening kml overlay file \"" << filkml << "\".");
+	if(verbose) _printString_("Opening kml overlay file \"" << filkml << "\"." << "\n");
 	fid=fopen(filkml,"w");
 
 	/* Run core computations: */
-	if (verbose) _printLine_("Calling core:");
+	if (verbose) _printString_("Calling core:" << "\n");
 	KMLOverlayx(&ierror,lataxis,longaxis,nimages,pimages,fid);
 
-	if (verbose) _printLine_("Closing file \"" << filkml << "\".");
+	if (verbose) _printString_("Closing file \"" << filkml << "\"." << "\n");
 	fclose(fid);
 
@@ -108,6 +108,6 @@
 				strcat(czip,pimages[i]);
 			}
-		if (verbose) _printLine_("Zipping file \"" << filkmz << "\".");
-		if (verbose) _printLine_(czip);
+		if (verbose) _printString_("Zipping file \"" << filkmz << "\"." << "\n");
+		if (verbose) _printString_(czip << "\n");
 
 		if (mexEvalString(czip)) _error_("Error zipping file \"" << filkmz << "\".");
Index: /issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Kml2Exp/Kml2Exp.cpp	(revision 15099)
@@ -5,25 +5,25 @@
 
 void Kml2ExpUsage(void){/*{{{*/
-	_pprintLine_("Kml2Exp - kml to exp file conversion module:");
-	_pprintLine_("");
-	_pprintLine_("   This module converts a file from kml to exp format.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [ret]=Kml2Exp(filexp,filkml,sgn,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      filkml      file name of kml file to be read (char)");
-	_pprintLine_("      filexp      file name of exp file to be written (char)");
-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
-	_pprintLine_("");
-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
-	_pprintLine_("");
-	_pprintLine_("      ret         return code (non-zero for warning)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp', 1);");
-	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp', 1,'central_meridian',45,'standard_parallel',70);");
-	_pprintLine_("      [ret]=Kml2Exp('file.kml','file.exp',-1,'central_meridian', 0,'standard_parallel',71);");
-	_pprintLine_("");
+	_pprintString_("Kml2Exp - kml to exp file conversion module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module converts a file from kml to exp format." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [ret]=Kml2Exp(filexp,filkml,sgn,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      filkml      file name of kml file to be read (char)" << "\n");
+	_pprintString_("      filexp      file name of exp file to be written (char)" << "\n");
+	_pprintString_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      central_meridian     central meridian (double, optional, but must specify with sp)" << "\n");
+	_pprintString_("      standard_parallel    standard parallel (double, optional, but must specify with cm)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ret         return code (non-zero for warning)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [ret]=Kml2Exp('file.kml','file.exp', 1);" << "\n");
+	_pprintString_("      [ret]=Kml2Exp('file.kml','file.exp', 1,'central_meridian',45,'standard_parallel',70);" << "\n");
+	_pprintString_("      [ret]=Kml2Exp('file.kml','file.exp',-1,'central_meridian', 0,'standard_parallel',71);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Kml2Exp){
@@ -60,7 +60,7 @@
 	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
 		options->Get(&cm,"central_meridian");
-		if (verbose) _printLine_("  cm=" << cm);
+		if (verbose) _printString_("  cm=" << cm << "\n");
 		options->Get(&sp,"standard_parallel");
-		if (verbose) _printLine_("  sp=" << sp);
+		if (verbose) _printString_("  sp=" << sp << "\n");
 	}
 
Index: /issm/trunk-jpl/src/wrappers/Kriging/Kriging.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Kriging/Kriging.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Kriging/Kriging.cpp	(revision 15099)
@@ -9,22 +9,22 @@
 	num=_NUMTHREADS_;
 #endif
-	_pprintLine_("");
-	_pprintLine_("   usage: predictions=" << __FUNCT__ << "(x,y,observations,x_interp,y_interp,'options');");
-	_pprintLine_("   available options:");
-	_pprintLine_("      -'model': Available variogram models 'gaussian' (default),'spherical','power','exponential'");
-	_pprintLine_("         -'nugget': nugget effect (default 0.2)");
-	_pprintLine_("         -'range':  for gaussian, spherical and exponential models (default sqrt(3))");
-	_pprintLine_("         -'sill':   for gaussian, spherical and exponential models (default 1)");
-	_pprintLine_("         -'slope':  for power model (default 1)");
-	_pprintLine_("         -'power':  for power model (default 1)");
-	_pprintLine_("      -'searchradius': search radius for each prediction (default is observations span)");
-	_pprintLine_("      -'boxlength':    minimum length of quadtree boxes (useful to decrease the number of observations)");
-	_pprintLine_("      -'maxdata':      minimum number of observations for a prediction (default is 50)");
-	_pprintLine_("      -'mindata':      maximum number of observations for a prediction (default is 1)");
-	_pprintLine_("      -'maxtrimming':  maximum trimming value (default is -1.e+21)");
-	_pprintLine_("      -'mintrimming':  minimum trimming value (default is +1.e+21)");
-	_pprintLine_("      -'minspacing':   minimum distance between observation (default is 0.01)");
-	_pprintLine_("      -'numthreads':   number of threads, default is "<<num);
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: predictions=" << __FUNCT__ << "(x,y,observations,x_interp,y_interp,'options');" << "\n");
+	_pprintString_("   available options:" << "\n");
+	_pprintString_("      -'model': Available variogram models 'gaussian' (default),'spherical','power','exponential'" << "\n");
+	_pprintString_("         -'nugget': nugget effect (default 0.2)" << "\n");
+	_pprintString_("         -'range':  for gaussian, spherical and exponential models (default sqrt(3))" << "\n");
+	_pprintString_("         -'sill':   for gaussian, spherical and exponential models (default 1)" << "\n");
+	_pprintString_("         -'slope':  for power model (default 1)" << "\n");
+	_pprintString_("         -'power':  for power model (default 1)" << "\n");
+	_pprintString_("      -'searchradius': search radius for each prediction (default is observations span)" << "\n");
+	_pprintString_("      -'boxlength':    minimum length of quadtree boxes (useful to decrease the number of observations)" << "\n");
+	_pprintString_("      -'maxdata':      minimum number of observations for a prediction (default is 50)" << "\n");
+	_pprintString_("      -'mindata':      maximum number of observations for a prediction (default is 1)" << "\n");
+	_pprintString_("      -'maxtrimming':  maximum trimming value (default is -1.e+21)" << "\n");
+	_pprintString_("      -'mintrimming':  minimum trimming value (default is +1.e+21)" << "\n");
+	_pprintString_("      -'minspacing':   minimum distance between observation (default is 0.01)" << "\n");
+	_pprintString_("      -'numthreads':   number of threads, default is "<<num << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Kriging){
Index: /issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Ll2xy/Ll2xy.cpp	(revision 15099)
@@ -5,26 +5,26 @@
 
 void Ll2xyUsage(void){/*{{{*/
-	_pprintLine_("Ll2xy - lat/long to x/y coordinate transformation module:");
-	_pprintLine_("");
-	_pprintLine_("   This module transforms lat/long to x/y coordinates.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [x,y]=Ll2xy(lat,lon,sgn,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      lat         latitude coordinates (double vector)");
-	_pprintLine_("      lon         longitude coordinates (double vector)");
-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
-	_pprintLine_("");
-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
-	_pprintLine_("");
-	_pprintLine_("      x           x coordinates (double vector)");
-	_pprintLine_("      y           y coordinates (double vector)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [x,y]=Ll2xy(lat,lon, 1);");
-	_pprintLine_("      [x,y]=Ll2xy(lat,lon, 1,'central_meridian',45,'standard_parallel',70);");
-	_pprintLine_("      [x,y]=Ll2xy(lat,lon,-1,'central_meridian', 0,'standard_parallel',71);");
-	_pprintLine_("");
+	_pprintString_("Ll2xy - lat/long to x/y coordinate transformation module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module transforms lat/long to x/y coordinates." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [x,y]=Ll2xy(lat,lon,sgn,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      lat         latitude coordinates (double vector)" << "\n");
+	_pprintString_("      lon         longitude coordinates (double vector)" << "\n");
+	_pprintString_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      central_meridian     central meridian (double, optional, but must specify with sp)" << "\n");
+	_pprintString_("      standard_parallel    standard parallel (double, optional, but must specify with cm)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      x           x coordinates (double vector)" << "\n");
+	_pprintString_("      y           y coordinates (double vector)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [x,y]=Ll2xy(lat,lon, 1);" << "\n");
+	_pprintString_("      [x,y]=Ll2xy(lat,lon, 1,'central_meridian',45,'standard_parallel',70);" << "\n");
+	_pprintString_("      [x,y]=Ll2xy(lat,lon,-1,'central_meridian', 0,'standard_parallel',71);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Ll2xy){
@@ -64,11 +64,11 @@
 	if(options->GetOption("central_meridian") || options->GetOption("standard_parallel")){
 		options->Get(&cm,"central_meridian");
-		if (verbose) _printLine_("  cm=" << cm);
+		if (verbose) _printString_("  cm=" << cm << "\n");
 		options->Get(&sp,"standard_parallel");
-		if (verbose) _printLine_("  sp=" << sp);
+		if (verbose) _printString_("  sp=" << sp << "\n");
 	}
 
 	/*some checks*/
-	if (verbose) _printLine_("Checking inputs:");
+	if (verbose) _printString_("Checking inputs:" << "\n");
 	if (nlat != nlon){_error_("Must have same number of lat[" << nlat << "] and lon[" << nlon << "] coordinates.");}
 	else                ncoord=nlat;
Index: /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/MeshPartition/MeshPartition.cpp	(revision 15099)
@@ -6,10 +6,10 @@
 
 void MeshPartitionUsage(void){/*{{{*/
-	_printLine_("   usage:");
+	_printString_("   usage:" << "\n");
 	_printString_("   [element_partitioning,node_partitioning]=MeshPartition(md.mesh,numpartitions)");
-	_printLine_("   where:");
-	_printLine_("      element_partitioning is a vector of partitioning area numbers, for every element.");
-	_printLine_("      node_partitioning is a vector of partitioning area numbers, for every node.");
-	_printLine_("");
+	_printString_("   where:" << "\n");
+	_printString_("      element_partitioning is a vector of partitioning area numbers, for every element." << "\n");
+	_printString_("      node_partitioning is a vector of partitioning area numbers, for every node." << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(MeshPartition){
Index: /issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/MeshProfileIntersection/MeshProfileIntersection.cpp	(revision 15099)
@@ -19,14 +19,14 @@
 
 void MeshProfileIntersectionUsage(void){/*{{{*/
-	_printLine_("   usage:");
-	_printLine_("   [segments]=MeshProfileIntersection(index,x,y,filename);");
-	_printLine_("   where:");
-	_printLine_("   input:");
-	_printLine_("        index,x,y is a triangulation");
-	_printLine_("        filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)");
-	_printLine_("   output:");
-	_printLine_("        segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremities for a segment ");
-	_printLine_("        belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the ");
-	_printLine_("        mesh.");
+	_printString_("   usage:" << "\n");
+	_printString_("   [segments]=MeshProfileIntersection(index,x,y,filename);" << "\n");
+	_printString_("   where:" << "\n");
+	_printString_("   input:" << "\n");
+	_printString_("        index,x,y is a triangulation" << "\n");
+	_printString_("        filename: name of Argus style .exp file containing the segments (can be groups of disconnected segments)" << "\n");
+	_printString_("   output:" << "\n");
+	_printString_("        segments: array made of x1,y1,x2,y2,element_id lines (x1,y1) and (x2,y2) are segment extremities for a segment " << "\n");
+	_printString_("        belonging to the elemnt_id element. there are as many lines in segments as there are segments intersecting the " << "\n");
+	_printString_("        mesh." << "\n");
 }/*}}}*/
 WRAPPER(MeshProfileIntersection){
Index: /issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/NodeConnectivity/NodeConnectivity.cpp	(revision 15099)
@@ -6,7 +6,7 @@
 
 void NodeConnectivityUsage(void){/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("   usage: connectivity = " << __FUNCT__ << "(elements, numnodes);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: connectivity = " << __FUNCT__ << "(elements, numnodes);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(NodeConnectivity){
Index: /issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/PointCloudFindNeighbors/PointCloudFindNeighbors.cpp	(revision 15099)
@@ -6,12 +6,12 @@
 
 void PointCloudFindNeighborsUsage(void){/*{{{*/
-	_printLine_("   usage:");
-	_printLine_("   [flags]=PointCloudFindNeighbors(x,y,mindistance,multithread);\n");
-	_printLine_("   where:");
-	_printLine_("      x,y: list of points.");
-	_printLine_("      mindistance: minimum distance that should exist between points in the cloud.");
-	_printLine_("      multithread: run multithreaded or not. with multithreads, flags can get 1 and 2 values in duplicates.");
-	_printLine_("      flags: array of flags (flag==1 means point is within mindistance of another point)");
-	_printLine_("");
+	_printString_("   usage:" << "\n");
+	_printString_("   [flags]=PointCloudFindNeighbors(x,y,mindistance,multithread);" << "\n");
+	_printString_("   where:" << "\n");
+	_printString_("      x,y: list of points." << "\n");
+	_printString_("      mindistance: minimum distance that should exist between points in the cloud." << "\n");
+	_printString_("      multithread: run multithreaded or not. with multithreads, flags can get 1 and 2 values in duplicates." << "\n");
+	_printString_("      flags: array of flags (flag==1 means point is within mindistance of another point)" << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(PointCloudFindNeighbors){
Index: /issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/PropagateFlagsFromConnectivity/PropagateFlagsFromConnectivity.cpp	(revision 15099)
@@ -6,7 +6,7 @@
 
 void PropagateFlagsFromConnectivityUsage(void) {/*{{{*/
-	_printLine_("");
-	_printLine_("   usage: [pool] = " << __FUNCT__ << "(connectivity,pool,index,flags);");;
-	_printLine_("");
+	_printString_("" << "\n");
+	_printString_("   usage: [pool] = " << __FUNCT__ << "(connectivity,pool,index,flags);" << "\n");;
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(PropagateFlagsFromConnectivity){
Index: /issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Shp2Exp/Shp2Exp.cpp	(revision 15099)
@@ -12,19 +12,19 @@
 
 void Shp2ExpUsage(void){/*{{{*/
-	_pprintLine_("Shp2Exp - shp to exp file conversion module:");
-	_pprintLine_("");
-	_pprintLine_("   This module converts a file from shp to exp format.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [ret]=Shp2Exp(filshp,filexp,sgn,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      filshp      file name of shp file to be read (char, extension optional)");
-	_pprintLine_("      filexp      file name of exp file to be written (char)");
-	_pprintLine_("");
-	_pprintLine_("      ret         return code (non-zero for warning)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [ret]=Shp2Exp('file.shp','file.exp');");
-	_pprintLine_("");
+	_pprintString_("Shp2Exp - shp to exp file conversion module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module converts a file from shp to exp format." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [ret]=Shp2Exp(filshp,filexp,sgn,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      filshp      file name of shp file to be read (char, extension optional)" << "\n");
+	_pprintString_("      filexp      file name of exp file to be written (char)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ret         return code (non-zero for warning)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [ret]=Shp2Exp('file.shp','file.exp');" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Shp2Exp){
Index: /issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Shp2Kml/Shp2Kml.cpp	(revision 15099)
@@ -12,25 +12,25 @@
 
 void Shp2KmlUsage(void){/*{{{*/
-	_pprintLine_("Shp2Kml - shp to kml file conversion module:");
-	_pprintLine_("");
-	_pprintLine_("   This module converts a file from shp to kml format.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [ret]=Shp2Kml(filshp,filkml,sgn,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      filshp      file name of shp file to be read (char, extension optional)");
-	_pprintLine_("      filkml      file name of kml file to be written (char)");
-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north); -1 (south); or 0 (no translation))");
-	_pprintLine_("");
-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
-	_pprintLine_("");
-	_pprintLine_("      ret         return code (non-zero for warning)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml', 0);");
-	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml', 1,'central_meridian',45,'standard_parallel',70);");
-	_pprintLine_("      [ret]=Shp2Kml('file.shp','file.kml',-1,'central_meridian', 0,'standard_parallel',71);");
-	_pprintLine_("");
+	_pprintString_("Shp2Kml - shp to kml file conversion module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module converts a file from shp to kml format." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [ret]=Shp2Kml(filshp,filkml,sgn,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      filshp      file name of shp file to be read (char, extension optional)" << "\n");
+	_pprintString_("      filkml      file name of kml file to be written (char)" << "\n");
+	_pprintString_("      sgn         sign for hemisphere (double, +1 (north) -1 (south) or 0 (no translation))" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      central_meridian     central meridian (double, optional, but must specify with sp)" << "\n");
+	_pprintString_("      standard_parallel    standard parallel (double, optional, but must specify with cm)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      ret         return code (non-zero for warning)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [ret]=Shp2Kml('file.shp','file.kml', 0);" << "\n");
+	_pprintString_("      [ret]=Shp2Kml('file.shp','file.kml', 1,'central_meridian',45,'standard_parallel',70);" << "\n");
+	_pprintString_("      [ret]=Shp2Kml('file.shp','file.kml',-1,'central_meridian', 0,'standard_parallel',71);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Shp2Kml){
@@ -71,7 +71,7 @@
 	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
 		options->Get(&cm,"central_meridian");
-		if (verbose) _printLine_("  cm=" << cm);
+		if (verbose) _printString_("  cm=" << cm << "\n");
 		options->Get(&sp,"standard_parallel");
-		if (verbose) _printLine_("  sp=" << sp);
+		if (verbose) _printString_("  sp=" << sp << "\n");
 	}
 
Index: /issm/trunk-jpl/src/wrappers/StringToEnum/StringToEnum.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/StringToEnum/StringToEnum.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/StringToEnum/StringToEnum.cpp	(revision 15099)
@@ -6,7 +6,7 @@
 
 void StringToEnumUsage(void){/*{{{*/
-	_pprintLine_("");
-	_pprintLine_("   usage: " << __FUNCT__ << "enum = StringToEnum(string);");
-	_pprintLine_("");
+	_pprintString_("" << "\n");
+	_pprintString_("   usage: " << __FUNCT__ << "enum = StringToEnum(string);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(StringToEnum){
Index: /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/TriMesh/TriMesh.cpp	(revision 15099)
@@ -6,11 +6,11 @@
 
 void TriMeshUsage(void){/*{{{*/
-	_printLine_("");
-	_printLine_("   usage: [index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,area) ");
-	_printLine_("      where: index,x,y defines a triangulation, segments is an array made ");
-	_printLine_("      of exterior segments to the mesh domain outline, segmentmarkers is an array flagging each segment, ");
-	_printLine_("      outlinefilename an Argus domain outline file, ");
-	_printLine_("      area is the maximum area desired for any element of the resulting mesh, ");
-	_printLine_("");
+	_printString_("" << "\n");
+	_printString_("   usage: [index,x,y,segments,segmentmarkers]=TriMesh(domainoutlinefilename,rifts,area) " << "\n");
+	_printString_("      where: index,x,y defines a triangulation, segments is an array made " << "\n");
+	_printString_("      of exterior segments to the mesh domain outline, segmentmarkers is an array flagging each segment, " << "\n");
+	_printString_("      outlinefilename an Argus domain outline file, " << "\n");
+	_printString_("      area is the maximum area desired for any element of the resulting mesh, " << "\n");
+	_printString_("" << "\n");
 }/*}}}*/
 WRAPPER(TriMesh){
Index: /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/TriMeshProcessRifts/TriMeshProcessRifts.cpp	(revision 15099)
@@ -6,8 +6,8 @@
 
 void TriMeshProcessRiftsUsage(void){/*{{{*/
-	_printLine_("");
-	_printLine_("   usage: [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessrifts(index1,x1,y1,segments1,segmentmarkers1) ");
-	_printLine_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation.");
-	_printLine_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed.");
+	_printString_("" << "\n");
+	_printString_("   usage: [index2,x2,y2,segments2,segmentmarkers2,rifts2]=TriMeshProcessrifts(index1,x1,y1,segments1,segmentmarkers1) " << "\n");
+	_printString_("      where: (index1,x1,y1,segments1,segmentmarkers1) is an initial triangulation." << "\n");
+	_printString_("      index2,x2,y2,segments2,segmentmarkers2,rifts2 is the resulting triangulation where rifts have been processed." << "\n");
 }/*}}}*/
 WRAPPER(TriMeshProcessRifts){
Index: /issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/TriaSearch/TriaSearch.cpp	(revision 15099)
@@ -5,12 +5,12 @@
 
 void TriaSearchUsage(void){/*{{{*/
-	_pprintLine_("TriaSearch- find triangle holding a point (x0,y0) in a mesh");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("         tria=TriaSearch(index,x,y,x0,y0);");
-	_pprintLine_("      index,x,y: mesh triangulatrion");
-	_pprintLine_("      x0,y0: coordinates of the point for which we are trying to find a triangle");
-	_pprintLine_("      x0,y0 can be an array of points");
-	_pprintLine_("");
+	_pprintString_("TriaSearch- find triangle holding a point (x0,y0) in a mesh" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("         tria=TriaSearch(index,x,y,x0,y0);" << "\n");
+	_pprintString_("      index,x,y: mesh triangulatrion" << "\n");
+	_pprintString_("      x0,y0: coordinates of the point for which we are trying to find a triangle" << "\n");
+	_pprintString_("      x0,y0 can be an array of points" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(TriaSearch){
Index: /issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/Xy2ll/Xy2ll.cpp	(revision 15099)
@@ -5,26 +5,26 @@
 
 void Xy2llUsage(void){/*{{{*/
-	_pprintLine_("Xy2ll - x/y to lat/long coordinate transformation module:");
-	_pprintLine_("");
-	_pprintLine_("   This module transforms x/y to lat/long coordinates.");
-	_pprintLine_("");
-	_pprintLine_("   Usage:");
-	_pprintLine_("      [lat,lon]=Xy2ll(x,y,sgn,'param name',param,...);");
-	_pprintLine_("");
-	_pprintLine_("      x           x coordinates (double vector)");
-	_pprintLine_("      y           y coordinates (double vector)");
-	_pprintLine_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))");
-	_pprintLine_("");
-	_pprintLine_("      central_meridian     central meridian (double, optional, but must specify with sp)");
-	_pprintLine_("      standard_parallel    standard parallel (double, optional, but must specify with cm)");
-	_pprintLine_("");
-	_pprintLine_("      lat         latitude coordinates (double vector)");
-	_pprintLine_("      lon         longitude coordinates (double vector)");
-	_pprintLine_("");
-	_pprintLine_("   Examples:");
-	_pprintLine_("      [lat,lon]=Xy2ll(x,y, 1);");
-	_pprintLine_("      [lat,lon]=Xy2ll(x,y, 1,'central_meridian',45,'standard_parallel',70);");
-	_pprintLine_("      [lat,lon]=Xy2ll(x,y,-1,'central_meridian', 0,'standard_parallel',71);");
-	_pprintLine_("");
+	_pprintString_("Xy2ll - x/y to lat/long coordinate transformation module:" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   This module transforms x/y to lat/long coordinates." << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Usage:" << "\n");
+	_pprintString_("      [lat,lon]=Xy2ll(x,y,sgn,'param name',param,...);" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      x           x coordinates (double vector)" << "\n");
+	_pprintString_("      y           y coordinates (double vector)" << "\n");
+	_pprintString_("      sgn         sign for hemisphere (double, +1 (north) or -1 (south))" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      central_meridian     central meridian (double, optional, but must specify with sp)" << "\n");
+	_pprintString_("      standard_parallel    standard parallel (double, optional, but must specify with cm)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("      lat         latitude coordinates (double vector)" << "\n");
+	_pprintString_("      lon         longitude coordinates (double vector)" << "\n");
+	_pprintString_("" << "\n");
+	_pprintString_("   Examples:" << "\n");
+	_pprintString_("      [lat,lon]=Xy2ll(x,y, 1);" << "\n");
+	_pprintString_("      [lat,lon]=Xy2ll(x,y, 1,'central_meridian',45,'standard_parallel',70);" << "\n");
+	_pprintString_("      [lat,lon]=Xy2ll(x,y,-1,'central_meridian', 0,'standard_parallel',71);" << "\n");
+	_pprintString_("" << "\n");
 }/*}}}*/
 WRAPPER(Xy2ll){
@@ -63,7 +63,7 @@
 	if (options->GetOption("central_meridian") || options->GetOption("standard_parallel")) {
 		options->Get(&cm,"central_meridian");
-		if (verbose) _printLine_("  cm=" << cm);
+		if (verbose) _printString_("  cm=" << cm << "\n");
 		options->Get(&sp,"standard_parallel");
-		if (verbose) _printLine_("  sp=" << sp);
+		if (verbose) _printString_("  sp=" << sp << "\n");
 	}
 
@@ -79,5 +79,5 @@
 
 	/* Run core computations: */
-	if (verbose) _printLine_("Calling core:");
+	if (verbose) _printString_("Calling core:" << "\n");
 	if (options->GetOption("central_meridian") && options->GetOption("standard_parallel"))
 		iret=Xy2llx(lat,lon,x,y,ncoord,sgn,cm,sp);
Index: /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp	(revision 15099)
@@ -38,5 +38,5 @@
 		else{
 			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
-				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
+				_printString_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'" << "\n");
 			}
 			/*Convert matlab matrix to double* matrix: */
@@ -85,5 +85,5 @@
 		else{
 			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
-				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
+				_printString_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'" << "\n");
 			}
 			/*Convert matlab n-dim array to double* matrix: */
@@ -132,5 +132,5 @@
 		else{
 			if(!mxIsClass(dataref,"double") && !mxIsClass(dataref,"single")){
-				_printLine_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'");
+				_printString_("Warning: converting matlab data from '" << mxGetClassName(dataref) << "' to 'double'" << "\n");
 			}
 			/*Convert matlab matrix to double* matrix: */
Index: /issm/trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/matlab/io/OptionParse.cpp	(revision 15099)
@@ -190,5 +190,5 @@
 	 option=(Option*)OptionCellParse(name,prhs);
 	else {
-		_pprintLine_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".");
+		_pprintString_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\"." << "\n");
 		if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
 			option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
Index: /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp
===================================================================
--- /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 15098)
+++ /issm/trunk-jpl/src/wrappers/python/io/FetchPythonData.cpp	(revision 15099)
@@ -728,5 +728,5 @@
 		if(i+1 == nrhs) _error_("Argument " << i+2 << " must exist and be value of option \"" << name << "\".");
 
-		_pprintLine_("FetchData for Options not implemented yet, ignoring option \"" << name << "\"!");
+		_pprintString_("FetchData for Options not implemented yet, ignoring option \"" << name << "\"!" << "\n");
 
 //		option=(Option*)OptionParse(name,&PyTuple_GetItem(py_tuple,(Py_ssize_t)(i+1)));
