Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness/CreateNodesBalancedthickness.cpp	(revision 4117)
@@ -46,5 +46,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,BalancedthicknessAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,BalancedthicknessAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedthickness2/CreateNodesBalancedthickness2.cpp	(revision 4117)
@@ -18,6 +18,7 @@
 	int i,j;
 	bool continuous_galerkin=false;
-	int  vertex_index;
-	int node_index;
+	int  node_id;
+	int  vertex_id;
+	int  io_index;
 
 	/*DataSets: */
@@ -53,12 +54,13 @@
 
 				//Get index of the vertex on which the current node is located
-				vertex_index=(int)*(iomodel->elements+3*i+j)-1; //(Matlab to C indexing)
-				ISSMASSERT(vertex_index>=0 && vertex_index<iomodel->numberofvertices);
+				vertex_id=(int)*(iomodel->elements+3*i+j); //(Matlab indexing)
+				io_index=vertex_id-1;                      //(C indexing)
+				ISSMASSERT(vertex_id>0 && vertex_id<=iomodel->numberofvertices);
 
-				//Compute Node index (id-1)
-				node_index=3*i+j;
+				//Compute Node id
+				node_id=iomodel->nodecounter+3*i+j+1;
 
 				/*Add node to nodes dataset: */
-				nodes->AddObject(new Node(iomodel->nodecounter+i+1,vertex_index,node_index,iomodel,Balancedthickness2AnalysisEnum));
+				nodes->AddObject(new Node(node_id,vertex_id,io_index,iomodel,Balancedthickness2AnalysisEnum));
 
 			}
Index: /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Balancedvelocities/CreateNodesBalancedvelocities.cpp	(revision 4117)
@@ -46,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,BalancedvelocitiesAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,BalancedvelocitiesAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHoriz/CreateNodesDiagnosticHoriz.cpp	(revision 4117)
@@ -51,5 +51,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(totalnodes+i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
+			nodes->AddObject(new Node(totalnodes+i+1,i+1,i,iomodel,DiagnosticHorizAnalysisEnum));
 		}
 	}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticHutter/CreateNodesDiagnosticHutter.cpp	(revision 4117)
@@ -52,5 +52,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,DiagnosticHutterAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,DiagnosticHutterAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticStokes/CreateNodesDiagnosticStokes.cpp	(revision 4117)
@@ -50,5 +50,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,DiagnosticStokesAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,DiagnosticStokesAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/DiagnosticVert/CreateNodesDiagnosticVert.cpp	(revision 4117)
@@ -47,5 +47,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,DiagnosticVertAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,DiagnosticVertAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Melting/CreateNodesMelting.cpp	(revision 4117)
@@ -46,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,MeltingAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,MeltingAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 4117)
@@ -41,5 +41,5 @@
 		analysis_type=analysis_type_list[i];
 	
-		_printf_("   create datasets for this analysis type:\n");
+		_printf_("   create datasets for analysis %s\n",EnumAsString(analysis_type));
 		CreateDataSets(&elements,&nodes,&vertices,&materials,&constraints,&loads,&parameters,iomodel,IOMODEL,solution_type,analysis_type,nummodels,i);
 	}
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic/CreateNodesPrognostic.cpp	(revision 4117)
@@ -46,5 +46,5 @@
 
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,PrognosticAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,PrognosticAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Prognostic2/CreateNodesPrognostic2.cpp	(revision 4117)
@@ -17,7 +17,8 @@
 	/*Intermediary*/
 	int i,j;
-	int vertex_index;
-	int node_index;
 	bool continuous_galerkin=false;
+	int  node_id;
+	int  vertex_id;
+	int  io_index;
 
 	/*DataSets: */
@@ -52,12 +53,13 @@
 
 				//Get index of the vertex on which the current node is located
