Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateLoadsBalancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateLoadsBalancedthickness.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateLoadsBalancedthickness.cpp	(revision 4006)
@@ -11,20 +11,16 @@
 #include "../ModelProcessorx.h"
 
-
 void	CreateLoadsBalancedthickness(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*DataSet*/
 	DataSet*    loads    = NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 	
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
-
-	cleanup_and_return:
-
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateLoadsBalancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateLoadsBalancedthickness2.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateLoadsBalancedthickness2.cpp	(revision 4006)
@@ -19,6 +19,9 @@
 	DataSet* loads=NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	/*Get edges and elements*/
@@ -29,5 +32,5 @@
 	/*First load data:*/
 	for (i=0;i<iomodel->numberofedges;i++){
-		loads->AddObject(new Numericalflux(i+1,i,iomodel));
+		loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,iomodel,Balancedthickness2AnalysisEnum));
 	}
 
@@ -37,10 +40,5 @@
 	xfree((void**)&iomodel->thickness);
 
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
-
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateLoadsBalancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateLoadsBalancedvelocities.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateLoadsBalancedvelocities.cpp	(revision 4006)
@@ -11,20 +11,16 @@
 #include "../ModelProcessorx.h"
 
-
 void	CreateLoadsBalancedvelocities(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
-	DataSet*    loads    = NULL;
+	/*DataSet*/
+	DataSet* loads=NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
-	
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
+	/*Recover pointer: */
+	loads=*ploads;
 
-	cleanup_and_return:
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp	(revision 4006)
@@ -13,8 +13,10 @@
 void	CreateLoadsDiagnosticHoriz(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*DataSets*/
 	DataSet*    loads    = NULL;
 	Icefront*   icefront = NULL;
 	Riftfront*  riftfront= NULL;
 
+	/*Intermediary*/
 	int segment_width;
 	int element;
@@ -96,4 +98,3 @@
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp	(revision 4006)
@@ -13,16 +13,14 @@
 void	CreateLoadsDiagnosticHutter(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
-	DataSet*    loads    = NULL;
+	/*DataSet*/
+	DataSet* loads=NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
 
-	/*Now, is the flag ishutter on? otherwise, do nothing: */
-	if (!iomodel->ishutter)goto cleanup_and_return;
-
-	cleanup_and_return:
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 	
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp	(revision 4006)
@@ -13,21 +13,25 @@
 void	CreateLoadsDiagnosticStokes(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
+	int segment_width;
+	int element;
 	
+	/*DataSet*/
 	DataSet*    loads    = NULL;
 	Pengrid*    pengrid  = NULL;
 
-	int segment_width;
-	int element;
-
 	/*pengrid intermediary data: */
 	int numberofpressureloads;
-	int counter=1;
+	int count;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
-	if (!iomodel->isstokes)goto cleanup_and_return;
+	if (!iomodel->isstokes) goto cleanup_and_return;
 
 	/*Create pressure loads as boundary conditions. Pay attention to the partitioning if we are running in parallel (the grids
@@ -37,4 +41,7 @@
 	IoModelFetchData(&iomodel->thickness,NULL,NULL,iomodel_handle,"thickness");
 	IoModelFetchData(&iomodel->bed,NULL,NULL,iomodel_handle,"bed");
+
+	/*Initialize counter: */
+	count=0;
 
 	/*First load data:*/
@@ -54,6 +61,6 @@
 
 		/*Create and  add load: */
-		loads->AddObject(new Icefront(counter,i,iomodel));
-		counter++;
+		loads->AddObject(new Icefront(iomodel->loadcounter+counter+1,i,iomodel,DiagnosticStokesAnalysisEnum));
+		count++;
 
 	}
@@ -78,6 +85,6 @@
 			if ((iomodel->gridonbed[i]) && (iomodel->gridonicesheet[i]) && (iomodel->gridonstokes[i])){
 				
-				loads->AddObject(new Pengrid(counter,i,iomodel));
-				counter++;
+				loads->AddObject(new Pengrid(iomodel->loadcounter+counter+1,i,iomodel,DiagnosticStokesAnalysisEnum));
+				count++;
 			}
 		} //if((iomodel->my_vertices[i]==1))
@@ -90,12 +97,7 @@
 	xfree((void**)&iomodel->singlenodetoelementconnectivity);
 
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
-
 	cleanup_and_return:
 
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp	(revision 4006)
@@ -13,11 +13,14 @@
 void	CreateLoadsDiagnosticVert(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
-	DataSet*    loads    = NULL;
+	/*DataSet*/
+	DataSet* loads=NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 4006)
@@ -13,13 +13,18 @@
 void	CreateLoadsMelting(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
 
+	/*DataSet*/
 	DataSet*    loads    = NULL;
 
-	/*if 2d: return*/
-	if (iomodel->dim==2)goto cleanup_and_return;
+	/*if 2d: Error*/
+	if (iomodel->dim==2) ISSMERROR("2d meshes not supported yet");
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	//create penalties for grids: no grid can have a temperature over the melting point
@@ -34,5 +39,5 @@
 			if (iomodel->gridonbed[i]){ 
 				
-				loads->AddObject(new Pengrid(i+1,i,iomodel));
+				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
 			}
 		}
@@ -42,12 +47,5 @@
 	xfree((void**)&iomodel->singlenodetoelementconnectivity);
 
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
-
-	cleanup_and_return:
-
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 4006)
@@ -13,17 +13,14 @@
 void	CreateLoadsPrognostic(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*DataSet*/
 	DataSet*    loads    = NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
-	
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
+	/*Recover pointer: */
+	loads=*ploads;
 
-	cleanup_and_return:
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateLoadsPrognostic2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateLoadsPrognostic2.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateLoadsPrognostic2.cpp	(revision 4006)
@@ -20,6 +20,9 @@
 	DataSet* loads=NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
 	/*Get edges and elements*/
@@ -38,5 +41,5 @@
 
 		/* Add load */
-		loads->AddObject(new Numericalflux(i+1,i,iomodel));
+		loads->AddObject(new Numericalflux(iomodel->loadcounter+i+1,i,iomodel,Prognostic2AnalysisEnum));
 	}
 
@@ -46,10 +49,5 @@
 	xfree((void**)&iomodel->thickness);
 
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
-
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateLoadsSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateLoadsSlopeCompute.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateLoadsSlopeCompute.cpp	(revision 4006)
@@ -13,18 +13,14 @@
 void	CreateLoadsSlopeCompute(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*DataSet*/
 	DataSet*    loads    = NULL;
 
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	/*Recover pointer: */
+	loads=*ploads;
 
-	/*Now, is the flag isstokes on? otherwise, do nothing: */
-	if (!iomodel->isstokes)goto cleanup_and_return;
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
 
-	cleanup_and_return:
-	
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
-
-
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 4005)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 4006)
@@ -13,14 +13,19 @@
 void	CreateLoadsThermal(DataSet** ploads, IoModel* iomodel,ConstDataHandle iomodel_handle){
 
+	/*Intermediary*/
 	int i;
 
+	/*DataSet*/
 	DataSet*    loads    = NULL;
 	Pengrid*    pengrid  = NULL;
 
+	/*Recover pointer: */
+	loads=*ploads;
+
+	/*Create loads if they do not exist yet*/
+	if(!loads) loads = new DataSet(LoadsEnum);
+
 	/*return if 2d mesh*/
-	if (iomodel->dim==2)goto cleanup_and_return;
-
-	/*Create loads: */
-	loads   = new DataSet(LoadsEnum);
+	if (iomodel->dim==2) ISSMERROR("2d meshes not supported yet");
 
 	//create penalties for grids: no grid can have a temperature over the melting point
@@ -36,5 +41,5 @@
 			if (!iomodel->spctemperature[2*i]){ //No penalty applied on spc grids!
 
-				loads->AddObject(new Pengrid(i+1,i,iomodel));
+				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
 						
 			}
@@ -45,12 +50,5 @@
 	xfree((void**)&iomodel->singlenodetoelementconnectivity);
 
-	/*All our datasets are already order by ids. Set presort flag so that later on, when sorting is requested on these 
-	 * datasets, it will not be redone: */
-	loads->Presort();
-
-	cleanup_and_return:
-
 	/*Assign output pointer: */
 	*ploads=loads;
-
 }
