Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 13553)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 13554)
@@ -343,4 +343,5 @@
 					./modules/InputConvergencex/InputConvergencex.cpp\
 					./modules/InputConvergencex/InputConvergencex.h\
+					./solutions/PrintBanner.cpp\
 					./solutions/convergence.cpp\
 					./solutions/ProcessArguments.cpp\
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13553)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13554)
@@ -171,4 +171,19 @@
 	delete parameters;
 	delete results;
+
+	/*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:"
+			<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
+			<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
+			<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
+			);
+	_pprintLine_("");
+
+	/*Now delete: */
 	delete profiler;
 
@@ -177,7 +192,24 @@
 
 /*Object management*/
+/*FUNCTION FemModel::OutputResults {{{*/
+void FemModel::OutputResults(void){
+	
+	_pprintLine_("write results to disk:");
+
+	/*Just call the OutputResultsx module: */
+	OutputResultsx(this->elements, this->nodes, this->vertices, this->loads, this->materials, this->parameters,this->results);
+
+}
+/*}}}*/
 /*FUNCTION FemModel::Solve {{{*/
 void FemModel::Solve(void){
 
+	/*profiling: */
+	bool profiling = false;
+	IssmDouble solution_time;
+	IssmDouble solution_flops;
+	IssmDouble solution_memory;
+
+	/*solution: */
 	int solution_type;
 	void (*solutioncore)(FemModel*)=NULL; //core solution function pointer
@@ -186,5 +218,5 @@
 
 	/*Retrieve solution_type from parameters: */
-	this->parameters->FindParam(&solution_type,SolutionTypeEnum);
+	parameters->FindParam(&solution_type,SolutionTypeEnum);
 
 	/*Figure out which solution core we are going to run with the current solution type: */
@@ -201,4 +233,21 @@
 	profiler->Tag(FinishAdCore);
 
+	/*some profiling results for the core: */
+	parameters->FindParam(&profiling,DebugProfilingEnum);
+	if(profiling){
+
+		solution_time=profiler->DeltaTime(StartCore,FinishCore);
+		solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
+		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");
+
+		/*Add to results: */
+		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
+		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
+		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
+	}
 
 }
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13553)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 13554)
@@ -54,4 +54,5 @@
 		void Echo();
 		void Solve(void);
+		void OutputResults(void);
 
 		/*Fem: */
Index: /issm/trunk-jpl/src/c/issm.h
===================================================================
--- /issm/trunk-jpl/src/c/issm.h	(revision 13553)
+++ /issm/trunk-jpl/src/c/issm.h	(revision 13554)
@@ -12,4 +12,5 @@
 #endif
 
+#include "./include/globals.h" //only include this header file once!
 #include "./include/include.h"
 #include "./shared/shared.h"
Index: /issm/trunk-jpl/src/c/solutions/PrintBanner.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/PrintBanner.cpp	(revision 13554)
+++ /issm/trunk-jpl/src/c/solutions/PrintBanner.cpp	(revision 13554)
@@ -0,0 +1,15 @@
+/*!\file: PrintBanner.cpp
+ * \brief: print banner information on ISSM
+ */ 
+
+#include "../include/include.h"
+#include "../shared/shared.h"
+
+void PrintBanner(void){
+
+	_pprintLine_("");
+	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
+	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
+	_pprintLine_("");
+}
+
Index: /issm/trunk-jpl/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13553)
+++ /issm/trunk-jpl/src/c/solutions/issm.cpp	(revision 13554)
@@ -1,23 +1,12 @@
 /*!\file:  issm.cpp
- * \brief: ISSM main parallel program
+ * \brief: ISSM main program
  */ 
 
 #include "../issm.h"
-#include "../include/globals.h"
 	
-void ProfilerEcho(Profiler* profiler);
-void ProfilerEnd(Profiler* profiler, Results* results, Parameters* parameters);
-
 int main(int argc,char **argv){
 
-	/*FemModel: */
-	FemModel *femmodel = NULL;
-
-	/*Print starting banner: {{{*/
-	_pprintLine_("");
-	_pprintLine_("Ice Sheet System Model (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION);
-	_pprintLine_("(website: " << PACKAGE_URL << " contact: " << PACKAGE_BUGREPORT << ")");
-	_pprintLine_(""); 
-	/*}}}*/
+	/*Print starting banner:*/
+	PrintBanner();
 
 	/*Initialize exception trapping: */
@@ -28,18 +17,11 @@
 		
 	/*Initialize femmodel from arguments provided command line: */
-	femmodel=new FemModel(argc,argv);
+	FemModel *femmodel = new FemModel(argc,argv);
 
 	/*Solve: */
 	femmodel->Solve();
 
-	/*Some profiling: */
-	ProfilerEnd(femmodel->profiler,femmodel->results,femmodel->parameters);
-
-	_pprintLine_("write results to disk:");
-	OutputResultsx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
-	
-	/*Profiling at the end: */
-	femmodel->profiler->Tag(Finish); 
-	ProfilerEcho(femmodel->profiler);
+	/*Output results: */
+	femmodel->OutputResults();
 	
 	/*Wrap up: */
@@ -55,44 +37,2 @@
 	return 0; 
 }
-	
-void ProfilerEcho(Profiler* profiler){ /*{{{*/
-
-	_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:"
-		<<profiler->DeltaTimeModHour(Start,Finish)<<" hrs "
-		<<profiler->DeltaTimeModMin(Start,Finish)<<" min "
-		<<profiler->DeltaTimeModSec(Start,Finish)<<" sec"
-		);
-	_pprintLine_("");
-
-} /*}}}*/
-void ProfilerEnd(Profiler* profiler, Results* results, Parameters* parameters){ /*{{{*/
-
-	bool profiling = false;
-	
-	IssmDouble solution_time;
-	IssmDouble solution_flops;
-	IssmDouble solution_memory;
-
-	parameters->FindParam(&profiling,DebugProfilingEnum); 
-
-	if(profiling){
-
-		solution_time=profiler->DeltaTime(StartCore,FinishCore);
-		solution_flops=profiler->DeltaFlops(StartCore,FinishCore);
-		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");
-
-		/*Add to results: */
-		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
-		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
-		results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
-	}
-
-} /*}}}*/
Index: /issm/trunk-jpl/src/c/solutions/kriging.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/kriging.cpp	(revision 13553)
+++ /issm/trunk-jpl/src/c/solutions/kriging.cpp	(revision 13554)
@@ -4,5 +4,4 @@
 
 #include "../issm.h"
-#include "../include/globals.h"
 
 /*Local prototypes*/
Index: /issm/trunk-jpl/src/c/solutions/solutions.h
===================================================================
--- /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 13553)
+++ /issm/trunk-jpl/src/c/solutions/solutions.h	(revision 13554)
@@ -50,4 +50,5 @@
 void EnvironmentFinalize(void);
 int  DakotaSpawnCore(double* responses, int numresponses, double* variables, char** variables_descriptors,int numvariables, void* femmodel,int counter);
+void PrintBanner(void);
 
 //solution configuration
