Index: /issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 4181)
+++ /issm/trunk/src/c/DataSet/DataSet.cpp	(revision 4182)
@@ -486,18 +486,20 @@
 	/*Go through a dataset, and for each object, report it cpu: */
 
+	int i;
 	int rank;
 	int sid;
-	vector<Object*>::iterator object;
-	DofObject* dofobject=NULL;
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		/*Ok, this object is a node, ask which rank it has: */
-		rank=(*object)->MyRank();
-
-		/*Which id does it have: */
-		dofobject=dynamic_cast<DofObject*>(*object);
-		sid=dofobject->Sid();
-
+	
+	for(i=0;i<this->Size();i++){
+		Object* object=(Object*)this->GetObjectByOffset(i);
+		rank=object->MyRank();
+
+		if (object->Enum()==NodeEnum){
+			Node* node=(Node*)object;
+			sid=node->Sid();
+		}
+		if (object->Enum()==VertexEnum){
+			Vertex* vertex=(Vertex*)object;
+			sid=vertex->Sid();
+		}
 		/*Plug rank into ranks, according to id: */
 		ranks[sid]=rank; 
@@ -914,5 +916,5 @@
 	MPI_Bcast(&node_max_sid,1,MPI_INT,0,MPI_COMM_WORLD);
 	max_sid=node_max_sid;
-	#endif
+	#endif 
 
 	/*sid starts at 0*/
Index: /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 4181)
+++ /issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h	(revision 4182)
@@ -264,4 +264,5 @@
 	JEnum,
 	PatchEnum,
+	TimeEnum,
 	/*}}}*/
 	/*Convergence{{{1*/
Index: /issm/trunk/src/c/modules/OutputResultsx/MatlabWriteResults.cpp
===================================================================
--- /issm/trunk/src/c/modules/OutputResultsx/MatlabWriteResults.cpp	(revision 4181)
+++ /issm/trunk/src/c/modules/OutputResultsx/MatlabWriteResults.cpp	(revision 4182)
@@ -19,22 +19,65 @@
 void  MatlabWriteResults(mxArray** pdataref, Parameters* parameters, DataSet* results){
 
-	int i;
+	int i,j;
+	int count;
 
 	/*output: */
 	mxArray* dataref=NULL;
 	mwSize nfields;
+	mwSize maxfields;
+	mwSize nsteps;
+	mwSize step;
 	const	char**	fnames=NULL;
+	int*    enums=NULL;
+	int     baseenum;
 	mwSize		onebyone[2] = {1,1};
 	mwSize		ndim=2;
 
-	/*How many results? : */
-	nfields=(mwSize)results->Size();
-
-	/*recover names: */
-	fnames=(const char**)xmalloc(nfields*sizeof(char*));
+	/*How many time steps do we have? : */
+	nsteps=0;
 	for(i=0;i<nfields;i++){
 		ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
-		fnames[i]=result->GetResultName();
+		step=result->GetStep();
+		if(step>nsteps)nsteps=step;
 	}
+	onebyone[0]=nsteps;
+
+	/*How many field names do we have. First, figure out how many result types we have: */
+	maxfields=(mwSize)results->Size();
+	enums=(int*)xmalloc(maxfields*sizeof(int));
+	for(i=0;i<maxfields;i++){
+		ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
+		enums[i]=result->EnumType();
+	}
+	/*Now, make result types unique: */
+	for(i=0;i<maxfields;i++){
+		if(enums[i]>=0){//if <0, it means this enum was found to replicate another one previously
+			baseenum=enums[i]; 		
+			/*is the baseenum repeated later on?:*/
+			for(j=i+1;j<maxfields;j++){
+				if (enums[j]==baseenum)enums[j]=-1;
+			}
+		}
+		else continue;
+	}
+
+	/*Now, go through enums, and whatever is not null is a non repeated field name: */
+	nfields=0;
+	for(i=0;i<maxfields;i++)if(enums[i]>0)nfields++;
+
+	/*Add 1 field for time: */
+	nfields++;
+	
+	/*Fill the names of the structure field: */
+	fnames=(const char**)xmalloc(nfields*sizeof(char*));
+	count=0;
+	for(i=0;i<maxfields;i++){
+		if (enums[i]>0){
+			fnames[count]=EnumAsString(enums[i]);
+			count++;
+		}
+	}
+	/*don't forget the extra field "time":*/
+	fnames[nfields-1]=EnumAsString(TimeEnum);
 
 	/*Initialize structure: */
Index: /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp
===================================================================
--- /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 4181)
+++ /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.cpp	(revision 4182)
@@ -45,4 +45,2 @@
 	#endif
 }