-				vertex_index=(int)*(iomodel->elements+3*i+j)-1; //(Matlab to C indexing)
-				ISSMASSERT(vertex_index>=0 && vertex_index<iomodel->numberofvertices);
+				vertex_id=(int)*(iomodel->elements+3*i+j); //(Matlab indexing)
+				io_index=vertex_id-1;                      //(C indexing)
+				ISSMASSERT(vertex_id>0 && vertex_id<=iomodel->numberofvertices);
 
-				//Compute Node index (id-1)
-				node_index=3*i+j;
+				//Compute Node id
+				node_id=iomodel->nodecounter+3*i+j+1;
 
 				/*Add node to nodes dataset: */
-				nodes->AddObject(new Node(iomodel->nodecounter+node_index+1,vertex_index,node_index,iomodel,Prognostic2AnalysisEnum));
+				nodes->AddObject(new Node(node_id,vertex_id,io_index,iomodel,Balancedthickness2AnalysisEnum));
 
 			}
Index: /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeCompute.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeCompute.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/SlopeCompute/CreateNodesSlopeCompute.cpp	(revision 4117)
@@ -46,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,SlopeAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,SlopeAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp
===================================================================
--- /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 4116)
+++ /issm/trunk/src/c/modules/ModelProcessorx/Thermal/CreateNodesThermal.cpp	(revision 4117)
@@ -46,5 +46,5 @@
 			
 			/*Add node to nodes dataset: */
-			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,iomodel,ThermalAnalysisEnum));
+			nodes->AddObject(new Node(iomodel->nodecounter+i+1,i+1,i,iomodel,ThermalAnalysisEnum));
 
 		}
Index: /issm/trunk/src/c/objects/FemModel.cpp
===================================================================
--- /issm/trunk/src/c/objects/FemModel.cpp	(revision 4116)
+++ /issm/trunk/src/c/objects/FemModel.cpp	(revision 4117)
@@ -56,25 +56,26 @@
 
 		analysis_type=analysis_type_list[i];
+		_printf_("   processing finite element model of analysis %s:\n",EnumAsString(analysis_type));
 	
-		_printf_("   create degrees of freedom: \n");
+		_printf_("      create degrees of freedom\n");
 		VerticesDofx( &partition,&tpartition,vertices,parameters);
 		NodesDofx(nodes,parameters);
 
-		_printf_("   create single point constraints: \n");
+		_printf_("      create single point constraints\n");
 		SpcNodesx( &m_yg[i], nodes,constraints,analysis_type); 
 
-		_printf_("   create rigid body constraints:\n");
+		_printf_("      create rigid body constraints\n");
 		MpcNodesx( &m_Rmg[i], nodes,constraints,analysis_type); 
 
-		_printf_("   create node sets:\n");
+		_printf_("      create node sets\n");
 		BuildNodeSetsx(&m_nodesets[i], nodes,analysis_type);
 
-		_printf_("   reducing single point constraints vector:\n");
+		_printf_("      reducing single point constraints vector\n");
 		Reducevectorgtosx(&m_ys[i], m_yg[i],m_nodesets[i]);
 
-		_printf_("   normalizing rigid body constraints matrix:\n");
+		_printf_("      normalizing rigid body constraints matrix\n");
 		NormalizeConstraintsx(&m_Gmn[i], m_Rmg[i],m_nodesets[i]);
 
-		_printf_("   configuring element and loads:\n");
+		_printf_("      configuring element and loads\n");
 		ConfigureObjectsx(elements, loads, nodes, vertices, materials,parameters);
 	}
Index: /issm/trunk/src/c/objects/Node.cpp
===================================================================
--- /issm/trunk/src/c/objects/Node.cpp	(revision 4116)
+++ /issm/trunk/src/c/objects/Node.cpp	(revision 4117)
@@ -54,10 +54,10 @@
 }
 /*}}}*/
