Index: /issm/trunk-jpl/src/c/Container/Elements.cpp
===================================================================
--- /issm/trunk-jpl/src/c/Container/Elements.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/Container/Elements.cpp	(revision 14761)
@@ -47,5 +47,5 @@
 
 		element=dynamic_cast<Element*>((*object));
-		element->Configure(elements,loads,nodes,materials,parameters);
+		element->Configure(elements,loads,nodes,vertices,materials,parameters);
 
 	}
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Element.h	(revision 14761)
@@ -27,5 +27,5 @@
 		virtual        ~Element(){};
 
-		virtual void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
+		virtual void   Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
 		virtual void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
 		virtual void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.cpp	(revision 14761)
@@ -27,14 +27,13 @@
 Penta::Penta(){
 
-	int i;
-
-	this->nodes=NULL;
-	this->material=NULL;
-	this->matpar=NULL;
-	this->verticalneighbors=NULL;
-	this->inputs=NULL;
-	this->parameters=NULL;
-	this->results=NULL;
-	for(i=0;i<3;i++)this->horizontalneighborsids[i]=UNDEF;
+	this->nodes             = NULL;
+	this->vertices          = NULL;
+	this->material          = NULL;
+	this->matpar            = NULL;
+	this->verticalneighbors = NULL;
+	this->inputs            = NULL;
+	this->parameters        = NULL;
+	this->results           = NULL;
+	for(int i=0;i<3;i++)this->horizontalneighborsids[i]=UNDEF;
 }
 /*}}}*/
@@ -84,8 +83,9 @@
 
 	/*initialize pointers:*/
-	this->nodes=NULL;
-	this->material=NULL;
-	this->matpar=NULL;
-	this->verticalneighbors=NULL;
+	this->nodes             = NULL;
+	this->vertices          = NULL;
+	this->material          = NULL;
+	this->matpar            = NULL;
+	this->verticalneighbors = NULL;
 }
 /*}}}*/
@@ -107,4 +107,5 @@
 	penta->hnodes=new Hook*[penta->numanalyses];
 	for(i=0;i<penta->numanalyses;i++)penta->hnodes[i]=(Hook*)this->hnodes[i]->copy();
+	penta->hvertices=(Hook*)this->hvertices->copy();
 	penta->hmaterial=(Hook*)this->hmaterial->copy();
 	penta->hmatpar=(Hook*)this->hmatpar->copy();
@@ -132,4 +133,5 @@
 	penta->nodes=xNew<Node*>(6); //we cannot rely on an analysis_counter to tell us which analysis_type we are running, so we just copy the nodes.
 	for(i=0;i<6;i++)penta->nodes[i]=this->nodes[i];
+	penta->vertices=(Vertex**)penta->hvertices->deliverp();
 	penta->material=(Material*)penta->hmaterial->delivers();
 	penta->matpar=(Matpar*)penta->hmatpar->delivers();
@@ -373,5 +375,5 @@
 /*}}}*/
 		/*FUNCTION Penta::Configure {{{*/
