Index: issm/trunk/src/c/ComputePressurex/ComputePressurex.cpp
===================================================================
--- issm/trunk/src/c/ComputePressurex/ComputePressurex.cpp	(revision 3445)
+++ issm/trunk/src/c/ComputePressurex/ComputePressurex.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void	ComputePressurex( Vec* pp_g,DataSet* elements,DataSet* nodes,DataSet* loads, DataSet* materials,DataSet* parameters){
+void	ComputePressurex( Vec* pp_g,DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads, DataSet* materials,DataSet* parameters){
 
 	int i;
@@ -27,6 +27,6 @@
 
 	/*Get elements configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Call on dataset driver: */
Index: issm/trunk/src/c/ComputePressurex/ComputePressurex.h
===================================================================
--- issm/trunk/src/c/ComputePressurex/ComputePressurex.h	(revision 3445)
+++ issm/trunk/src/c/ComputePressurex/ComputePressurex.h	(revision 3446)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void	ComputePressurex( Vec* pp_g,DataSet* elements,DataSet* nodes,DataSet* loads, DataSet* materials,  DataSet* parameters);
+void	ComputePressurex( Vec* pp_g,DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads, DataSet* materials,  DataSet* parameters);
 
 #endif  /* _COMPUTEPRESSUREX_H */
Index: issm/trunk/src/c/ConfigureObjectsx/ConfigureObjectsx.cpp
===================================================================
--- issm/trunk/src/c/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 3445)
+++ issm/trunk/src/c/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-int	ConfigureObjectsx( DataSet* elements, DataSet* loads, DataSet* nodes,vertices, DataSet* materials,DataSet* parameters){
+int	ConfigureObjectsx( DataSet* elements, DataSet* loads, DataSet* nodes, DataSet* vertices, DataSet* materials,DataSet* parameters){
 
 	int noerr=1;
@@ -24,6 +24,4 @@
 	//_printf_("      Configuring nodes...\n");
 	nodes->Configure(elements,loads,nodes,vertices,materials,parameters);
-	//_printf_("      Configuring vertices...\n");
-	vertices->Configure(elements,loads,vertices,materials,parameters);
 	//_printf_("      Configuring parameters...\n");
 	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
Index: issm/trunk/src/c/CostFunctionx/CostFunctionx.cpp
===================================================================
--- issm/trunk/src/c/CostFunctionx/CostFunctionx.cpp	(revision 3445)
+++ issm/trunk/src/c/CostFunctionx/CostFunctionx.cpp	(revision 3446)
@@ -11,5 +11,5 @@
 #include "../SurfaceAreax/SurfaceAreax.h"
 
-void CostFunctionx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,DataSet* parameters,
+void CostFunctionx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials,DataSet* parameters,
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 
@@ -23,6 +23,6 @@
 	
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*If fit=3, compute Surface Area*/
@@ -30,5 +30,5 @@
 	if (fit==3 && !inputs->IsPresent("surfacearea")){
 
-		SurfaceAreax(&S,elements,nodes,loads,materials,parameters,inputs,analysis_type,sub_analysis_type);
+		SurfaceAreax(&S,elements,nodes,vertices,loads,materials,parameters,inputs,analysis_type,sub_analysis_type);
 		inputs->Add("surfacearea",S);
 	}
Index: issm/trunk/src/c/CostFunctionx/CostFunctionx.h
===================================================================
--- issm/trunk/src/c/CostFunctionx/CostFunctionx.h	(revision 3445)
+++ issm/trunk/src/c/CostFunctionx/CostFunctionx.h	(revision 3446)
@@ -7,7 +7,8 @@
 
 #include "../DataSet/DataSet.h"
+#include "../objects/objects.h"
 
 /* local prototypes: */
-void CostFunctionx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters, 
+void CostFunctionx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters, 
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
 
Index: issm/trunk/src/c/DataSet/DataSet.cpp
===================================================================
--- issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3445)
+++ issm/trunk/src/c/DataSet/DataSet.cpp	(revision 3446)
@@ -1650,18 +1650,18 @@
 }
 /*}}}*/
-/*FUNCTION DataSet::UpdateNodePositions{{{1*/
-void  DataSet::UpdateNodePositions(double* thickness,double* bed){
-
-	vector<Object*>::iterator object;
-	Node* node=NULL;
-
-	for ( object=objects.begin() ; object < objects.end(); object++ ){
-
-		if((*object)->Enum()==NodeEnum()){
-
-			node=(Node*)(*object);
-			node->UpdateNodePosition(thickness,bed);
-		}
-	}
-}
-/*}}}*/
+/*FUNCTION DataSet::UpdateVertexPositions{{{1*/
+void  DataSet::UpdateVertexPositions(double* thickness,double* bed){
+
+	vector<Object*>::iterator object;
+	Vertex* vertex=NULL;
+
+	for ( object=objects.begin() ; object < objects.end(); object++ ){
+
+		if((*object)->Enum()==VertexEnum()){
+
+			vertex=(Vertex*)(*object);
+			vertex->UpdatePosition(thickness,bed);
+		}
+	}
+}
+/*}}}*/
Index: issm/trunk/src/c/DataSet/DataSet.h
===================================================================
--- issm/trunk/src/c/DataSet/DataSet.h	(revision 3445)
+++ issm/trunk/src/c/DataSet/DataSet.h	(revision 3446)
@@ -94,5 +94,5 @@
 		int   FindResult(void* pvalue, char* name);
 		void  FieldExtrude(Vec field,double* field_serial,char* field_name, int collapse);
-		void  UpdateNodePositions(double* thickness,double* bed);
+		void  UpdateVertexPositions(double* thickness,double* bed);
 		void  OutputRifts(Vec riftproperties);
 		/*}}}*/
Index: issm/trunk/src/c/Dofx/Dofx.h
===================================================================
--- issm/trunk/src/c/Dofx/Dofx.h	(revision 3445)
+++ issm/trunk/src/c/Dofx/Dofx.h	(revision 3446)
@@ -7,4 +7,5 @@
 
 #include "../DataSet/DataSet.h"
+#include "../objects/objects.h"
 
 /* local prototypes: */
Index: issm/trunk/src/c/Dux/Dux.cpp
===================================================================
--- issm/trunk/src/c/Dux/Dux.cpp	(revision 3445)
+++ issm/trunk/src/c/Dux/Dux.cpp	(revision 3446)
@@ -11,5 +11,5 @@
 #include "../SurfaceAreax/SurfaceAreax.h"
 
-void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,
+void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 
@@ -25,6 +25,6 @@
 
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes, vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes, vertices, materials,parameters);
 
 	/*If fit=3, compute Surface Area*/
@@ -32,5 +32,5 @@
 	if (fit==3 && !inputs->IsPresent("surfacearea")){
 
-		SurfaceAreax(&S,elements,nodes,loads,materials,parameters,inputs,analysis_type,sub_analysis_type);
+		SurfaceAreax(&S,elements,nodes,vertices, loads,materials,parameters,inputs,analysis_type,sub_analysis_type);
 		inputs->Add("surfacearea",S);
 	}
Index: issm/trunk/src/c/Dux/Dux.h
===================================================================
--- issm/trunk/src/c/Dux/Dux.h	(revision 3445)
+++ issm/trunk/src/c/Dux/Dux.h	(revision 3446)
@@ -6,8 +6,9 @@
 #define _DUX_H
 
+#include "../objects/objects.h"
 #include "../DataSet/DataSet.h"
 
 /* local prototypes: */
-void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters, 
+void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters, 
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
 
Index: issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp
===================================================================
--- issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp	(revision 3445)
+++ issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.cpp	(revision 3446)
@@ -10,12 +10,12 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
+void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
 
 	double* field_serial=NULL;
 
 	/*First, get elements and nodes configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	nodes->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	nodes->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Serialize field: */