-/*FUNCTION Node::Node(int id, int i, IoModel* iomodel,int analysis_type)          -> Continuous Galerkin{{{2*/
-Node::Node(int node_id, int i, IoModel* iomodel,int analysis_type){ //i is the node index
-
+/*FUNCTION Node::Node(int node_id,int vertex_id,int io_index, IoModel* iomodel,int analysis_type) {{{2*/
+Node::Node(int node_id,int vertex_id,int io_index, IoModel* iomodel,int analysis_type){
+
+	/*Intermediary*/
 	int k;
 	int numdofs;
-	int vertex_id;
 	int upper_node_id;
 
@@ -68,16 +68,13 @@
 	/*indexing:*/
 	DistributeNumDofs(&numdofs,analysis_type); //number of dofs per node
-
 	this->indexing.Init(numdofs);
 
 	/*hooks: */
-	vertex_id=this->id; //node and vertex have the same id, as we are running galerkin continuous, with same number of nodes and vertices.
-
 	if (iomodel->dim==3){
-		if (isnan(iomodel->uppernodes[i])){
+		if (isnan(iomodel->uppernodes[io_index])){
 			upper_node_id=this->id; //nodes on surface do not have upper nodes, only themselves.
 		}
 		else{
-			upper_node_id=(int)iomodel->uppernodes[i];
+			upper_node_id=(int)iomodel->uppernodes[io_index];
 		}
 	}
@@ -89,4 +86,12 @@
 	this->hvertex.Init(&vertex_id,1); //node id is the same as the vertex id, continuous galerkin!
 	this->hupper_node.Init(&upper_node_id,1);
+
+	//intialize inputs, and add as many inputs per element as requested: 
+	this->inputs=new Inputs();
+	if (iomodel->gridonbed)      this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->gridonbed[io_index]));
+	if (iomodel->gridonsurface)  this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->gridonsurface[io_index]));
+	if (iomodel->gridoniceshelf) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->gridoniceshelf[io_index]));
+	if (iomodel->gridonicesheet) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->gridonicesheet[io_index]));
+	if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,iomodel->numbernodetoelementconnectivity[io_index]));
 
 	/*set single point constraints: */
@@ -97,5 +102,5 @@
 			/*We have a  3d mesh, we may have collapsed elements, hence dead grids. Freeze them out: */
 			if (!iomodel->deadgrids) ISSMERROR("iomodel->deadgrids is NULL");