-void  Penta::Configure(Elements* elementsin, Loads* loadsin, DataSet* nodesin, Materials* materialsin, Parameters* parametersin){
+void  Penta::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin){
 
 	int analysis_counter;
@@ -386,4 +388,5 @@
 	 * datasets, using internal ids and offsets hidden in hooks: */
 	if (this->hnodes[analysis_counter]) this->hnodes[analysis_counter]->configure(nodesin);
+	this->hvertices->configure(verticesin);
 	this->hmaterial->configure(materialsin);
 	this->hmatpar->configure(materialsin);
@@ -393,7 +396,8 @@
 	if (this->hnodes[analysis_counter]) this->nodes=(Node**)this->hnodes[analysis_counter]->deliverp();
 	else this->nodes=NULL;
-	this->material=(Material*)this->hmaterial->delivers();
-	this->matpar=(Matpar*)this->hmatpar->delivers();
-	this->verticalneighbors=(Penta**)this->hneighbors->deliverp();
+	this->vertices          = (Vertex**)this->hvertices->deliverp();
+	this->material          = (Material*)this->hmaterial->delivers();
+	this->matpar            = (Matpar*)this->hmatpar->delivers();
+	this->verticalneighbors = (Penta**)this->hneighbors->deliverp();
 
 	/*point parameters to real dataset: */
@@ -2849,4 +2853,5 @@
 	/*recover nodes, material and matpar: */
 	tria->nodes=(Node**)tria->hnodes[analysis_counter]->deliverp();
+	tria->vertices=(Vertex**)tria->hvertices->deliverp();
 	tria->matpar=(Matpar*)tria->hmatpar->delivers();
 
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h	(revision 14761)
@@ -34,5 +34,6 @@
 		int          sid;
 
-		Node       **nodes;                       // 6 nodes
+		Node       **nodes;                       // set of nodes
+		Vertex     **vertices;                    // 6 vertices
 		Material    *material;                    // 1 material ice
 		Matpar      *matpar;                      // 1 material parameter
@@ -78,5 +79,5 @@
 		void   ComputeStrainRate(Vector<IssmDouble>* eps);
 		void   ComputeStressTensor();
-		void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
+		void   Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
 		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.cpp	(revision 14761)
@@ -24,8 +24,9 @@
 PentaHook::PentaHook(){
 	numanalyses=UNDEF;
-	this->hnodes=NULL;
-	this->hmaterial=NULL;
-	this->hmatpar=NULL;
-	this->hneighbors=NULL;
+	this->hnodes     = NULL;
+	this->hvertices  = NULL;
+	this->hmaterial  = NULL;
+	this->hmatpar    = NULL;
+	this->hneighbors = NULL;
 }
 /*}}}*/
@@ -39,4 +40,5 @@
 	}
 	delete [] this->hnodes;
+	delete hvertices;
 	delete hmaterial;
 	delete hmatpar;
@@ -44,18 +46,30 @@
 }
 /*}}}*/
-/*FUNCTION PentaHook::PentaHook(int in_numanalyses,int material_id, int matpar_id){{{*/
-PentaHook::PentaHook(int in_numanalyses,int material_id, IoModel* iomodel){
+/*FUNCTION PentaHook::PentaHook(int in_numanalyses,int element_id, int matpar_id){{{*/
+PentaHook::PentaHook(int in_numanalyses,int element_id, IoModel* iomodel){
 
 	/*intermediary: */
 	int matpar_id;
+	int material_id;
+	int penta_vertex_ids[3];
 
-	/*retrieve parameters: */
+	/*retrieve material_id: */
 	iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++;
 
-	this->numanalyses=in_numanalyses;
-	this->hnodes=new Hook*[in_numanalyses];
-	this->hmaterial=new Hook(&material_id,1);
-	this->hmatpar=new Hook(&matpar_id,1);
-	this->hneighbors=NULL; 
+	/*retrive material_id*/
+	material_id = element_id;
+
+	/*retrieve vertices ids*/
+	for(int i=0;i<6;i++){ 
+		penta_vertex_ids[i]=reCast<int>(iomodel->Data(MeshElementsEnum)[6*(element_id-1)+i]);
+	}
+
+
+	this->numanalyses = in_numanalyses;
+	this->hnodes      = new Hook*[in_numanalyses];
+	this->hvertices   = new Hook(&penta_vertex_ids[0],6);
+	this->hmaterial   = new Hook(&material_id,1);
+	this->hmatpar     = new Hook(&matpar_id,1);
+	this->hneighbors  = NULL;
 
 	//Initialize hnodes as NULL
@@ -99,4 +113,5 @@
 	// do not spawn hmaterial. material will be taken care of by Penta
 	triahook->hmaterial=NULL;
+	triahook->hvertices=(Hook*)this->hvertices->Spawn(indices,3);
 	triahook->hmatpar=(Hook*)this->hmatpar->copy();
 }
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/PentaHook.h	(revision 14761)
@@ -14,5 +14,6 @@
 	public: 
 		int    numanalyses;   //number of analysis types
-		Hook **hnodes;        // 6 nodes for each analysis type
+		Hook **hnodes;        // set of nodes for each analysis type
+		Hook  *hvertices;     // 6 vertices for each analysis type
 		Hook  *hmaterial;     // 1 ice material
 		Hook  *hmatpar;       // 1 material parameter
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp	(revision 14761)
@@ -31,11 +31,12 @@
 	int i;
 
-	this->nodes=NULL;
-	this->material=NULL;
-	this->matpar=NULL;
+	this->nodes    = NULL;
+	this->vertices = NULL;
+	this->material = NULL;
+	this->matpar   = NULL;
 	for(i=0;i<3;i++)this->horizontalneighborsids[i]=UNDEF;
-	this->inputs=NULL;
-	this->parameters=NULL;
-	this->results=NULL;
+	this->inputs     = NULL;
+	this->parameters = NULL;
+	this->results    = NULL;
 
 }