Index: issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h
===================================================================
--- issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h	(revision 3445)
+++ issm/trunk/src/c/FieldAverageOntoVerticesx/FieldAverageOntoVerticesx.h	(revision 3446)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
+void FieldAverageOntoVerticesx( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
 
 #endif  /* _FIELDDEPTHAVERAGEX_H */
Index: issm/trunk/src/c/FieldDepthAveragex/FieldDepthAveragex.cpp
===================================================================
--- issm/trunk/src/c/FieldDepthAveragex/FieldDepthAveragex.cpp	(revision 3445)
+++ issm/trunk/src/c/FieldDepthAveragex/FieldDepthAveragex.cpp	(revision 3446)
@@ -10,12 +10,12 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void FieldDepthAveragex( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
+void FieldDepthAveragex( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname){
 
 	double* field_serial=NULL;
 
 	/*First, get elements and nodes configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	nodes->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	nodes->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Serialize field: */
Index: issm/trunk/src/c/FieldDepthAveragex/FieldDepthAveragex.h
===================================================================
--- issm/trunk/src/c/FieldDepthAveragex/FieldDepthAveragex.h	(revision 3445)
+++ issm/trunk/src/c/FieldDepthAveragex/FieldDepthAveragex.h	(revision 3446)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void FieldDepthAveragex( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
+void FieldDepthAveragex( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* fieldname);
 
 #endif  /* _FIELDDEPTHAVERAGEX_H */
Index: issm/trunk/src/c/FieldExtrudex/FieldExtrudex.cpp
===================================================================
--- issm/trunk/src/c/FieldExtrudex/FieldExtrudex.cpp	(revision 3445)
+++ issm/trunk/src/c/FieldExtrudex/FieldExtrudex.cpp	(revision 3446)
@@ -10,12 +10,12 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void FieldExtrudex( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* field_name,int collapse){
+void FieldExtrudex( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* field_name,int collapse){
 
 	double* field_serial=NULL;
 
 	/*First, get elements and nodes configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	nodes->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	nodes->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Serialize field: */
Index: issm/trunk/src/c/FieldExtrudex/FieldExtrudex.h
===================================================================
--- issm/trunk/src/c/FieldExtrudex/FieldExtrudex.h	(revision 3445)
+++ issm/trunk/src/c/FieldExtrudex/FieldExtrudex.h	(revision 3446)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-void FieldExtrudex( Vec field, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,char* field_name, int collapse);
+void FieldExtrudex( Vec field, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,char* field_name, int collapse);
 
 #endif  /* _FIELDEXTRUDEX_H */
Index: issm/trunk/src/c/Gradjx/Gradjx.cpp
===================================================================
--- issm/trunk/src/c/Gradjx/Gradjx.cpp	(revision 3445)
+++ issm/trunk/src/c/Gradjx/Gradjx.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,
+void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){
 
@@ -17,6 +17,6 @@
 
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Allocate grad_g: */
Index: issm/trunk/src/c/Gradjx/Gradjx.h
===================================================================
--- issm/trunk/src/c/Gradjx/Gradjx.h	(revision 3445)
+++ issm/trunk/src/c/Gradjx/Gradjx.h	(revision 3446)
@@ -7,7 +7,8 @@
 
 #include "../DataSet/DataSet.h"
+#include "../objects/objects.h"
 
 /* local prototypes: */
-void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,  DataSet* parameters,
+void Gradjx( Vec* pgrad_g, int numberofnodes, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials,  DataSet* parameters,
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type);
 
Index: issm/trunk/src/c/Makefile.am
===================================================================
--- issm/trunk/src/c/Makefile.am	(revision 3445)
+++ issm/trunk/src/c/Makefile.am	(revision 3446)
@@ -270,6 +270,6 @@
 					./UpdateGeometryx/UpdateGeometryx.h\
 					./UpdateGeometryx/UpdateGeometryx.cpp\
-					./UpdateNodePositionsx/UpdateNodePositionsx.h\
-					./UpdateNodePositionsx/UpdateNodePositionsx.cpp\
+					./UpdateVertexPositionsx/UpdateVertexPositionsx.h\
+					./UpdateVertexPositionsx/UpdateVertexPositionsx.cpp\
 					./ConfigureObjectsx/ConfigureObjectsx.h\
 					./ConfigureObjectsx/ConfigureObjectsx.cpp\
@@ -666,6 +666,6 @@
 					./UpdateGeometryx/UpdateGeometryx.h\
 					./UpdateGeometryx/UpdateGeometryx.cpp\
-					./UpdateNodePositionsx/UpdateNodePositionsx.h\
-					./UpdateNodePositionsx/UpdateNodePositionsx.cpp\
+					./UpdateVertexPositionsx/UpdateVertexPositionsx.h\
+					./UpdateVertexPositionsx/UpdateVertexPositionsx.cpp\
 					./ConfigureObjectsx/ConfigureObjectsx.h\
 					./ConfigureObjectsx/ConfigureObjectsx.cpp\
Index: issm/trunk/src/c/MassFluxx/MassFluxx.cpp
===================================================================
--- issm/trunk/src/c/MassFluxx/MassFluxx.cpp	(revision 3445)
+++ issm/trunk/src/c/MassFluxx/MassFluxx.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials,DataSet* parameters,  double* segments,int num_segments,double* ug){
+void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads,DataSet* materials,DataSet* parameters,  double* segments,int num_segments,double* ug){
 
 	int i,j;
@@ -24,7 +24,7 @@
 
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	loads->Configure(elements, loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Go through segments, and then elements, and figure out which elements belong to a segment. 
Index: issm/trunk/src/c/MassFluxx/MassFluxx.h
===================================================================
--- issm/trunk/src/c/MassFluxx/MassFluxx.h	(revision 3445)
+++ issm/trunk/src/c/MassFluxx/MassFluxx.h	(revision 3446)
@@ -10,5 +10,5 @@
 
 /* local prototypes: */
-void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, DataSet* parameters,double* segments,int num_segments,double* ug);
+void MassFluxx(double* pmass_flux, DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads,DataSet* materials, DataSet* parameters,double* segments,int num_segments,double* ug);
 
 
Index: issm/trunk/src/c/Misfitx/Misfitx.cpp
===================================================================
--- issm/trunk/src/c/Misfitx/Misfitx.cpp	(revision 3445)
+++ issm/trunk/src/c/Misfitx/Misfitx.cpp	(revision 3446)
@@ -11,5 +11,5 @@
 #include "../SurfaceAreax/SurfaceAreax.h"
 
-void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,DataSet* parameters,
+void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials,DataSet* parameters,
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 	
@@ -23,6 +23,6 @@
 	
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*If fit=3, compute Surface Area*/
@@ -30,5 +30,5 @@
 	if (fit==3 && !inputs->IsPresent("surfacearea")){
 
-		SurfaceAreax(&S,elements,nodes,loads,materials,parameters,inputs,analysis_type,sub_analysis_type);
+		SurfaceAreax(&S,elements,nodes,vertices, loads,materials,parameters,inputs,analysis_type,sub_analysis_type);
 		inputs->Add("surfacearea",S);
 	}
Index: issm/trunk/src/c/Misfitx/Misfitx.h
===================================================================
--- issm/trunk/src/c/Misfitx/Misfitx.h	(revision 3445)
+++ issm/trunk/src/c/Misfitx/Misfitx.h	(revision 3446)
@@ -7,7 +7,8 @@
 
 #include "../DataSet/DataSet.h"
+#include "../objects/objects.h"
 
 /* local prototypes: */
-void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters, 
+void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters, 
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
 
Index: issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateConstraintsBalancedvelocities.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateConstraintsBalancedvelocities.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Balancedvelocities/CreateConstraintsBalancedvelocities.cpp	(revision 3446)
@@ -40,5 +40,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
@@ -57,5 +57,5 @@
 
 	#ifdef _PARALLEL_
-	} //if((my_grids[i]==1))
+	} //if((my_vertices[i]==1))
 	#endif
 	}
Index: issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp	(revision 3446)
@@ -48,5 +48,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i])){
+	if((iomodel->my_vertices[i])){
 	#endif
 
@@ -73,5 +73,5 @@
 
 	#ifdef _PARALLEL_
-	} //if((my_grids[i]))
+	} //if((my_vertices[i]))
 	#endif
 	}
