Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -23,9 +22,9 @@
 	DataSet*    nodes = NULL;
 
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -47,5 +46,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -60,10 +59,5 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=false;
 
@@ -23,9 +22,9 @@
 	DataSet* nodes = NULL;
 
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -59,5 +58,5 @@
 
 				/*Add node to nodes dataset: */
-				nodes->AddObject(new Node(i+1,vertex_index,node_index,iomodel));
+				nodes->AddObject(new Node(iomodel->nodecounter+i+1,vertex_index,node_index,iomodel));
 
 			}
@@ -75,8 +74,4 @@
 	xfree((void**)&iomodel->elements);
 
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -23,9 +22,9 @@
 	DataSet*    nodes = NULL;
 
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -47,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -60,10 +59,5 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 	
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 4005)
@@ -17,4 +17,5 @@
 	/*Intermediary*/
 	int i;
+	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -22,12 +23,12 @@
 	DataSet*    nodes = NULL;
 
-	/*Recover pointer: */
-	nodes=*pnodes;
-
-	/*Create nodes if they do not exist yet*/
-	if(!nodes) nodes = new DataSet(NodesEnum);
+	/*First create nodes*/
+	nodes = new DataSet(NodesEnum);
 	
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
 	if (!iomodel->ismacayealpattyn)goto cleanup_and_return;
+
+	/*Recover number of nodes already created in other analyses: */
+	totalnodes=iomodel->nodecounter;
 
 	/*Continuous Galerkin partition of nodes: */
@@ -50,9 +51,12 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
+			nodes->AddObject(new Node(totalnodes+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
 		}
 	}
 
-	
+	/*Increase nodecounter for other analyses to start their node indexing correctly: */
+	totalnodes+=iomodel->numberofvertices;
+	iomodel->nodecounter=totalnodes;
+
 	/*Clean fetched data: */
 	xfree((void**)&iomodel->gridonbed);
@@ -64,5 +68,10 @@
 	xfree((void**)&iomodel->uppernodes);
 
+	/*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: */
+	nodes->Presort();
+
 	/*Assign output pointer: */
 	*pnodes=nodes;
+
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -23,12 +22,12 @@
 	DataSet*    nodes = NULL;
 
-	/*First create nodes*/ 
-	nodes     = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Now, is the flag ishutter on? otherwise, do nothing: */
 	if (!iomodel->ishutter)goto cleanup_and_return;
-
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
 
 	/*Continuous Galerkin partition of nodes: */
@@ -53,5 +52,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -69,8 +68,4 @@
 	xfree((void**)&iomodel->numbernodetoelementconnectivity);
 
-	/*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: */
-	elements->Presort();
-
 	cleanup_and_return:
 
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -23,13 +22,13 @@
 	DataSet*    nodes = NULL;
 
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Now, do we have Stokes elements?*/
-	if (iomodel->dim==2) goto cleanup_and_return;
-	if (!iomodel->isstokes)                goto cleanup_and_return;
-
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	if (iomodel->dim==2)    goto cleanup_and_return;
+	if (!iomodel->isstokes) goto cleanup_and_return;
 
 	/*Continuous Galerkin partition of nodes: */
@@ -51,5 +50,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -66,12 +65,7 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 
-	/*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: */
-	nodes->Presort();
-
 	cleanup_and_return:
 
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -23,12 +22,12 @@
 	DataSet*    nodes = NULL;
 
-	/*First create the elements, nodes and material properties: */
-	nodes     = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Now, is the flag macayaealpattyn on? otherwise, do nothing: */
 	if (iomodel->dim==2)goto cleanup_and_return;
-
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
 
 	/*Continuous Galerkin partition of nodes: */
@@ -48,5 +47,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -61,12 +60,7 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 	
-	/*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: */
-	nodes->Presort();
-
 	cleanup_and_return:
 
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 4005)
@@ -17,15 +17,14 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
 	/*DataSets: */
 	DataSet*    nodes = NULL;
-	
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Recover pointer: */
+	nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -47,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -60,8 +59,4 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 4005)
@@ -17,15 +17,14 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
 	/*DataSets: */
 	DataSet*    nodes = NULL;
-	
-	/*First create nodes*/ 
-	nodes     = new DataSet(NodesEnum);
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Recover pointer: */
+	nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -47,5 +46,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -60,10 +59,5 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp	(revision 4005)
@@ -19,5 +19,4 @@
 	int vertex_index;
 	int node_index;
-	int totalnodes;
 	bool continuous_galerkin=false;
 
@@ -25,9 +24,9 @@
 	DataSet* nodes = NULL;
 
-	/*First create nodes*/ 
-	nodes     = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -60,5 +59,5 @@
 
 				/*Add node to nodes dataset: */
-				nodes->AddObject(new Node(node_index+1,vertex_index,node_index,iomodel));
+				nodes->AddObject(new Node(iomodel->nodecounter+node_index+1,vertex_index,node_index,iomodel));
 
 			}
@@ -75,8 +74,4 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
Index: /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeConpute.cpp	(revision 4005)
@@ -17,16 +17,15 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
 	/*DataSets: */
 	DataSet*    nodes = NULL;
+
+	/*Recover pointer: */
+	nodes=*pnodes;
+
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 	
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
-
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
-
 	/*Continuous Galerkin partition of nodes: */
 	NodesPartitioning(&iomodel->my_nodes,iomodel->my_elements, iomodel->my_vertices, iomodel->my_bordervertices, iomodel, iomodel_handle,continuous_galerkin);
@@ -47,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -60,10 +59,5 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 	
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 4004)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 4005)
@@ -17,5 +17,4 @@
 	/*Intermediary*/
 	int i;
-	int totalnodes;
 	bool continuous_galerkin=true;
 
@@ -23,9 +22,9 @@
 	DataSet*    nodes = NULL;
 	
-	/*First create nodes*/ 
-	nodes = new DataSet(NodesEnum);
+	/*Recover pointer: */
+	nodes=*pnodes;
 
-	/*Recover number of nodes already created in other analyses: */
-	totalnodes=iomodel->nodecounter;
+	/*Create nodes if they do not exist yet*/
+	if(!nodes) nodes = new DataSet(NodesEnum);
 
 	/*Continuous Galerkin partition of nodes: */
@@ -47,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(i+1,i,iomodel));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel));
 
 		}
@@ -60,10 +59,5 @@
 	xfree((void**)&iomodel->gridoniceshelf);
 	
-	/*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: */
-	nodes->Presort();
-
 	/*Assign output pointer: */
 	*pnodes=nodes;
-
 }