-			if (iomodel->deadgrids[i]){
+			if (iomodel->deadgrids[io_index]){
 				for(k=1;k<=numdofs;k++){
 					this->FreezeDof(k);
@@ -105,5 +110,5 @@
 		/*spc all nodes on hutter*/
 		if (!iomodel->gridonhutter) ISSMERROR("iomodel->gridonhutter is NULL");
-		if (iomodel->gridonhutter[i]){
+		if (iomodel->gridonhutter[io_index]){
 			for(k=1;k<=numdofs;k++){
 				this->FreezeDof(k);
@@ -116,5 +121,5 @@
 		/*On a 3d mesh, in stokes formualtions, only stokes grids are free, the others are frozen: */
 		if (!iomodel->borderstokes) ISSMERROR("iomodel->borderstokes is NULL");
-		if (iomodel->borderstokes[i]){
+		if (iomodel->borderstokes[io_index]){
 			//freeze everything except pressure
 			this->FreezeDof(1);
@@ -122,5 +127,5 @@
 			this->FreezeDof(3);
 		}
-		else if (iomodel->gridonstokes[i]==0){
+		else if (iomodel->gridonstokes[io_index]==0){
 			for(k=1;k<=numdofs;k++){
 				this->FreezeDof(k);
@@ -133,5 +138,5 @@
 		/*Spc all nodes that are not Hutter*/
 		if (!iomodel->gridonhutter) ISSMERROR("iomodel->gridonhutter is NULL");
-		if (!iomodel->gridonhutter[i]){
+		if (!iomodel->gridonhutter[io_index]){
 			for(k=1;k<=numdofs;k++){
 				this->FreezeDof(k);
@@ -151,5 +156,5 @@
 			/*On a 3d mesh, we may have collapsed elements, hence dead grids. Freeze them out: */
 			if (!iomodel->gridonbed) ISSMERROR("iomodel->gridonbed is NULL");
-			if (!iomodel->gridonbed[i]){
+			if (!iomodel->gridonbed[io_index]){
 				for(k=1;k<=numdofs;k++){
 					this->FreezeDof(k);
@@ -158,60 +163,4 @@
 		}
 	}
-	
-	//intialize inputs, and add as many inputs per element as requested: 
-	this->inputs=new Inputs();
-	if (iomodel->gridonbed)      this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->gridonbed[i]));
-	if (iomodel->gridonsurface)  this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->gridonsurface[i]));
-	if (iomodel->gridoniceshelf) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->gridoniceshelf[i]));
-	if (iomodel->gridonicesheet) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->gridonicesheet[i]));
-	if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,iomodel->numbernodetoelementconnectivity[i]));
-
-}
-/*}}}*/
-/*FUNCTION Node::Node(int id, int i, int j, IoModel* iomodel,int analysis_type)   -> Discontinuous Galerkin{{{2*/
-Node::Node(int node_id,int i,int j,IoModel* iomodel,int analysis_type){
-	/* i -> index of the vertex in C indexing
-	 * j -> index of the node in C indexing*/
-
-	int numdofs;
-	int vertex_id;
-	int upper_node_id;
-
-	/*id: */
-	this->id=node_id; //matlab indexing
-	this->analysis_type=analysis_type;
-
-	/*indexing:*/
-	DistributeNumDofs(&numdofs,analysis_type); //number of dofs per node
-
-	this->indexing.Init(numdofs);
-
-	
-	/*hooks: */
-	vertex_id=i+1; //matlab indexing
-
-	if (iomodel->dim==3){
-		if (isnan(iomodel->uppernodes[i])){
-			upper_node_id=this->id; //nodes on surface do not have upper nodes, only themselves.
-		}
-		else{
-			upper_node_id=(int)iomodel->uppernodes[i];
-		}
-	}
-	else{
-		/*If we are running 2d, upper_node does not mean much. Just point towards itself!:*/
-		upper_node_id=this->id;
-	}
-
-	this->hvertex.Init(&vertex_id,1);
-	this->hupper_node.Init(&upper_node_id,1);
-	
-	//intialize inputs, and add as many inputs per element as requested: 
-	this->inputs=new Inputs();
-	if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->gridonbed[i]));
-	if (iomodel->gridonsurface) this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->gridonsurface[i]));
-	if (iomodel->gridoniceshelf) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->gridoniceshelf[i]));
-	if (iomodel->gridonicesheet) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->gridonicesheet[i]));
-
 
 }
@@ -420,9 +369,10 @@
 }
 /*}}}*/
-/*FUNCTION Node::InAnalysis(int analysis_type){{{1*/
+/*FUNCTION Node::InAnalysis(int analysis_type){{{2*/
 bool Node::InAnalysis(int in_analysis_type){
 	if (in_analysis_type=this->analysis_type)return true;
 	else return false;
 }
+/*}}}*/
 /*}}}*/
 /*Object numerics: {{{1*/
Index: /issm/trunk/src/c/objects/Node.h
===================================================================
--- /issm/trunk/src/c/objects/Node.h	(revision 4116)
+++ /issm/trunk/src/c/objects/Node.h	(revision 4117)
@@ -36,6 +36,5 @@
 		Node(int id,int vertex_id, int upper_node_id, int numberofdofs);
 		Node(int id,DofIndexing* indexing, Hook* vertex, Hook* upper_node, Inputs* inputs,int analysis_type);
-		Node(int id, int i, IoModel* iomodel,int analysis_type);
-		Node(int id, int i,int j,IoModel* iomodel,int analysis_type);
+		Node(int node_id,int vertex_id,int io_index, IoModel* iomodel,int analysis_type);
 		~Node();
 		/*}}}*/