Index: issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp	(revision 3446)
@@ -41,5 +41,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
@@ -77,5 +77,5 @@
 
 	#ifdef _PARALLEL_
-	} //if((my_grids[i]==1))
+	} //if((my_vertices[i]==1))
 	#endif
 	}
Index: issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp	(revision 3446)
@@ -86,5 +86,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
@@ -103,5 +103,5 @@
 		}
 	#ifdef _PARALLEL_
-	} //if((iomodel->my_grids[i]==1))
+	} //if((iomodel->my_vertices[i]==1))
 	#endif
 	}
Index: issm/trunk/src/c/ModelProcessorx/IoModel.h
===================================================================
--- issm/trunk/src/c/ModelProcessorx/IoModel.h	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/IoModel.h	(revision 3446)
@@ -180,5 +180,5 @@
 	bool*   my_vertices;
 	bool*   my_nodes;
-	double* my_bordervertices;
+	bool*   my_bordervertices;
 	int*    penaltypartitioning;
 
@@ -273,5 +273,5 @@
 	
 	/*partitioning: */
-	void  Partitioning(bool** pmy_elements, bool** pmy_vertices, bool** pmy_nodes, double** pmy_bordervertices, IoModel* iomodel, ConstDataHandle iomodel_handle);
+	void  Partitioning(bool** pmy_elements, bool** pmy_vertices, bool** pmy_nodes, bool** pmy_bordervertices, IoModel* iomodel, ConstDataHandle iomodel_handle);
 
 #endif  /* _IOMODEL_H */
Index: issm/trunk/src/c/ModelProcessorx/Melting/CreateLoadsMelting.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Melting/CreateLoadsMelting.cpp	(revision 3446)
@@ -52,5 +52,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
@@ -71,5 +71,5 @@
 		}
 	#ifdef _PARALLEL_
-	} //if((iomodel->my_grids[i]==1))
+	} //if((iomodel->my_vertices[i]==1))
 	#endif
 	}
Index: issm/trunk/src/c/ModelProcessorx/Partitioning.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Partitioning.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Partitioning.cpp	(revision 3446)
@@ -15,4 +15,5 @@
 #include "../include/macros.h"
 #include "../include/typedefs.h"
+#include "../MeshPartitionx/MeshPartitionx.h"
 
 void  DiscontinuousGalerkinPartitioning(bool** pmy_elements, bool** pmy_vertices, bool** pmy_nodes, bool** pmy_bordervertices, IoModel* iomodel, ConstDataHandle iomodel_handle);
@@ -135,5 +136,5 @@
 		my_bordervertices=(bool*)xcalloc(iomodel->numberofvertices,sizeof(bool));
 		for(i=0;i<iomodel->numberofvertices;i++){
-			if(serial_bordervertices>1)my_bordervertices[i]=1;
+			if(serial_bordervertices[i]>1)my_bordervertices[i]=1;
 		}
 	#else
Index: issm/trunk/src/c/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Prognostic/CreateConstraintsPrognostic.cpp	(revision 3446)
@@ -41,5 +41,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
@@ -59,5 +59,5 @@
 
 	#ifdef _PARALLEL_
-	} //if((my_grids[i]==1))
+	} //if((my_vertices[i]==1))
 	#endif
 	}
Index: issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Qmu/CreateParametersQmu.cpp	(revision 3446)
@@ -21,8 +21,6 @@
 	int      second_count;
 	
-	int*     epart=NULL;
 	int*     part=NULL;
 	double*  dpart=NULL;
-	int      elements_width;
 
 	char**  responsedescriptors=NULL;
@@ -173,22 +171,14 @@
 
 
-		/*partition grids in iomodel->qmu_npart parts, unless a partition is already present: */
+		/*partition vertices in iomodel->qmu_npart parts, unless a partition is already present: */
 		IoModelFetchData(&dpart,NULL,NULL,iomodel_handle,"part");
 
 		if(!dpart){
 
-			if(strcmp(iomodel->meshtype,"2d")==0){
-				IoModelFetchData(&iomodel->elements,NULL,NULL,iomodel_handle,"elements");
-				elements_width=3; //tria elements
-			}
-			else{
-				IoModelFetchData(&iomodel->elements2d,NULL,NULL,iomodel_handle,"elements2d");
-				elements_width=6; //penta elements
-			}
-
-			MeshPartitionx(&epart, &part,iomodel->numberofelements,iomodel->numberofvertices,iomodel->elements, iomodel->numberofelements2d,iomodel->numberofvertices2d,iomodel->elements2d,iomodel->numlayers,elements_width, iomodel->meshtype,iomodel->qmu_npart);
+			/*Partition elements and vertices and nodes: */
+			Partitioning(&iomodel->my_elements, &iomodel->my_vertices, &iomodel->my_nodes, &iomodel->my_bordervertices, iomodel, iomodel_handle);
 
 			dpart=(double*)xmalloc(iomodel->numberofvertices*sizeof(double));
-			for(i=0;i<iomodel->numberofvertices;i++)dpart[i]=part[i];
+			for(i=0;i<iomodel->numberofvertices;i++)dpart[i]=iomodel->my_vertices[i];
 		}
 
@@ -235,5 +225,5 @@
 
 					/*Only if partitioning exist do we care about the segments: */
-					if(iomodel->epart){
+					if(iomodel->my_elements){
 
 						/*Use the element partitioning vector from the iomodel to down select qmu_mass_flux_segments to only segments that are relevant 
@@ -241,5 +231,5 @@
 						my_num_qmu_mass_flux_segments=0;
 						for(j=0;j<num_qmu_mass_flux_segments;j++){
-							if (  iomodel->epart[(int)(*(qmu_mass_flux_segments+5*j+4))-1]   == my_rank)my_num_qmu_mass_flux_segments++;
+							if (  iomodel->my_elements[(int)(*(qmu_mass_flux_segments+5*j+4))-1])my_num_qmu_mass_flux_segments++;
 						}
 
@@ -249,5 +239,5 @@
 							second_count=0;
 							for(j=0;j<num_qmu_mass_flux_segments;j++){
-								if (iomodel->epart[(int)*(qmu_mass_flux_segments+5*j+4)-1]==my_rank){
+								if (iomodel->my_elements[(int)*(qmu_mass_flux_segments+5*j+4)-1]){
 									for(k=0;k<5;k++)*(my_qmu_mass_flux_segments+5*second_count+k)=*(qmu_mass_flux_segments+5*j+k);
 									second_count++;
@@ -321,5 +311,4 @@
 		xfree((void**)&iomodel->elements);
 		xfree((void**)&iomodel->elements2d);
-		xfree((void**)&epart);
 		xfree((void**)&part);
 		xfree((void**)&dpart);
Index: issm/trunk/src/c/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Thermal/CreateConstraintsThermal.cpp	(revision 3446)
@@ -43,5 +43,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
Index: issm/trunk/src/c/ModelProcessorx/Thermal/CreateLoadsThermal.cpp
===================================================================
--- issm/trunk/src/c/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 3445)
+++ issm/trunk/src/c/ModelProcessorx/Thermal/CreateLoadsThermal.cpp	(revision 3446)
@@ -53,5 +53,5 @@
 	#ifdef _PARALLEL_
 	/*keep only this partition's nodes:*/
-	if((iomodel->my_grids[i]==1)){
+	if((iomodel->my_vertices[i]==1)){
 	#endif
 
@@ -72,5 +72,5 @@
 		}
 	#ifdef _PARALLEL_
-	} //if((iomodel->my_grids[i]==1))
+	} //if((iomodel->my_vertices[i]==1))
 	#endif
 	}