-
-
Index: /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.h
===================================================================
--- /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.h	(revision 4181)
+++ /issm/trunk/src/c/modules/OutputResultsx/OutputResultsx.h	(revision 4182)
@@ -3,6 +3,6 @@
  */ 
 
-#ifndef _OUTPUTRESULTS_H
-#define _OUTPUTRESULTS_H
+#ifndef _OUTPUTRESULTSX_H
+#define _OUTPUTRESULTSX_H
 
 #ifdef HAVE_CONFIG_H
Index: /issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.cpp	(revision 4182)
@@ -188,6 +188,14 @@
 	char* name=NULL;
 	name=this->GetResultName();
-	mxSetField( dataref, 0, name,mxCreateDoubleScalar((double)value));
+	
+	mxSetField( dataref, this->step-1, name,mxCreateDoubleScalar((double)value));
+	mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
 }
 #endif
 /*}}}*/
+/*FUNCTION BoolExternalResult::GetStep(void);{{{1*/
+int BoolExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/BoolExternalResult.h	(revision 4182)
@@ -70,4 +70,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.cpp	(revision 4182)
@@ -184,6 +184,14 @@
 	char* name=NULL;
 	name=this->GetResultName();
-	mxSetField( dataref, 0, name,mxCreateDoubleScalar(value));
+	mxSetField( dataref,this->step-1, name,mxCreateDoubleScalar(value));
+	mxSetField( dataref,this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
+
 }
 #endif
 /*}}}*/
+/*FUNCTION DoubleExternalResult::GetStep(void);{{{1*/
+int DoubleExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/DoubleExternalResult.h	(revision 4182)
@@ -70,4 +70,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.cpp	(revision 4182)
@@ -231,6 +231,16 @@
 
 	/*set tranpose matrix inside the dataref structure: */
-	mxSetField( dataref, 0, name,pfield2);
+	mxSetField( dataref, this->step-1, name,pfield2);
+	mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
+
+
+
 }
 #endif
 /*}}}*/
+/*FUNCTION DoubleMatExternalResult::GetStep(void);{{{1*/
+int DoubleMatExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/DoubleMatExternalResult.h	(revision 4182)
@@ -70,4 +70,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.cpp	(revision 4182)
@@ -222,7 +222,16 @@
 	mxSetN(pfield,1);
 	mxSetPr(pfield,doublevec);
-	mxSetField( dataref, 0, name,pfield);
+
+	mxSetField( dataref, this->step-1, name,pfield);
+	mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
+
 
 }
 #endif
 /*}}}*/
+/*FUNCTION DoubleVecExternalResult::GetStep(void);{{{1*/
+int DoubleVecExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/DoubleVecExternalResult.h	(revision 4182)
@@ -69,4 +69,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/ExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/ExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/ExternalResult.h	(revision 4182)
@@ -37,4 +37,5 @@
 		virtual void  SetMatlabField(mxArray* dataref)=0;
 		#endif
+		virtual int   GetStep(void)=0;
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/IntExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/IntExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/IntExternalResult.cpp	(revision 4182)
@@ -188,6 +188,15 @@
 	char* name=NULL;
 	name=this->GetResultName();
-	mxSetField( dataref, 0, name,mxCreateDoubleScalar(value));
+
+	mxSetField( dataref, this->step-1, name,mxCreateDoubleScalar(value));
+	mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
+
 }
 #endif
 /*}}}*/
+/*FUNCTION IntExternalResult::GetStep(void);{{{1*/
+int IntExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/IntExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/IntExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/IntExternalResult.h	(revision 4182)
@@ -70,4 +70,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.cpp	(revision 4182)
@@ -256,6 +256,14 @@
 	mxSetPr(pfield,doublevec);
 	
-	mxSetField( dataref, 0, name, pfield);
+	mxSetField( dataref, this->step-1, name, pfield);
+	mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
+
 }
 #endif
 /*}}}*/
+/*FUNCTION PetscVecExternalResult::GetStep(void);{{{1*/
+int PetscVecExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/PetscVecExternalResult.h	(revision 4182)
@@ -68,4 +68,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/c/objects/ExternalResults/StringExternalResult.cpp
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/StringExternalResult.cpp	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/StringExternalResult.cpp	(revision 4182)
@@ -200,6 +200,15 @@
 
 	name=this->GetResultName();
-	mxSetField( dataref, 0, name, mxCreateString(value));
+
+	mxSetField( dataref, this->step-1, name, mxCreateString(value));
+	mxSetField( dataref, this->step-1, EnumAsString(TimeEnum),mxCreateDoubleScalar((double)this->time));
+
 }
 #endif
 /*}}}*/
