Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateLoadsBalancethickness.cpp	(revision 9372)
@@ -35,7 +35,5 @@
 
 		/*Get edges and elements*/
-		iomodel->FetchData(&iomodel->edges,&numberofedges,NULL,EdgesEnum);
-		iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-		iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
+		iomodel->FetchData(3,EdgesEnum,ElementsEnum,ThicknessEnum);
 
 		/*First load data:*/
@@ -43,5 +41,5 @@
 
 			/*Get left and right elements*/
-			element=(int)iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+			element=(int)iomodel->f(EdgesEnum)[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
 
 			/*Now, if this element is not in the partition, pass: */
@@ -53,7 +51,5 @@
 
 		/*Free data: */
-		xfree((void**)&iomodel->edges);
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
+		iomodel->DeleteData(3,EdgesEnum,ElementsEnum,ThicknessEnum);
 	}
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/CreateNodesBalancethickness.cpp	(revision 9372)
@@ -49,11 +49,5 @@
 
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(7,ElementsEnum,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	if(continuous_galerkin){
@@ -61,5 +55,4 @@
 		/*Build Nodes dataset (Continuous Galerkin)*/
 		for (i=0;i<numberofvertices;i++){
-
 			if(iomodel->my_vertices[i]){
 
@@ -79,5 +72,5 @@
 
 					//Get index of the vertex on which the current node is located
-					vertex_id=(int)*(iomodel->elements+3*i+j); //(Matlab indexing)
+					vertex_id=(int)*(iomodel->f(ElementsEnum)+3*i+j); //(Matlab indexing)
 					io_index=vertex_id-1;                      //(C indexing)
 					_assert_(vertex_id>0 && vertex_id<=numberofvertices);
@@ -95,11 +88,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->vertices_type);
+	iomodel->DeleteData(7,ElementsEnum,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancethickness/UpdateElementsBalancethickness.cpp	(revision 9372)
@@ -21,6 +21,6 @@
 	/*Fetch data needed: */
 	iomodel->constants->FindParam(&dim,DimEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	iomodel->constants->FindParam(&numberofelements,NumberOfElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -52,6 +52,4 @@
 	}
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
-
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateConstraintsEnthalpy.cpp	(revision 9372)
@@ -38,8 +38,12 @@
 
 	/*return if 2d mesh*/
-	if (dim==2) goto cleanup_and_return;
+	if (dim==2){
+		*pconstraints=constraints;
+		return;
+	}
 
 	/*Fetch data: */
-	iomodel->FetchData(&iomodel->spctemperature,NULL,NULL,SpctemperatureEnum);
+	double *spctemperature=NULL;
+	iomodel->FetchData(&spctemperature,NULL,NULL,SpctemperatureEnum);
 
 	/*Initialize counter*/
@@ -51,7 +55,7 @@
 		if((iomodel->my_vertices[i])){
 
-			if ((int)iomodel->spctemperature[2*i]){
+			if ((int)spctemperature[2*i]){
 
-				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,heatcapacity*(iomodel->spctemperature[2*i+1]-referencetemperature),EnthalpyAnalysisEnum));
+				constraints->AddObject(new SpcStatic(iomodel->constraintcounter+count+1,iomodel->nodecounter+i+1,1,heatcapacity*(spctemperature[2*i+1]-referencetemperature),EnthalpyAnalysisEnum));
 				count++;
 
@@ -61,7 +65,5 @@
 
 	/*Free data: */
-	xfree((void**)&iomodel->spctemperature);
-
-	cleanup_and_return:
+	xfree((void**)&spctemperature);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/CreateNodesEnthalpy.cpp	(revision 9372)
@@ -36,13 +36,7 @@
 
 	/*Create nodes and vertices: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	for (i=0;i<numberofvertices;i++){
-
 		if(iomodel->my_vertices[i]){
 			
@@ -54,10 +48,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 9372)
@@ -24,8 +24,8 @@
 
 	/*Now, is the model 3d? otherwise, do nothing: */
-	if (dim==2)return;
+	if(dim==2)return;
 
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -61,5 +61,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/CreateNodesHydrology.cpp	(revision 9372)
@@ -36,15 +36,8 @@
 
 	/*Create nodes and vertices: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
-
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	for (i=0;i<numberofvertices;i++){
 
 		if(iomodel->my_vertices[i]){
-			
 			/*Add node to nodes dataset: */
 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,HydrologyAnalysisEnum));
@@ -52,12 +45,5 @@
 		}
 	}
-
-	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Hydrology/UpdateElementsHydrology.cpp	(revision 9372)
@@ -19,6 +19,6 @@
 	
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	iomodel->constants->FindParam(&numberofelements,NumberOfElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -55,7 +55,6 @@
 
 	elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);
+
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
-	
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 9372)
@@ -35,21 +35,15 @@
 
 	//create penalties for nodes: no node can have a temperature over the melting point
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(2,NodeOnBedEnum,ElementsEnum);
 	CreateSingleNodeToElementConnectivity(iomodel);
 
 	for (i=0;i<numberofvertices;i++){
-		
 		if((iomodel->my_vertices[i]==1)){
-
-			if (iomodel->nodeonbed[i]){ 
-				
+			if (iomodel->f(NodeOnBedEnum)[i]){ 
 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,MeltingAnalysisEnum));
 			}
 		}
 	}
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->singlenodetoelementconnectivity);
+	iomodel->DeleteData(2,NodeOnBedEnum,ElementsEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 9372)
@@ -36,11 +36,5 @@
 
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
-
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	for (i=0;i<numberofvertices;i++){
 
@@ -52,12 +46,5 @@
 		}
 	}