@@ -62,7 +63,8 @@
 
 		/*initialize pointers:*/
-		this->nodes=NULL;
-		this->material=NULL;
-		this->matpar=NULL;
+		this->nodes    = NULL;
+		this->vertices = NULL;
+		this->material = NULL;
+		this->matpar   = NULL;
 
 }
@@ -91,4 +93,5 @@
 	tria->hnodes=new Hook*[tria->numanalyses];
 	for(i=0;i<tria->numanalyses;i++)tria->hnodes[i]=(Hook*)this->hnodes[i]->copy();
+	tria->hvertices=(Hook*)this->hvertices->copy();
 	tria->hmaterial=(Hook*)this->hmaterial->copy();
 	tria->hmatpar=(Hook*)this->hmatpar->copy();
@@ -115,4 +118,5 @@
 	tria->nodes=xNew<Node*>(3); //we cannot rely on an analysis_counter to tell us which analysis_type we are running, so we just copy the nodes.
 	for(i=0;i<3;i++)tria->nodes[i]=this->nodes[i];
+	tria->vertices=(Vertex**)tria->hvertices->deliverp();
 	tria->material=(Material*)tria->hmaterial->delivers();
 	tria->matpar=(Matpar*)tria->hmatpar->delivers();
@@ -887,5 +891,5 @@
 /*}}}*/
 /*FUNCTION Tria::Configure {{{*/
-void  Tria::Configure(Elements* elementsin, Loads* loadsin, DataSet* nodesin, Materials* materialsin, Parameters* parametersin){
+void  Tria::Configure(Elements* elementsin, Loads* loadsin,Nodes* nodesin,Vertices *verticesin,Materials* materialsin, Parameters* parametersin){
 
 	/*go into parameters and get the analysis_counter: */
@@ -899,4 +903,5 @@
 	 * datasets, using internal ids and offsets hidden in hooks: */
 	if(this->hnodes[analysis_counter]) this->hnodes[analysis_counter]->configure(nodesin);
+	this->hvertices->configure(verticesin);
 	this->hmaterial->configure(materialsin);
 	this->hmatpar->configure(materialsin);
@@ -905,6 +910,7 @@
 	if(this->hnodes[analysis_counter]) this->nodes=(Node**)this->hnodes[analysis_counter]->deliverp();
 	else this->nodes=NULL;
-	this->material=(Material*)this->hmaterial->delivers();
-	this->matpar=(Matpar*)this->hmatpar->delivers();
+	this->vertices = (Vertex**)this->hvertices->deliverp();
+	this->material = (Material*)this->hmaterial->delivers();
+	this->matpar   = (Matpar*)this->hmatpar->delivers();
 
 	/*point parameters to real dataset: */
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h	(revision 14761)
@@ -32,5 +32,6 @@
 		int          sid;
 
-		Node       **nodes;                       // 3 nodes
+		Node       **nodes;                       // nodes
+		Vertex     **vertices;                    // 3 vertices
 		Material    *material;                    // 1 material ice
 		Matpar      *matpar;                      // 1 material parameter
@@ -74,5 +75,5 @@
 		void   ComputeStrainRate(Vector<IssmDouble>* eps);
 		void   ComputeStressTensor();
-		void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
+		void   Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
 		void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
 		void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.cpp	(revision 14761)
@@ -24,7 +24,8 @@
 TriaHook::TriaHook(){
 	numanalyses=UNDEF;
-	this->hnodes=NULL;
-	this->hmaterial=NULL;
-	this->hmatpar=NULL;
+	this->hnodes    = NULL;
+	this->hvertices = NULL;
+	this->hmaterial = NULL;
+	this->hmatpar   = NULL;
 }
 /*}}}*/
@@ -36,5 +37,6 @@
 		if (this->hnodes[i]) delete this->hnodes[i];
 	}
-	delete [] this->hnodes;
+	delete [] hnodes;
+	delete hvertices;
 	delete hmaterial;
 	delete hmatpar;
@@ -42,17 +44,28 @@
 }
 /*}}}*/