+/*FUNCTION StringExternalResult::GetStep(void);{{{1*/
+int StringExternalResult::GetStep(void){
+
+	return this->step;
+}
+/*}}}*/
Index: /issm/trunk/src/c/objects/ExternalResults/StringExternalResult.h
===================================================================
--- /issm/trunk/src/c/objects/ExternalResults/StringExternalResult.h	(revision 4181)
+++ /issm/trunk/src/c/objects/ExternalResults/StringExternalResult.h	(revision 4182)
@@ -69,4 +69,5 @@
 		void  SetMatlabField(mxArray* dataref);
 		#endif
+		int   GetStep(void);
 		/*}}}*/
 };
Index: /issm/trunk/src/m/solutions/bedslope.m
===================================================================
--- /issm/trunk/src/m/solutions/bedslope.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/bedslope.m	(revision 4182)
@@ -24,5 +24,5 @@
 	
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.bedslopecompute=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 
 	else
Index: /issm/trunk/src/m/solutions/control_core.m
===================================================================
--- /issm/trunk/src/m/solutions/control_core.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/control_core.m	(revision 4182)
@@ -74,10 +74,4 @@
 	end
 
-	%Temporary saving every five iterations
-	if mod(n+1,5)==0;
-		displaystring(verbose,'\n%s',['      saving temporary results...']);
-		controlrestart(femmmodel,J);
-	end
-
 end
 
Index: sm/trunk/src/m/solutions/controlrestart.m
===================================================================
--- /issm/trunk/src/m/solutions/controlrestart.m	(revision 4181)
+++ 	(revision )
@@ -1,19 +1,0 @@
-function femmodel=controlrestart(femmodel,J)
-%CONTROLRESTART - save as much as possible to be able to restart the control_core solution
-%
-%   Usage:
-%       femmodel=controlrestart(femmodel,J);
-
-	%recover parameters common to all solutions
-	nsteps=femmodel.parameters.NSteps;
-	control_type=femmodel.parameters.ControlType;
-	
-	%Save J and the parameter
-	femmodel.elements=InputToResult(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel.parameters,control_type);
-	femmodel.results.JEnum=J;
-	femmodel.results.ControlTypeEnum=EnumAsString(control_type);
-
-	%Write to disk
-	OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
-
-end %end function
Index: /issm/trunk/src/m/solutions/diagnostic.m
===================================================================
--- /issm/trunk/src/m/solutions/diagnostic.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/diagnostic.m	(revision 4182)
@@ -34,5 +34,5 @@
 		
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.diagnostic=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 
 	else
Index: /issm/trunk/src/m/solutions/prognostic.m
===================================================================
--- /issm/trunk/src/m/solutions/prognostic.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/prognostic.m	(revision 4182)
@@ -25,5 +25,5 @@
 
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.prognostic=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 	else
 		%launch dakota driver for diagnostic core solution
Index: /issm/trunk/src/m/solutions/prognostic2.m
===================================================================
--- /issm/trunk/src/m/solutions/prognostic2.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/prognostic2.m	(revision 4182)
@@ -24,5 +24,5 @@
 
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.prognostic2=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 	else
 		%launch dakota driver for diagnostic core solution
Index: /issm/trunk/src/m/solutions/steadystate.m
===================================================================
--- /issm/trunk/src/m/solutions/steadystate.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/steadystate.m	(revision 4182)
@@ -35,5 +35,5 @@
 
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.steadystate=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 
 	else
Index: /issm/trunk/src/m/solutions/surfaceslope.m
===================================================================
--- /issm/trunk/src/m/solutions/surfaceslope.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/surfaceslope.m	(revision 4182)
@@ -24,5 +24,5 @@
 	
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.surfaceslopecompute=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 
 	else
Index: /issm/trunk/src/m/solutions/thermal.m
===================================================================
--- /issm/trunk/src/m/solutions/thermal.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/thermal.m	(revision 4182)
@@ -24,5 +24,5 @@
 
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.thermal=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 	else
 		%launch dakota driver for diagnostic core solution
Index: /issm/trunk/src/m/solutions/transient2d.m
===================================================================
--- /issm/trunk/src/m/solutions/transient2d.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/transient2d.m	(revision 4182)
@@ -23,5 +23,5 @@
 		
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.transient2d=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 
 	else
Index: /issm/trunk/src/m/solutions/transient3d.m
===================================================================
--- /issm/trunk/src/m/solutions/transient3d.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/transient3d.m	(revision 4182)
@@ -22,5 +22,5 @@
 		
 		displaystring(verbose,'%s',['write results']);
-		OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
+		md.results.transient3d=OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
 
 	else
Index: /issm/trunk/src/m/solutions/transient3d_core.m
===================================================================
--- /issm/trunk/src/m/solutions/transient3d_core.m	(revision 4181)
+++ /issm/trunk/src/m/solutions/transient3d_core.m	(revision 4182)
@@ -50,9 +50,4 @@
 		femmodel.elements=InputToResult(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MeltingEnum,step,time);
 