-
-	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/UpdateElementsMelting.cpp	(revision 9372)
@@ -27,5 +27,5 @@
 
 	/*Fetch data needed: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -60,5 +60,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
-
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateLoadsPrognostic.cpp	(revision 9372)
@@ -38,7 +38,5 @@
 
 		/*Get edges and elements*/
-		iomodel->FetchData(&iomodel->edges,&numberofedges,NULL,EdgesEnum);
-		iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-		iomodel->FetchData(&iomodel->thickness,NULL,NULL,ThicknessEnum);
+		iomodel->FetchData(3,EdgesEnum,ElementsEnum,ThicknessEnum);
 
 		/*First load data:*/
@@ -46,5 +44,5 @@
 
 			/*Get left and right elements*/
-			element=(int)iomodel->edges[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
+			element=(int)iomodel->f(EdgesEnum)[4*i+2]-1; //edges are [node1 node2 elem1 elem2]
 
 			/*Now, if this element is not in the partition, pass: */
@@ -56,27 +54,26 @@
 
 		/*Free data: */
-		xfree((void**)&iomodel->edges);
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->thickness);
-
+		iomodel->DeleteData(3,EdgesEnum,ElementsEnum,ThicknessEnum);
 	}
 
 	/*Create Penpair for penalties: */
-	iomodel->FetchData(&iomodel->penalties,&numpenalties,NULL,PenaltiesEnum);
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
+	double *penalties=NULL;
+	double *nodeonbed=NULL;
+	iomodel->FetchData(&penalties,&numpenalties,NULL,PenaltiesEnum);
+	iomodel->FetchData(&nodeonbed,NULL,NULL,NodeOnBedEnum);
 
 	for(i=0;i<numpenalties;i++){
 
-		if(iomodel->my_vertices[(int)iomodel->penalties[2*i+0]-1]){
+		if(iomodel->my_vertices[(int)penalties[2*i+0]-1]){
 
 			/*In debugging mode, check that the second node is in the same cpu*/
-			_assert_(iomodel->my_vertices[(int)iomodel->penalties[2*i+1]-1]);
+			_assert_(iomodel->my_vertices[(int)iomodel->f(PenaltiesEnum)[2*i+1]-1]);
 
 			/*Skip if one of the two is not on the bed*/
-			if(!iomodel->nodeonbed[(int)iomodel->penalties[2*i+0]-1] || !iomodel->nodeonbed[(int)iomodel->penalties[2*i+1]-1]) continue;
+			if(!nodeonbed[(int)penalties[2*i+0]-1] || !nodeonbed[(int)penalties[2*i+1]-1]) continue;
 
 			/*Get node ids*/
-			penpair_ids[0]=iomodel->nodecounter+(int)iomodel->penalties[2*i+0];
-			penpair_ids[1]=iomodel->nodecounter+(int)iomodel->penalties[2*i+1];
+			penpair_ids[0]=iomodel->nodecounter+(int)penalties[2*i+0];
+			penpair_ids[1]=iomodel->nodecounter+(int)penalties[2*i+1];
 
 			/*Create Load*/
@@ -90,6 +87,6 @@
 
 	/*free ressources: */
-	xfree((void**)&iomodel->penalties);
-	xfree((void**)&iomodel->nodeonbed);
+	xfree((void**)&penalties);
+	xfree((void**)&nodeonbed);
 
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 9372)
@@ -49,12 +49,5 @@
 
 	/*First fetch data: */
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
-
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	if(continuous_galerkin){
 
@@ -79,5 +72,5 @@
 
 					//Get index of the vertex on which the current node is located
-					vertex_id=(int)*(iomodel->elements+3*i+j); //(Matlab indexing)
+					vertex_id=(int)*(iomodel->f(ElementsEnum)+3*i+j); //(Matlab indexing)
 					io_index=vertex_id-1;                      //(C indexing)
 					_assert_(vertex_id>0 && vertex_id<=numberofvertices);
@@ -95,11 +88,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 9372)
@@ -22,7 +22,7 @@
 	/*Fetch data needed: */
 	iomodel->constants->FindParam(&dim,DimEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
 	iomodel->constants->FindParam(&numberofelements,NumberOfElementsEnum);
 	iomodel->constants->FindParam(&prognostic_DG,PrognosticDGEnum);
+	iomodel->FetchData(1,ElementsEnum);
 
 	/*Update elements: */
@@ -61,4 +61,4 @@
 	
 	/*Free data: */
-	xfree((void**)&iomodel->elements);
+	iomodel->DeleteData(1,ElementsEnum);
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 9372)
@@ -206,7 +206,4 @@
 		}
 		xfree((void**)&variabledescriptors);
-
-		xfree((void**)&iomodel->elements);
-		xfree((void**)&iomodel->elements2d);
 		xfree((void**)&part);
 		xfree((void**)&dpart);
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 9372)
@@ -36,6 +36,5 @@
 
 	//create penalties for nodes: no node can have a temperature over the melting point