-/*FUNCTION TriaHook::TriaHook(int in_numanalyses,int material_id, int matpar_id){{{*/
-TriaHook::TriaHook(int in_numanalyses,int material_id, IoModel* iomodel){
+/*FUNCTION TriaHook::TriaHook(int in_numanalyses,int element_id, int matpar_id){{{*/
+TriaHook::TriaHook(int in_numanalyses,int element_id, IoModel* iomodel){
 
 	/*intermediary: */
 	int matpar_id;
+	int material_id;
+	int tria_vertex_ids[3];
 
-	/*retrieve parameters: */
+	/*retrieve material_id: */
 	iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++;
 
-	this->numanalyses=in_numanalyses;
-	this->hnodes= new Hook*[in_numanalyses];
-	this->hmaterial=new Hook(&material_id,1);
-	this->hmatpar=new Hook(&matpar_id,1);
+	/*retrive material_id*/
+	material_id = element_id;
+
+	/*retrieve vertices ids*/
+	for(int i=0;i<3;i++){ 
+		tria_vertex_ids[i]=reCast<int>(iomodel->Data(MeshElementsEnum)[3*(element_id-1)+i]);
+	}
+
+	this->numanalyses = in_numanalyses;
+	this->hnodes      = new Hook*[in_numanalyses];
+	this->hvertices   = new Hook(&tria_vertex_ids[0],3);
+	this->hmaterial   = new Hook(&material_id,1);
+	this->hmatpar     = new Hook(&matpar_id,1);
 
 	//Initialize hnodes as NULL
Index: /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Elements/TriaHook.h	(revision 14761)
@@ -12,8 +12,9 @@
 
 	public: 
-		int    numanalyses; //number of analysis types
-		Hook** hnodes; // 3 nodes for each analysis type
-		Hook*  hmaterial; // 1 ice material
-		Hook*  hmatpar; // 1 material parameter
+		int    numanalyses;   //number of analysis types
+		Hook **hnodes;        // nodes for each analysis type
+		Hook  *hvertices;     // 3 vertices
+		Hook  *hmaterial;     // 1 ice material
+		Hook  *hmatpar;       // 1 material parameter
 
 		/*FUNCTION constructors, destructors {{{*/
Index: /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.cpp	(revision 14761)
@@ -32,4 +32,6 @@
 	this->hnodes=NULL;
 	this->nodes= NULL;
+	this->hvertices=NULL;
+	this->vertices= NULL;
 	this->helement=NULL;
 	this->element= NULL;
@@ -51,4 +53,5 @@
 	int  icefront_mparid;
 	int  icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size
+	int  icefront_vertex_ids[NUMVERTICESQUA]; //initialize with largest size
 	int  icefront_fill;
 
@@ -74,4 +77,6 @@
 		icefront_node_ids[0]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
 		icefront_node_ids[1]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
 	}
 	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
@@ -80,4 +85,8 @@
 		icefront_node_ids[2]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
 		icefront_node_ids[3]=iomodel->nodecounter+reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
+		icefront_vertex_ids[0]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+0));
+		icefront_vertex_ids[1]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+1));
+		icefront_vertex_ids[2]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+2));
+		icefront_vertex_ids[3]=reCast<int>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+3));
 	}
 	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
@@ -97,4 +106,5 @@
 	/*Hooks: */
 	this->hnodes=new Hook(icefront_node_ids,num_nodes);
+	this->hvertices=new Hook(icefront_vertex_ids,num_nodes);
 	this->helement=new Hook(&icefront_eid,1);
 	this->hmatpar=new Hook(&icefront_mparid,1);
@@ -106,8 +116,9 @@
 
 	//parameters and hooked fields: we still can't point to them, they may not even exist. Configure will handle this.
-	this->parameters=NULL;
-	this->nodes= NULL;
-	this->element= NULL;
-	this->matpar= NULL;
+	this->parameters = NULL;
+	this->nodes      = NULL;
+	this->vertices   = NULL;
+	this->element    = NULL;
+	this->matpar     = NULL;
 }
 