-		%Save temporary results
-		if mod(step,5)==0,
-			displaystring(verbose,'\n%s',['saving temporary results...']);
-			OutputResults(femmodel.elements, femmodel.loads, femmodel.nodes, femmodel.vertices, femmodel.materials, femmodel.parameters);
-		end
 	end
 
Index: /issm/trunk/src/mex/Makefile.am
===================================================================
--- /issm/trunk/src/mex/Makefile.am	(revision 4181)
+++ /issm/trunk/src/mex/Makefile.am	(revision 4182)
@@ -43,4 +43,5 @@
 				Orth\
 				OutputRifts\
+				OutputResults\
 				PenaltyConstraints\
 				PenaltySystemMatrices\
@@ -208,4 +209,7 @@
 			  OutputRifts/OutputRifts.h
 
+OutputResults_SOURCES = OutputResults/OutputResults.cpp\
+			  OutputResults/OutputResults.h
+
 PenaltyConstraints_SOURCES = PenaltyConstraints/PenaltyConstraints.cpp\
 			  PenaltyConstraints/PenaltyConstraints.h
Index: /issm/trunk/src/mex/OutputResults/OutputResults.cpp
===================================================================
--- /issm/trunk/src/mex/OutputResults/OutputResults.cpp	(revision 4182)
+++ /issm/trunk/src/mex/OutputResults/OutputResults.cpp	(revision 4182)
@@ -0,0 +1,63 @@
+/*\file OutputResults.c
+ *\brief: output results inside elements, and in femmodel
+ */
+
+#include "./OutputResults.h"
+
+void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
+
+	/*diverse: */
+	int   noerr=1;
+
+	/*input datasets: */
+	DataSet* elements=NULL;
+	DataSet* nodes=NULL;
+	DataSet* vertices=NULL;
+	DataSet* loads=NULL;
+	DataSet* materials=NULL;
+	Parameters* parameters=NULL;
+	DataSet* results=NULL;
+	
+	/* output datasets: */
+	mxArray* dataref=NULL;
+
+	/*Boot module: */
+	MODULEBOOT();
+
+	/*checks on arguments on the matlab side: */
+	CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&OutputResultsUsage);
+
+	/*Input datasets: */
+	FetchData(&elements,ELEMENTS);
+	FetchData(&nodes,NODES);
+	FetchData(&vertices,VERTICES);
+	FetchData(&loads,LOADS);
+	FetchData(&materials,MATERIALS);
+	FetchParams(&parameters,PARAMETERS);
+	FetchData(&results,RESULTS);
+
+	/*Call "x" code layer: */
+	OutputResultsx(&dataref, elements,nodes,vertices,loads,materials,parameters,results);
+
+	/*write output datasets: */
+	plhs[0]=dataref;
+	
+	/*Free ressources: */
+	delete elements;
+	delete nodes;
+	delete vertices;
+	delete loads;
+	delete materials;
+	delete parameters;
+	delete results;
+
+	/*end module: */
+	MODULEEND();
+}
+
+void OutputResultsUsage(void)
+{
+	_printf_("\n");
+	_printf_("   usage: [results] = %s(elements,nodes,vertices,loads,materials,parameters,results);\n",__FUNCT__);
+	_printf_("\n");
+}
Index: /issm/trunk/src/mex/OutputResults/OutputResults.h
===================================================================
--- /issm/trunk/src/mex/OutputResults/OutputResults.h	(revision 4182)
+++ /issm/trunk/src/mex/OutputResults/OutputResults.h	(revision 4182)
@@ -0,0 +1,34 @@
+/*
+	OutputResults.h
+*/
+
+#ifndef _OUTPUTRESULTS_H
+#define _OUTPUTRESULTS_H
+
+/* local prototypes: */
+void OutputResultsUsage(void);
+
+#include "../../c/modules/modules.h"
+#include "../../c/DataSet/DataSet.h"
+#include "../../c/shared/shared.h"
+#include "../../c/EnumDefinitions/EnumDefinitions.h"
+
+#undef __FUNCT__ 
+#define __FUNCT__  "OutputResults"
+
+/* serial input macros: */
+#define ELEMENTS (mxArray*)prhs[0]
+#define NODES (mxArray*)prhs[1]
+#define VERTICES (mxArray*)prhs[2]
+#define LOADS (mxArray*)prhs[3]
+#define MATERIALS (mxArray*)prhs[4]
+#define PARAMETERS (mxArray*)prhs[5]
+#define RESULTS (mxArray*)prhs[6]
+
+/* serial arg counts: */
+#undef NLHS
+#define NLHS  1
+#undef NRHS
+#define NRHS  7
+
+#endif  /* _OUTPUTRESULTS_H */