Index: issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.cpp
===================================================================
--- issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.cpp	(revision 3445)
+++ issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.cpp	(revision 3446)
@@ -11,5 +11,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void PenaltyConstraintsx(int* pconverged, int* pnum_unstable_constraints, DataSet* elements,DataSet* nodes,
+void PenaltyConstraintsx(int* pconverged, int* pnum_unstable_constraints, DataSet* elements,DataSet* nodes, DataSet* vertices,
 		DataSet* loads,DataSet* materials,  DataSet* parameters,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 
@@ -28,5 +28,5 @@
 
 	/*First, get loads configured: */
-	loads->Configure(elements, loads, nodes, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
 
 	/*Do we have penalties linked to rifts? In this case, run our special rifts penalty 
Index: issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.h
===================================================================
--- issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.h	(revision 3445)
+++ issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.h	(revision 3446)
@@ -10,5 +10,5 @@
 
 /* local prototypes: */
-void PenaltyConstraintsx(int* pconverged, int* pnum_unstable_constraints, DataSet* elements,DataSet* nodes,
+void PenaltyConstraintsx(int* pconverged, int* pnum_unstable_constraints, DataSet* elements,DataSet* nodes, DataSet* vertices,
 		DataSet* loads,DataSet* materials,  DataSet* parameters,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 
 
Index: issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp
===================================================================
--- issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp	(revision 3445)
+++ issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void PenaltySystemMatricesx(Mat Kgg, Vec pg,double* pkmax,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, DataSet* parameters,
+void PenaltySystemMatricesx(Mat Kgg, Vec pg,double* pkmax,DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads,DataSet* materials, DataSet* parameters,
 		int kflag,int pflag,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 	
@@ -20,7 +20,7 @@
 	
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	loads->Configure(elements, loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Now, figure out maximum value of K_gg, so that we can penalize it correctly: */
Index: issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.h
===================================================================
--- issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.h	(revision 3445)
+++ issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.h	(revision 3446)
@@ -10,5 +10,5 @@
 
 /* local prototypes: */
-void PenaltySystemMatricesx(Mat Kgg, Vec pg,double* pkmax, DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, DataSet* parameters,
+void PenaltySystemMatricesx(Mat Kgg, Vec pg,double* pkmax, DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads,DataSet* materials, DataSet* parameters,
 		int kflag,int pflag,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 
 
Index: issm/trunk/src/c/Qmux/DakotaResponses.cpp
===================================================================
--- issm/trunk/src/c/Qmux/DakotaResponses.cpp	(revision 3445)
+++ issm/trunk/src/c/Qmux/DakotaResponses.cpp	(revision 3446)
@@ -263,5 +263,5 @@
 
 			/*Compute misfit: */
-			Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, femmodel->parameters,inputs,analysis_type,sub_analysis_type);
+			Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,inputs,analysis_type,sub_analysis_type);
 			
 
@@ -317,5 +317,5 @@
 
 			/*call mass flux module: */
-			MassFluxx(&mass_flux,femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,femmodel->parameters,segments,num_segments,ug_serial);
+			MassFluxx(&mass_flux,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,segments,num_segments,ug_serial);
 			
 			if(my_rank==0)responses[i]=mass_flux;
Index: issm/trunk/src/c/Qmux/Qmux.h
===================================================================
--- issm/trunk/src/c/Qmux/Qmux.h	(revision 3445)
+++ issm/trunk/src/c/Qmux/Qmux.h	(revision 3446)
@@ -7,4 +7,5 @@
 
 #include "../DataSet/DataSet.h"
+#include "../objects/objects.h"
 
 /* local prototypes: */
Index: issm/trunk/src/c/SpcNodesx/SpcNodesx.h
===================================================================
--- issm/trunk/src/c/SpcNodesx/SpcNodesx.h	(revision 3445)
+++ issm/trunk/src/c/SpcNodesx/SpcNodesx.h	(revision 3446)
@@ -6,9 +6,10 @@
 #define _SPCNODESX_H
 
+#include "../objects/objects.h"
 #include "../DataSet/DataSet.h"
 #include "../toolkits/toolkits.h"
 
 /* local prototypes: */
-void	SpcNodesx( DofVec** pyg, DataSet* nodesin,DataSet* constraints);
+void SpcNodesx( DofVec** pyg, DataSet* nodesin,DataSet* constraints);
 
 #endif  /* _SPCNODESX_H */
Index: issm/trunk/src/c/SurfaceAreax/SurfaceAreax.cpp
===================================================================
--- issm/trunk/src/c/SurfaceAreax/SurfaceAreax.cpp	(revision 3445)
+++ issm/trunk/src/c/SurfaceAreax/SurfaceAreax.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void SurfaceAreax( double* pS, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials,DataSet* parameters,
+void SurfaceAreax( double* pS, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials,DataSet* parameters,
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 	
@@ -18,6 +18,6 @@
 	
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Compute gradients: */
Index: issm/trunk/src/c/SurfaceAreax/SurfaceAreax.h
===================================================================
--- issm/trunk/src/c/SurfaceAreax/SurfaceAreax.h	(revision 3445)
+++ issm/trunk/src/c/SurfaceAreax/SurfaceAreax.h	(revision 3446)
@@ -6,8 +6,9 @@
 #define _SURFACEAREAX_H
 
+#include "../objects/objects.h"
 #include "../DataSet/DataSet.h"
 
 /* local prototypes: */
-void SurfaceAreax( double* pS, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters, 
+void SurfaceAreax( double* pS, DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters, 
 			ParameterInputs* inputs,int analysis_type,int sub_analysis_type);
 
Index: issm/trunk/src/c/SystemMatricesx/SystemMatricesx.cpp
===================================================================
--- issm/trunk/src/c/SystemMatricesx/SystemMatricesx.cpp	(revision 3445)
+++ issm/trunk/src/c/SystemMatricesx/SystemMatricesx.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-void SystemMatricesx(Mat* pKgg, Vec* ppg,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, DataSet* parameters,
+void SystemMatricesx(Mat* pKgg, Vec* ppg,DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads,DataSet* materials, DataSet* parameters,
 		int kflag,int pflag,int connectivity,int numberofdofspernode,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){
 	
@@ -26,7 +26,7 @@
 
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	loads->Configure(elements, loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Get size of matrix: */
Index: issm/trunk/src/c/SystemMatricesx/SystemMatricesx.h
===================================================================
--- issm/trunk/src/c/SystemMatricesx/SystemMatricesx.h	(revision 3445)
+++ issm/trunk/src/c/SystemMatricesx/SystemMatricesx.h	(revision 3446)
@@ -10,5 +10,5 @@
 
 /* local prototypes: */
-void SystemMatricesx(Mat* pKgg, Vec* ppg,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, DataSet* parameters,
+void SystemMatricesx(Mat* pKgg, Vec* ppg,DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads,DataSet* materials, DataSet* parameters,
 		int kflag,int pflag,int connectivity,int numberofdofspernode,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 
 
Index: issm/trunk/src/c/UpdateFromInputsx/UpdateFromInputsx.cpp
===================================================================
--- issm/trunk/src/c/UpdateFromInputsx/UpdateFromInputsx.cpp	(revision 3445)
+++ issm/trunk/src/c/UpdateFromInputsx/UpdateFromInputsx.cpp	(revision 3446)
@@ -10,5 +10,5 @@
 #include "../EnumDefinitions/EnumDefinitions.h"
 
-int UpdateFromInputsx( DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, DataSet* parameters,ParameterInputs* inputs) {
+int UpdateFromInputsx( DataSet* elements,DataSet* nodes, DataSet* vertices, DataSet* loads, DataSet* materials, DataSet* parameters,ParameterInputs* inputs) {
 
 	int noerr=1;
@@ -20,8 +20,8 @@
 
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	loads->Configure(elements, loads, nodes, materials,parameters);
-	nodes->Configure(elements, loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
+	nodes->Configure(elements, loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Update elements, nodes, loads and materials from inputs: */
Index: issm/trunk/src/c/UpdateFromInputsx/UpdateFromInputsx.h
===================================================================
--- issm/trunk/src/c/UpdateFromInputsx/UpdateFromInputsx.h	(revision 3445)
+++ issm/trunk/src/c/UpdateFromInputsx/UpdateFromInputsx.h	(revision 3446)
@@ -6,9 +6,9 @@
 #define _UPDATEFROMINPUTSXX_H
 
+#include "../objects/objects.h"
 #include "../DataSet/DataSet.h"
-#include "../objects/ParameterInputs.h"
 
 /* local prototypes: */
-int		UpdateFromInputsx( DataSet* elements,DataSet* nodes,DataSet* loads, DataSet* materials,  DataSet* parameters,ParameterInputs* inputs);
+int		UpdateFromInputsx( DataSet* elements,DataSet* nodes, DataSet* vertices,DataSet* loads, DataSet* materials,  DataSet* parameters,ParameterInputs* inputs);
 
 #endif  /* _UPDATEFROMINPUTSXX_H */
Index: issm/trunk/src/c/UpdateGeometryx/UpdateGeometryx.cpp
===================================================================
--- issm/trunk/src/c/UpdateGeometryx/UpdateGeometryx.cpp	(revision 3445)
+++ issm/trunk/src/c/UpdateGeometryx/UpdateGeometryx.cpp	(revision 3446)
@@ -12,5 +12,5 @@
 
 void UpdateGeometryx(Vec* poutthickness,Vec* poutbed,Vec* poutsurface, 
-		DataSet* elements, DataSet* nodes,DataSet* loads, DataSet* materials, DataSet* parameters,
+		DataSet* elements, DataSet* nodes, DataSet* vertices,DataSet* loads, DataSet* materials, DataSet* parameters,
 		Vec vec_newthickness,Vec vec_bed,Vec vec_surface){
 
@@ -43,8 +43,8 @@
 
 	/*First, get elements and loads configured: */
-	elements->Configure(elements,loads, nodes, materials,parameters);
-	materials->Configure(elements, loads, nodes, materials,parameters);
-	loads->Configure(elements, loads, nodes, materials,parameters);
-	parameters->Configure(elements,loads, nodes, materials,parameters);
+	elements->Configure(elements,loads, nodes,vertices, materials,parameters);
+	materials->Configure(elements, loads, nodes,vertices, materials,parameters);
+	loads->Configure(elements, loads, nodes,vertices, materials,parameters);
+	parameters->Configure(elements,loads, nodes,vertices, materials,parameters);
 
 	/*Serialize inputs :*/
Index: issm/trunk/src/c/UpdateGeometryx/UpdateGeometryx.h
===================================================================
--- issm/trunk/src/c/UpdateGeometryx/UpdateGeometryx.h	(revision 3445)
+++ issm/trunk/src/c/UpdateGeometryx/UpdateGeometryx.h	(revision 3446)
@@ -11,5 +11,5 @@
 /* local prototypes: */
 void UpdateGeometryx(Vec* poutthickness,Vec* poutbed,Vec* poutsurface, 
-		DataSet* elements, DataSet* nodes,DataSet* loads, DataSet* materials, DataSet* parameters,
+		DataSet* elements, DataSet* nodes,DataSet* vertices,DataSet* loads, DataSet* materials, DataSet* parameters,
 		Vec newthickness,Vec bed,Vec surface);
 
Index: issm/trunk/src/c/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp
===================================================================
--- issm/trunk/src/c/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp	(revision 3446)
+++ issm/trunk/src/c/UpdateVertexPositionsx/UpdateVertexPositionsx.cpp	(revision 3446)
@@ -0,0 +1,28 @@
+/*!\file UpdateVertexPositionsx
+ * \brief update vertex positions using new geometry defined by new thickness and new bed.
+ */
+
+#include "./UpdateVertexPositionsx.h"
+
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "../toolkits/toolkits.h"
+#include "../EnumDefinitions/EnumDefinitions.h"
+
+void UpdateVertexPositionsx( DataSet* vertices, Vec thickness,Vec bed){
+
+	/*intermediary: */
+	double* thickness_serial=NULL;
+	double* bed_serial=NULL;
+
+	/*serialize inputs: */
+	VecToMPISerial(&thickness_serial,thickness);
+	VecToMPISerial(&bed_serial,bed);
+	
+	/*Update elements, nodes, loads and materials from new geometry: */
+	vertices->UpdateVertexPositions(thickness_serial,bed_serial);
+
+	/*Free ressources:*/
+	xfree((void**)&thickness_serial);
+	xfree((void**)&bed_serial);
+}
Index: issm/trunk/src/c/UpdateVertexPositionsx/UpdateVertexPositionsx.h
===================================================================
--- issm/trunk/src/c/UpdateVertexPositionsx/UpdateVertexPositionsx.h	(revision 3446)
+++ issm/trunk/src/c/UpdateVertexPositionsx/UpdateVertexPositionsx.h	(revision 3446)
@@ -0,0 +1,15 @@
+/*!\file:  UpdateVertexPositionsx.h
+ * \brief header file for updating node positions using new geometry defined by new thickness and new bed.
+ */ 
+
+#ifndef _UPDATEVERTEXPOSITIONSXX_H
+#define _UPDATEVERTEXPOSITIONSXX_H
+
+#include "../DataSet/DataSet.h"
+#include "../objects/ParameterInputs.h"
+
+/* local prototypes: */
+void UpdateVertexPositionsx( DataSet* vertices, Vec thickness,Vec bed);
+
+#endif  /* _UPDATEVERTEXPOSITIONSXX_H */
+
Index: issm/trunk/src/c/issm.h
===================================================================
--- issm/trunk/src/c/issm.h	(revision 3445)
+++ issm/trunk/src/c/issm.h	(revision 3446)
@@ -41,5 +41,5 @@
 #include "./UpdateFromInputsx/UpdateFromInputsx.h"
 #include "./UpdateGeometryx/UpdateGeometryx.h"
-#include "./UpdateNodePositionsx/UpdateNodePositionsx.h"
+#include "./UpdateVertexPositionsx/UpdateVertexPositionsx.h"
 #include "./PenaltySystemMatricesx/PenaltySystemMatricesx.h"
 #include "./Reducematrixfromgtofx/Reducematrixfromgtofx.h"
Index: issm/trunk/src/c/objects/ElementProperties.cpp
===================================================================
--- issm/trunk/src/c/objects/ElementProperties.cpp	(revision 3445)
+++ issm/trunk/src/c/objects/ElementProperties.cpp	(revision 3446)
@@ -44,4 +44,77 @@
 	this->thermal_steadystate=0;
 	return;
+}
+/*}}}*/
+/*FUNCTION ElementProperties copy constructor {{{1*/
+ElementProperties::ElementProperties(ElementProperties* in){
+	
+	int i;
+
+	this->numnodes=in->numnodes;
+
+	if(in->h){
+		this->h=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->h[i]=in->h[i];
+	}
+	else this->h=NULL;
+
+	this->numnodes=in->numnodes;
+	if(in->s){
+		this->s=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->s[i]=in->s[i];
+	}
+	else this->s=NULL;
+
+
+	this->numnodes=in->numnodes;
+	if(in->b){
+		this->b=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->b[i]=in->b[i];
+	}
+	else this->b=NULL;
+
+
+	this->numnodes=in->numnodes;
+	if(in->k){
+		this->k=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->k[i]=in->k[i];
+	}
+	else this->k=NULL;
+
+
+	this->numnodes=in->numnodes;
+	if(in->melting){
+		this->melting=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->melting[i]=in->melting[i];
+	}
+	else this->melting=NULL;
+
+
+	this->numnodes=in->numnodes;
+	if(in->accumulation){
+		this->accumulation=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->accumulation[i]=in->accumulation[i];
+	}
+	else this->accumulation=NULL;
+
+
+	this->numnodes=in->numnodes;
+	if(in->geothermalflux){
+		this->geothermalflux=(double*)xmalloc(this->numnodes*sizeof(double));
+		for(i=0;i<this->numnodes;i++)this->geothermalflux[i]=in->geothermalflux[i];
+	}
+	else this->geothermalflux=NULL;
+
+
+	this->friction_type=in->friction_type;
+	this->p=in->p;
+	this->q=in->q;
+	this->shelf=in->shelf;
+	this->onbed=in->onbed;
+	this->onwater=in->onwater;
+	this->onsurface=in->onsurface;
+	this->collapse=in->collapse;
+	this->thermal_steadystate=in->thermal_steadystate;
+
 }
 /*}}}*/
Index: issm/trunk/src/c/objects/Node.cpp
===================================================================
--- issm/trunk/src/c/objects/Node.cpp	(revision 3445)
+++ issm/trunk/src/c/objects/Node.cpp	(revision 3446)
@@ -278,4 +278,32 @@
 }
 /*}}}*/
+/*FUNCTION Node GetDof {{{2*/
+int   Node::GetDof(int dofindex){
+
+	return indexing.doflist[dofindex];
+
+}
+/*}}}*/
+/*FUNCTION Node GetDofList1{{{2*/
+int  Node::GetDofList1(void){
+
+	Vertex* vertex=NULL;
+
+	vertex=(Vertex*)this->hvertex.delivers();
+
+	return vertex->dof;
+}
+/*}}}*/
+/*FUNCTION Node GetDofList{{{2*/
+void  Node::GetDofList(int* outdoflist,int* pnumberofdofspernode){
+
+	int i;
+	for(i=0;i<this->indexing.numberofdofs;i++){
+		outdoflist[i]=indexing.doflist[i];
+	}
+	/*Assign output pointers:*/
+	*pnumberofdofspernode=this->indexing.numberofdofs;
+}
+/*}}}*/
 /*FUNCTION Node GetId{{{2*/
 int    Node::GetId(void){ return id; }
@@ -728,22 +756,4 @@
 }
 /*}}}*/
-/*FUNCTION Node GetDof {{{2*/
-int   Node::GetDof(int dofindex){
-
-	return indexing.doflist[dofindex];
-
-}
-/*}}}*/
-/*FUNCTION Node GetDofList{{{2*/
-void  Node::GetDofList(int* outdoflist,int* pnumberofdofspernode){
-
-	int i;
-	for(i=0;i<this->indexing.numberofdofs;i++){
-		outdoflist[i]=indexing.doflist[i];
-	}
-	/*Assign output pointers:*/
-	*pnumberofdofspernode=this->indexing.numberofdofs;
-}
-/*}}}*/
 /*FUNCTION Node GetNumberOfDofs{{{2*/
 int   Node::GetNumberOfDofs(){
Index: issm/trunk/src/c/objects/Node.h
===================================================================
--- issm/trunk/src/c/objects/Node.h	(revision 3445)
+++ issm/trunk/src/c/objects/Node.h	(revision 3446)
@@ -93,5 +93,4 @@
 		int   IsOnSheet();
 		void  FieldExtrude(Vec field,double* field_serial,char* field_name);
-		void  UpdateNodePosition(double* thickness,double* bed);
 		/*}}}*/
 };
Index: issm/trunk/src/c/parallel/ControlInitialization.cpp
===================================================================
--- issm/trunk/src/c/parallel/ControlInitialization.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/ControlInitialization.cpp	(revision 3446)
@@ -83,6 +83,6 @@
 	diagnostic_core_linear(&slopex,fem_sl,inputs,SlopecomputeAnalysisEnum(),BedXAnalysisEnum());
 	diagnostic_core_linear(&slopey,fem_sl,inputs,SlopecomputeAnalysisEnum(),BedYAnalysisEnum());
-	FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
-	FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopey",0);
+	FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
+	FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopey",0);
 
 	//Add in inputs
@@ -97,5 +97,5 @@
 	diagnostic_core_nonlinear(&ug,NULL,NULL,NULL,fem_dh,inputs,DiagnosticAnalysisEnum(),HorizAnalysisEnum());
 	if(verbose)_printf_("%s\n"," extruding horizontal velocities...");
-	VecDuplicatePatch(&ug_horiz,ug); FieldExtrudex( ug_horiz,fem_dh->elements,fem_dh->nodes, fem_dh->loads,fem_dh-> materials,fem_dh->parameters,"velocity",1);
+	VecDuplicatePatch(&ug_horiz,ug); FieldExtrudex( ug_horiz,fem_dh->elements,fem_dh->nodes, fem_dh->vertices,fem_dh->loads,fem_dh-> materials,fem_dh->parameters,"velocity",1);
 
 	//vertical velocity
@@ -113,5 +113,5 @@
 	//Create 4d u_g
 	if(verbose)_printf_("%s\n"," computing pressure according to Pattyn...");
-	ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->loads,  fem_dh->materials, fem_dh->parameters);
+	ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->vertices,fem_dh->loads,  fem_dh->materials, fem_dh->parameters);
 	VecScale(pg,1.0/stokesreconditioning);
 	ug_stokes=NewVec(fem_ds->nodesets->GetGSize());
Index: issm/trunk/src/c/parallel/OutputResults.cpp
===================================================================
--- issm/trunk/src/c/parallel/OutputResults.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/OutputResults.cpp	(revision 3446)
@@ -12,4 +12,5 @@
 #include "../DataSet/DataSet.h"
 #include "../io/io.h"
+#include "../objects/objects.h"
 
 void OutputResults(DataSet* results,char* filename){
Index: issm/trunk/src/c/parallel/balancedthickness_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/balancedthickness_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/balancedthickness_core.cpp	(revision 3446)
@@ -44,5 +44,5 @@
 	_printf_("depth averaging velocity...\n");
 	u_g=inputs->Get("velocity",&dofs[0],2); //take (vx,vy) from inputs velocity
-	FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
+	FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
 	inputs->Add("velocity_average",u_g,2,numberofnodes);
 	
@@ -51,5 +51,5 @@
 
 	_printf_("extrude computed thickness on all layers:\n");
-	FieldExtrudex( h_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
+	FieldExtrudex( h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
 
 	/*Plug results into output dataset: */
Index: issm/trunk/src/c/parallel/balancedvelocities_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/balancedvelocities_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/balancedvelocities_core.cpp	(revision 3446)
@@ -43,5 +43,5 @@
 	_printf_("depth averaging velocity...\n");
 	u_g=inputs->Get("velocity",&dofs[0],2); //take (vx,vy) from inputs velocity
-	FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
+	FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
 	inputs->Add("velocity_average",u_g,2,numberofnodes);
 	
@@ -50,5 +50,5 @@
 
 	_printf_("extrude computed thickness on all layers:\n");
-	FieldExtrudex( v_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
+	FieldExtrudex( v_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
 
 	/*Plug results into output dataset: */
Index: issm/trunk/src/c/parallel/control_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/control_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/control_core.cpp	(revision 3446)
@@ -105,5 +105,5 @@
 	
 		/*Update parameters: */
-		UpdateFromInputsx(fem_model->elements,fem_model->nodes,fem_model->loads, fem_model->materials,fem_model->parameters,inputs);
+		UpdateFromInputsx(fem_model->elements,fem_model->nodes,fem_model->vertices,fem_model->loads, fem_model->materials,fem_model->parameters,inputs);
 
 		_printf_("%s\n","      computing gradJ...");
Index: issm/trunk/src/c/parallel/diagnostic_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/diagnostic_core.cpp	(revision 3446)
@@ -96,6 +96,6 @@
 		
 			if(verbose)_printf_("%s\n","extruding slopes in 3d...");
-			FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
-			FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
+			FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
+			FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
 		}
 
@@ -109,5 +109,5 @@
 
 		if(verbose)_printf_("%s\n"," computing pressure according to MacAyeal...");
-		ComputePressurex( &pg,fem_dhu->elements,fem_dhu->nodes,fem_dhu->loads,fem_dhu->materials, fem_dhu->parameters);
+		ComputePressurex( &pg,fem_dhu->elements,fem_dhu->nodes,fem_dhu->vertices,fem_dhu->loads,fem_dhu->materials, fem_dhu->parameters);
 
 		if(verbose)_printf_("%s\n"," update boundary conditions for macyeal pattyn using hutter results...");
@@ -127,5 +127,5 @@
 		if(dim==2){
 			if(verbose)_printf_("%s\n"," computing pressure according to MacAyeal...");
-			ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->loads,  fem_dh->materials, fem_dh->parameters);
+			ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->vertices,fem_dh->loads,  fem_dh->materials, fem_dh->parameters);
 		}
 
@@ -136,5 +136,5 @@
 
 		if(verbose)_printf_("%s\n"," extruding horizontal velocities...");
-		VecDuplicatePatch(&ug_horiz,ug); FieldExtrudex( ug_horiz,fem_dh->elements,fem_dh->nodes, fem_dh->loads,fem_dh->materials,fem_dh->parameters,"velocity",1);
+		VecDuplicatePatch(&ug_horiz,ug); FieldExtrudex( ug_horiz,fem_dh->elements,fem_dh->nodes, fem_dh->vertices,fem_dh->loads,fem_dh->materials,fem_dh->parameters,"velocity",1);
 
 		if(verbose)_printf_("%s\n"," computing vertical velocities...");
@@ -150,5 +150,5 @@
 
 		if(verbose)_printf_("%s\n"," computing pressure according to Pattyn...");
-		ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->loads,  fem_dh->materials,fem_dh->parameters);
+		ComputePressurex( &pg,fem_dh->elements, fem_dh->nodes, fem_dh->vertices,fem_dh->loads,  fem_dh->materials,fem_dh->parameters);
 		
 		if (isstokes){
@@ -160,6 +160,6 @@
 			diagnostic_core_linear(&slopex,fem_sl,inputs,SlopecomputeAnalysisEnum(),BedXAnalysisEnum());
 			diagnostic_core_linear(&slopey,fem_sl,inputs,SlopecomputeAnalysisEnum(),BedYAnalysisEnum());
-			FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
-			FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopey",0);
+			FieldExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopex",0);
+			FieldExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->vertices,fem_sl->loads,fem_sl->materials,fem_sl->parameters,"slopey",0);
 
 			inputs->Add("bedslopex",slopex,numberofdofspernode_sl,numberofnodes);
Index: issm/trunk/src/c/parallel/diagnostic_core_linear.cpp
===================================================================
--- issm/trunk/src/c/parallel/diagnostic_core_linear.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/diagnostic_core_linear.cpp	(revision 3446)
@@ -34,13 +34,13 @@
 
 	/*Update parameters: */
-	UpdateFromInputsx(fem->elements,fem->nodes,fem->loads, fem->materials,fem->parameters,inputs);
+	UpdateFromInputsx(fem->elements,fem->nodes,fem->vertices,fem->loads, fem->materials,fem->parameters,inputs);
 		
 	//*Generate system matrices
 	if (verbose) _printf_("   Generating matrices\n");
-	SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+	SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
 
 	if (verbose) _printf_("   Generating penalty matrices\n");
-	//*Generate penalty system matrices
-	PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+		//*Generate penalty system matrices
+		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
 
 	/*!Reduce matrix from g to f size:*/
Index: issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp
===================================================================
--- issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp	(revision 3446)
@@ -80,13 +80,13 @@
 
 		/*Update parameters: */
-		UpdateFromInputsx(fem->elements,fem->nodes,loads, fem->materials,fem->parameters,inputs);
+		UpdateFromInputsx(fem->elements,fem->nodes,fem->vertices,loads, fem->materials,fem->parameters,inputs);
 
 		if (verbose) _printf_("   Generating matrices\n");
 		//*Generate system matrices
-		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
 
 		if (verbose) _printf_("   Generating penalty matrices\n");
 		//*Generate penalty system matrices
-		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+		PenaltySystemMatricesx(Kgg, pg,NULL,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
 
 		if (verbose) _printf_("   reducing matrix from g to f set\n");
@@ -117,5 +117,5 @@
 		if (old_ug) inputs->Add("old_velocity",old_ug,numberofdofspernode,numberofnodes);
 		inputs->Add("velocity",ug,numberofdofspernode,numberofnodes);
-		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
+		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
 
 		//if(verbose)_printf_("   number of unstable constraints: %i\n",num_unstable_constraints);
@@ -156,5 +156,5 @@
 		kflag=1; pflag=0; //stiffness generation only
 	
-		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+		SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
 		Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->Gmn,fem->nodesets);
 		MatFree(&Kgg);VecFree(&pg);
Index: issm/trunk/src/c/parallel/gradjcompute_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/gradjcompute_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/gradjcompute_core.cpp	(revision 3446)
@@ -67,5 +67,5 @@
 
 	_printf_("%s\n","      buid Du, difference between observed velocity and model velocity:");
-	Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,femmodel->parameters,inputs,analysis_type,sub_analysis_type);
+	Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,inputs,analysis_type,sub_analysis_type);
 
 	_printf_("%s\n","      reduce adjoint load from g-set to f-set:");
@@ -85,5 +85,5 @@
 	inputs->Add("adjoint",lambda_g_double,numberofdofspernode,numberofnodes);
 
-	Gradjx( &grad_g, numberofnodes,femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials,femmodel->parameters, 
+	Gradjx( &grad_g, numberofnodes,femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials,femmodel->parameters, 
 				inputs,analysis_type,sub_analysis_type,control_type);
 
@@ -91,5 +91,5 @@
 
 		_printf_("%s\n","      extruding gradient...");
-		FieldExtrudex( grad_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,femmodel->parameters,"gradj",0);
+		FieldExtrudex( grad_g, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"gradj",0);
 	}
 
Index: issm/trunk/src/c/parallel/objectivefunctionC.cpp
===================================================================
--- issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/objectivefunctionC.cpp	(revision 3446)
@@ -94,5 +94,5 @@
 	/*Compute misfit for this velocity field.*/
 	inputs->Add("fit",fit[n]);
-	CostFunctionx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, femmodel->parameters,inputs,analysis_type,sub_analysis_type);
+	CostFunctionx( &J, femmodel->elements,femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters,inputs,analysis_type,sub_analysis_type);
 
 	/*Free ressources:*/
Index: issm/trunk/src/c/parallel/prognostic2_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/prognostic2_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/prognostic2_core.cpp	(revision 3446)
@@ -44,6 +44,6 @@
 	vx_g=inputs->Get("vx",&dofs[0],1);
 	vy_g=inputs->Get("vy",&dofs[0],1);
-	FieldDepthAveragex(vx_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"vx");
-	FieldDepthAveragex(vy_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"vy");
+	FieldDepthAveragex(vx_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"vx");
+	FieldDepthAveragex(vy_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"vy");
 	inputs->Add("vx_average",vx_g,1,numberofnodes);
 	inputs->Add("vy_average",vy_g,1,numberofnodes);
@@ -53,5 +53,5 @@
 
 	_printf_("extrude computed thickness on all layers:\n");
-	//FieldAverageOntoVertices(h_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
+	//FieldAverageOntoVertices(h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
 
 	/*Plug results into output dataset: */
Index: issm/trunk/src/c/parallel/prognostic_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/prognostic_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/prognostic_core.cpp	(revision 3446)
@@ -43,5 +43,5 @@
 	_printf_("depth averaging velocity...\n");
 	u_g=inputs->Get("velocity",&dofs[0],2); //take (vx,vy) from inputs velocity
-	FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
+	FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
 	inputs->Add("velocity_average",u_g,2,numberofnodes);
 	
@@ -50,5 +50,5 @@
 
 	_printf_("extrude computed thickness on all layers:\n");
-	FieldExtrudex( h_g, fem_p->elements,fem_p->nodes, fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
+	FieldExtrudex( h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
 
 	/*Plug results into output dataset: */
Index: issm/trunk/src/c/parallel/slopecompute_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/slopecompute_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/slopecompute_core.cpp	(revision 3446)
@@ -43,6 +43,6 @@
 
 	_printf_("extrude computed slope on all layers:\n");
-	FieldExtrudex( sx_g, fem_sl->elements,fem_sl->nodes, fem_sl->loads, fem_sl->materials,fem_sl->parameters,"slopex",0);
-	FieldExtrudex( sy_g, fem_sl->elements,fem_sl->nodes, fem_sl->loads, fem_sl->materials,fem_sl->parameters,"slopey",0);
+	FieldExtrudex( sx_g, fem_sl->elements,fem_sl->nodes, fem_sl->vertices,fem_sl->loads, fem_sl->materials,fem_sl->parameters,"slopex",0);
+	FieldExtrudex( sy_g, fem_sl->elements,fem_sl->nodes, fem_sl->vertices,fem_sl->loads, fem_sl->materials,fem_sl->parameters,"slopey",0);
 
 	/*Plug results into output dataset: */
Index: issm/trunk/src/c/parallel/steadystate_core.cpp
===================================================================
--- issm/trunk/src/c/parallel/steadystate_core.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/steadystate_core.cpp	(revision 3446)
@@ -92,5 +92,5 @@
 		//compute depth averaged temperature and add to inputs
 		VecDuplicatePatch(&t_g_average,t_g); 
-		FieldDepthAveragex( t_g_average, fem_t->elements,fem_t->nodes, fem_t->loads, fem_t->materials,fem_t->parameters,"temperature");
+		FieldDepthAveragex( t_g_average, fem_t->elements,fem_t->nodes, fem_t->vertices,fem_t->loads, fem_t->materials,fem_t->parameters,"temperature");
 		inputs->Add("temperature_average",t_g_average,1,numberofnodes);
 		inputs->Add("temperature",t_g,1,numberofnodes);
Index: issm/trunk/src/c/parallel/thermal_core_nonlinear.cpp
===================================================================
--- issm/trunk/src/c/parallel/thermal_core_nonlinear.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/thermal_core_nonlinear.cpp	(revision 3446)
@@ -60,5 +60,5 @@
 
 		/*Update parameters: */
-		UpdateFromInputsx(fem->elements,fem->nodes,fem->loads, fem->materials,fem->parameters,inputs);
+		UpdateFromInputsx(fem->elements,fem->nodes,fem->vertices,fem->loads, fem->materials,fem->parameters,inputs);
 
 		//*Generate system matrices
@@ -67,5 +67,5 @@
 			/*Compute Kgg_nopenalty and pg_nopenalty once for all: */
 			if (count==1){
-				SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+				SystemMatricesx(&Kgg_nopenalty, &pg_nopenalty,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
 			}
 
@@ -75,10 +75,10 @@
 
 			//apply penalties each time
-			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
 		}
 		else{
-			SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
+			SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 
 			//apply penalties
-			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
+			PenaltySystemMatricesx(Kgg, pg,&melting_offset,fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,kflag,pflag,inputs,analysis_type,sub_analysis_type); 
 		}
 
@@ -114,5 +114,5 @@
 		inputs->Add("temperature",tg,numberofdofspernode,numberofnodes);
 		
-		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
+		PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,fem->vertices,fem->loads,fem->materials,fem->parameters,inputs,analysis_type,sub_analysis_type); 
 
 		if (!converged){
Index: issm/trunk/src/c/parallel/transient_core_2d.cpp
===================================================================
--- issm/trunk/src/c/parallel/transient_core_2d.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/transient_core_2d.cpp	(revision 3446)
@@ -140,5 +140,5 @@
 		//update surface and bed using the new thickness
 		_printf_("   updating geometry\n");
-		UpdateGeometryx(&new_h_g,&new_b_g,&new_s_g, fem_p->elements, fem_p->nodes,fem_p->loads, fem_p->materials, fem_p->parameters,h_g_intermediary,b_g,s_g); 
+		UpdateGeometryx(&new_h_g,&new_b_g,&new_s_g, fem_p->elements, fem_p->nodes,fem_p->vertices,fem_p->loads, fem_p->materials, fem_p->parameters,h_g_intermediary,b_g,s_g); 
 
 		VecFree(&h_g);h_g=new_h_g; 
Index: issm/trunk/src/c/parallel/transient_core_3d.cpp
===================================================================
--- issm/trunk/src/c/parallel/transient_core_3d.cpp	(revision 3445)
+++ issm/trunk/src/c/parallel/transient_core_3d.cpp	(revision 3446)
@@ -143,5 +143,5 @@
 		if(verbose)_printf_("%s\n","computing depth average temperature");
 		VecDuplicatePatch(&t_g_average,t_g); 
-		FieldDepthAveragex( t_g_average, fem_t->elements,fem_t->nodes, fem_t->loads, fem_t->materials,fem_t->parameters,"temperature");
+		FieldDepthAveragex( t_g_average, fem_t->elements,fem_t->nodes, fem_t->vertices,fem_t->loads, fem_t->materials,fem_t->parameters,"temperature");
 		inputs->Add("temperature_average",t_g_average,1,numberofnodes);
 		VecFree(&t_g_average); //not needed anymore
@@ -168,16 +168,16 @@
 		//update surface and bed using the new thickness
 		if(verbose)_printf_("   updating geometry\n");
-		UpdateGeometryx(&h_g,&b_g,&s_g, fem_p->elements, fem_p->nodes,fem_p->loads, fem_p->materials, fem_p->parameters,h_g_intermediary,b_g,s_g); 
+		UpdateGeometryx(&h_g,&b_g,&s_g, fem_p->elements, fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials, fem_p->parameters,h_g_intermediary,b_g,s_g); 
 		VecFree(&h_g_intermediary);
 		
 		if(verbose)_printf_("%s\n","updating node positions");
-		UpdateNodePositionsx( fem_dh->elements,fem_dh->nodes,fem_dh->loads,fem_dh->materials,fem_dh->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_dv->elements,fem_dv->nodes,fem_dv->loads,fem_dv->materials,fem_dv->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_dhu->elements,fem_dhu->nodes,fem_dhu->loads,fem_dhu->materials,fem_dhu->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_ds->elements,fem_ds->nodes,fem_ds->loads,fem_ds->materials,fem_ds->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials,fem_sl->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_p->elements,fem_p->nodes,fem_p->loads,fem_p->materials,fem_p->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_t->elements,fem_t->nodes,fem_t->loads,fem_t->materials,fem_t->parameters,h_g,b_g);
-		UpdateNodePositionsx( fem_m->elements,fem_m->nodes,fem_m->loads,fem_m->materials,fem_m->parameters,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
+		UpdateVertexPositionsx( fem_dh->vertices,h_g,b_g);
 
 		//plug into results.