@@ -118,4 +129,5 @@
 	this->parameters=NULL;
 	delete hnodes;
+	delete hvertices;
 	delete helement;
 	delete hmatpar;
@@ -130,4 +142,5 @@
 	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
 	hnodes->Echo();
+	hvertices->Echo();
 	helement->Echo();
 	hmatpar->Echo();
@@ -145,4 +158,5 @@
 	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
 	hnodes->DeepEcho();
+	hvertices->DeepEcho();
 	helement->DeepEcho();
 	hmatpar->DeepEcho();
@@ -183,12 +197,14 @@
 
 	/*now deal with hooks and objects: */
-	icefront->hnodes=(Hook*)this->hnodes->copy();
-	icefront->helement=(Hook*)this->helement->copy();
-	icefront->hmatpar=(Hook*)this->hmatpar->copy();
+	icefront->hnodes    = (Hook*)this->hnodes->copy();
+	icefront->hvertices = (Hook*)this->hvertices->copy();
+	icefront->helement  = (Hook*)this->helement->copy();
+	icefront->hmatpar   = (Hook*)this->hmatpar->copy();
 
 	/*corresponding fields*/
-	icefront->nodes  =(Node**)icefront->hnodes->deliverp();
-	icefront->element=(Element*)icefront->helement->delivers();
-	icefront->matpar =(Matpar*)icefront->hmatpar->delivers();
+	icefront->nodes    = (Node**)icefront->hnodes->deliverp();
+	icefront->vertices = (Vertex**)icefront->hvertices->deliverp();
+	icefront->element  = (Element*)icefront->helement->delivers();
+	icefront->matpar   = (Matpar*)icefront->hmatpar->delivers();
 
 	return icefront;
@@ -204,11 +220,13 @@
 	 * datasets, using internal ids and offsets hidden in hooks: */
 	hnodes->configure(nodesin);
+	hvertices->configure(verticesin);
 	helement->configure(elementsin);
 	hmatpar->configure(materialsin);
 
 	/*Initialize hooked fields*/
-	this->nodes  =(Node**)hnodes->deliverp();
-	this->element=(Element*)helement->delivers();
-	this->matpar =(Matpar*)hmatpar->delivers();
+	this->nodes    = (Node**)hnodes->deliverp();
+	this->vertices = (Vertex**)hvertices->deliverp();
+	this->element  = (Element*)helement->delivers();
+	this->matpar   = (Matpar*)hmatpar->delivers();
 
 	/*point parameters to real dataset: */
Index: /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Loads/Icefront.h	(revision 14761)
@@ -26,16 +26,18 @@
 
 		/*hooks: */
-		Hook* hnodes;
-		Hook* helement;
-		Hook* hmatpar;
+		Hook *hnodes;
+		Hook *hvertices;
+		Hook *helement;
+		Hook *hmatpar;
 
 		/*Corresponding fields*/
 		Matpar   *matpar;
 		Node    **nodes;
+		Vertex  **vertices;
 		Element  *element;
 
 		/*inputs and parameters: */
-		Inputs* inputs;
-		Parameters* parameters;
+		Inputs     *inputs;
+		Parameters *parameters;
 
 		/*Icefront constructors, destructors: {{{*/
Index: /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.cpp	(revision 14761)
@@ -26,10 +26,11 @@
 /*FUNCTION Numericalflux::Numericalflux(){{{*/
 Numericalflux::Numericalflux(){
-	this->inputs=NULL;
-	this->parameters=NULL;
-	this->helement=NULL;
-	this->element=NULL;
-	this->hnodes=NULL;
-	this->nodes=NULL;
+	this->inputs     = NULL;
+	this->parameters = NULL;
+	this->helement   = NULL;
+	this->element    = NULL;
+	this->hnodes     = NULL;
+	this->hvertices  = NULL;
+	this->nodes      = NULL;
 }
 /*}}}*/
@@ -48,4 +49,5 @@
 	int   numericalflux_elem_ids[2];
 	int   numericalflux_mparid;
+	int   numericalflux_vertex_ids[2];
 	int   numericalflux_node_ids[4];
 	int   numericalflux_type;