-	iomodel->FetchData(&iomodel->spctemperature,NULL,NULL,SpctemperatureEnum);
-	iomodel->FetchData(&iomodel->elements,NULL,NULL,ElementsEnum);
+	iomodel->FetchData(2,SpctemperatureEnum,ElementsEnum);
 	CreateSingleNodeToElementConnectivity(iomodel);
 
@@ -44,15 +43,10 @@
 		/*keep only this partition's nodes:*/
 		if((iomodel->my_vertices[i]==1)){
-
-			if (isnan(iomodel->spctemperature[i])){ //No penalty applied on spc nodes!
-
+			if (isnan(iomodel->f(SpctemperatureEnum)[i])){ //No penalty applied on spc nodes!
 				loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,ThermalAnalysisEnum));
-						
 			}
 		}
 	}
-	xfree((void**)&iomodel->spctemperature);
-	xfree((void**)&iomodel->elements);
-	xfree((void**)&iomodel->singlenodetoelementconnectivity);
+	iomodel->DeleteData(2,SpctemperatureEnum,ElementsEnum);
 
 	/*Assign output pointer: */
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 9371)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 9372)
@@ -36,15 +36,9 @@
 
 	/*Create nodes and vertices: */
-	iomodel->FetchData(&iomodel->nodeonbed,NULL,NULL,NodeOnBedEnum);
-	iomodel->FetchData(&iomodel->nodeonsurface,NULL,NULL,NodeOnSurfaceEnum);
-	iomodel->FetchData(&iomodel->nodeonicesheet,NULL,NULL,NodeOnIceSheetEnum);
-	iomodel->FetchData(&iomodel->nodeoniceshelf,NULL,NULL,NodeOnIceShelfEnum);
-	iomodel->FetchData(&iomodel->vertices_type,NULL,NULL,VerticesTypeEnum);
-	iomodel->FetchData(&iomodel->nodeonwater,NULL,NULL,NodeOnWaterEnum);
+	iomodel->FetchData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 
 	for (i=0;i<numberofvertices;i++){
 
 		if(iomodel->my_vertices[i]){
-			
 			/*Add node to nodes dataset: */
 			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i+1,i,iomodel,ThermalAnalysisEnum));
@@ -54,10 +48,5 @@
 
 	/*Clean fetched data: */
-	xfree((void**)&iomodel->nodeonbed);
-	xfree((void**)&iomodel->nodeonsurface);
-	xfree((void**)&iomodel->nodeonicesheet);
-	xfree((void**)&iomodel->nodeonwater);
-	xfree((void**)&iomodel->nodeoniceshelf);
-	xfree((void**)&iomodel->vertices_type);	
+	iomodel->DeleteData(6,NodeOnBedEnum,NodeOnSurfaceEnum,NodeOnIceSheetEnum,NodeOnIceShelfEnum,VerticesTypeEnum,NodeOnWaterEnum);
 	
 	/*Assign output pointer: */