@@ -83,5 +85,8 @@
 	i1=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+0]);
 	i2=reCast<int>(iomodel->Data(MeshEdgesEnum)[4*i+1]);
-
+	numericalflux_vertex_ids[0]=i1;
+	numericalflux_vertex_ids[1]=i2;
+
+	/*2: Get node ids*/
 	if (numericalflux_type==InternalEnum){
 
@@ -126,6 +131,7 @@
 
 	/*Hooks: */
-	this->hnodes  =new Hook(numericalflux_node_ids,num_nodes);
-	this->helement=new Hook(numericalflux_elem_ids,1); // take only the first element for now
+	this->hnodes    =new Hook(numericalflux_node_ids,num_nodes);
+	this->hvertices =new Hook(numericalflux_vertex_ids,2);
+	this->helement  =new Hook(numericalflux_elem_ids,1); // take only the first element for now
 
 	//intialize  and add as many inputs per element as requested: 
@@ -145,4 +151,5 @@
 	delete helement;
 	delete hnodes;
+	delete hvertices;
 }
 /*}}}*/
@@ -155,4 +162,5 @@
 	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
 	hnodes->Echo();
+	hvertices->Echo();
 	helement->Echo();
 	_printLine_("   parameters: " << parameters);
@@ -167,4 +175,5 @@
 	_printLine_("   analysis_type: " << EnumToStringx(analysis_type));
 	hnodes->DeepEcho();
+	hvertices->DeepEcho();
 	helement->DeepEcho();
 	_printLine_("   parameters");
@@ -210,10 +219,12 @@
 
 	/*now deal with hooks and objects: */
-	numericalflux->hnodes=(Hook*)this->hnodes->copy();
-	numericalflux->helement=(Hook*)this->helement->copy();
+	numericalflux->hnodes    = (Hook*)this->hnodes->copy();
+	numericalflux->hvertices = (Hook*)this->hvertices->copy();
+	numericalflux->helement  = (Hook*)this->helement->copy();
 
 	/*corresponding fields*/
-	numericalflux->nodes  =(Node**)numericalflux->hnodes->deliverp();
-	numericalflux->element=(Element*)numericalflux->helement->delivers();
+	numericalflux->nodes    = (Node**)numericalflux->hnodes->deliverp();
+	numericalflux->vertices = (Vertex**)numericalflux->hvertices->deliverp();
+	numericalflux->element  = (Element*)numericalflux->helement->delivers();
 
 	return numericalflux;
@@ -228,13 +239,14 @@
 	 * datasets, using internal ids and offsets hidden in hooks: */
 	hnodes->configure(nodesin);
+	hvertices->configure(verticesin);
 	helement->configure(elementsin);
 
 	/*Initialize hooked fields*/
-	this->nodes  =(Node**)hnodes->deliverp();
-	this->element=(Element*)helement->delivers();
+	this->nodes    = (Node**)hnodes->deliverp();
+	this->vertices = (Vertex**)hvertices->deliverp();
+	this->element  = (Element*)helement->delivers();
 
 	/*point parameters to real dataset: */
 	this->parameters=parametersin;
-
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 14760)
+++ /issm/trunk-jpl/src/c/classes/objects/Loads/Numericalflux.h	(revision 14761)
@@ -26,7 +26,9 @@
 		Hook *helement;
 		Hook *hnodes;
+		Hook *hvertices;
 
 		/*Corresponding fields*/
 		Element     *element;
+		Vertex     **vertices;
 		Node       **nodes;
 		Parameters  *parameters;
@@ -39,41 +41,41 @@
 		/*}}}*/
 		/*Object virtual functions definitions:{{{ */
-		void  Echo();
-		void  DeepEcho();
-		int   Id(); 
-		int   ObjectEnum();
-		Object* copy();
+		void    Echo();
+		void    DeepEcho();
+		int     Id();
+		int     ObjectEnum();
+		Object *copy();
 		/*}}}*/
 		/*Update virtual functions resolution: {{{*/
-		void    InputUpdateFromVector(IssmDouble* vector, int name, int type){/*Do nothing*/}
-		void    InputUpdateFromVector(int* vector, int name, int type){_error_("Not implemented yet!");}
-		void    InputUpdateFromVector(bool* vector, int name, int type){_error_("Not implemented yet!");}
-		void    InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){/*Do nothing*/}
-		void    InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){/*Do nothing*/}
-		void    InputUpdateFromVectorDakota(int* vector, int name, int type){_error_("Not implemented yet!");}
-		void    InputUpdateFromVectorDakota(bool* vector, int name, int type){_error_("Not implemented yet!");}
-		void    InputUpdateFromConstant(IssmDouble constant, int name){/*Do nothing*/};
-		void    InputUpdateFromConstant(int constant, int name){/*Do nothing*/};
-		void    InputUpdateFromConstant(bool constant, int name){_error_("Not implemented yet!");}
-		void    InputUpdateFromSolution(IssmDouble* solution){_error_("Not implemented yet!");}
-		void  InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
+		void InputUpdateFromVector(IssmDouble* vector, int name, int type){/*Do nothing*/}
+		void InputUpdateFromVector(int* vector, int name, int type){_error_("Not implemented yet!");}
+		void InputUpdateFromVector(bool* vector, int name, int type){_error_("Not implemented yet!");}
+		void InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){/*Do nothing*/}
+		void InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type){/*Do nothing*/}
+		void InputUpdateFromVectorDakota(int* vector, int name, int type){_error_("Not implemented yet!");}
+		void InputUpdateFromVectorDakota(bool* vector, int name, int type){_error_("Not implemented yet!");}
+		void InputUpdateFromConstant(IssmDouble constant, int name){/*Do nothing*/};
+		void InputUpdateFromConstant(int constant, int name){/*Do nothing*/};
+		void InputUpdateFromConstant(bool constant, int name){_error_("Not implemented yet!");}
+		void InputUpdateFromSolution(IssmDouble* solution){_error_("Not implemented yet!");}
+		void InputUpdateFromIoModel(int index, IoModel* iomodel){_error_("not implemented yet");};
 		/*}}}*/
 		/*Load virtual functions definitions: {{{*/
-		void  Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
-		void  SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
-		void  CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
-		void  CreatePVector(Vector<IssmDouble>* pf);
-		void  GetNodesSidList(int* sidlist);
-		int   GetNumberOfNodes(void);
-		void  CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
-		bool  IsPenalty(void);
-		void  PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
-		void  PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
-		void  PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
-		void  SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
-		bool  InAnalysis(int analysis_type);
+		void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+		void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
+		void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs);
+		void CreatePVector(Vector<IssmDouble>* pf);
+		void GetNodesSidList(int* sidlist);
+		int  GetNumberOfNodes(void);
+		void CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("Not implemented yet");};
+		bool IsPenalty(void);
+		void PenaltyCreateJacobianMatrix(Matrix<IssmDouble>* Jff,IssmDouble kmax){_error_("Not implemented yet");};
+		void PenaltyCreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* kfs, IssmDouble kmax);
+		void PenaltyCreatePVector(Vector<IssmDouble>* pf, IssmDouble kmax);
+		void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
+		bool InAnalysis(int analysis_type);
 		/*}}}*/
 		/*Numericalflux management:{{{*/
-		void  GetNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
+		void           GetNormal(IssmDouble* normal,IssmDouble xyz_list[4][3]);
 		ElementMatrix* CreateKMatrixPrognostic(void);
 		ElementMatrix* CreateKMatrixPrognosticInternal(void);
Index: /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 14760)
+++ /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 14761)
@@ -14,11 +14,11 @@
 
 	/*Intermediary*/
+	int i;
 	int noerr=1;
-	int i;
-	Element* element=NULL;
-	Load* load=NULL;
-	Node* node=NULL;
-	Material* material=NULL;
 	int configuration_type;
+	Element  *element  = NULL;
+	Load     *load     = NULL;
+	Node     *node     = NULL;
+	Material *material = NULL;
 
 	/*Get analysis type: */
@@ -28,5 +28,5 @@
 	for (i=0;i<elements->Size();i++){
 		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
-		element->Configure(elements,loads,nodes,materials,parameters);
+		element->Configure(elements,loads,nodes,vertices,materials,parameters);
 	}
 	if(VerboseMProcessor()) _pprintLine_("      Configuring loads...");
