Index: /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp	(revision 15450)
@@ -49,5 +49,5 @@
 
 	/*retrieve material_id: */
-	iomodel->Constant(&matpar_id,MeshNumberofelementsEnum); matpar_id++;
+	matpar_id = iomodel->numberofelements+1;
 
 	/*retrieve material_id*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/classes/Loads/Icefront.cpp	(revision 15450)
@@ -43,15 +43,11 @@
 	int numnodes; 
 	int numvertices; 
-	int numberofelements;
 
 	/*icefront constructor data: */
 	int  icefront_eid;
 	int  icefront_mparid;
-	int  icefront_node_ids[NUMVERTICESQUA]; //initialize with largest size
-	int  icefront_vertex_ids[NUMVERTICESQUA]; //initialize with largest size
 	int  icefront_fill;
-
-	/*find parameters: */
-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
+	int *icefront_node_ids   = NULL;
+	int *icefront_vertex_ids = NULL;
 
 	/*First, retrieve element index and element type: */
@@ -63,11 +59,15 @@
 	}
 	_assert_(iomodel->Data(DiagnosticIcefrontEnum));
-	element=reCast<int,IssmDouble>(*(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)-1); //element is in the penultimate column (node1 node2 ... elem fill)
+	element=reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]-1);
 
 	/*Build ids for hook constructors: */
-	icefront_eid=reCast<int,IssmDouble>( *(iomodel->Data(DiagnosticIcefrontEnum)+segment_width*i+segment_width-2)); //matlab indexing
-	icefront_mparid=numberofelements+1; //matlab indexing
+	icefront_eid    = reCast<int,IssmDouble>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-2]); //matlab indexing
+	icefront_mparid = iomodel->numberofelements+1;
 
 	if (in_icefront_type==MacAyeal2dIceFrontEnum || in_icefront_type==MacAyeal3dIceFrontEnum){
+		numnodes    = 2;
+		numvertices = 2;
+		icefront_node_ids   = xNew<int>(numnodes);
+		icefront_vertex_ids = xNew<int>(numvertices);
 		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));
@@ -76,4 +76,8 @@
 	}
 	else if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
+		numnodes    = 4;
+		numvertices = 4;
+		icefront_node_ids   = xNew<int>(numnodes);
+		icefront_vertex_ids = xNew<int>(numvertices);
 		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));
@@ -87,13 +91,4 @@
 	else _error_("in_icefront_type " << EnumToStringx(in_icefront_type) << " not supported yet!");
 
-	if (in_icefront_type==PattynIceFrontEnum || in_icefront_type==StokesIceFrontEnum){
-		numnodes=4;
-		numvertices=4;
-	}
-	else{
-		numnodes=2;
-		numvertices=2;
-	}
-
 	/*Fill*/
 	icefront_fill=reCast<int>(iomodel->Data(DiagnosticIcefrontEnum)[segment_width*i+segment_width-1]);
@@ -120,6 +115,9 @@
 	this->element    = NULL;
 	this->matpar     = NULL;
-}
-
+
+	/*Clean up*/
+	xDelete<int>(icefront_node_ids);
+	xDelete<int>(icefront_vertex_ids);
+}
 /*}}}*/
 /*FUNCTION Icefront::Icefront(const char* element_type_in,Inputs* inputs_in,Matpar* matpar_in, int icefront_type, int in_analysis_type) {{{*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/classes/Loads/Riftfront.cpp	(revision 15450)
@@ -44,5 +44,4 @@
 	IssmDouble riftfront_fractionincrement;
 	bool   riftfront_shelf;
-	int    numberofelements;
 	int    penalty_lock;
 
@@ -52,5 +51,4 @@
 
 	/*Fetch parameters: */
-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
 	iomodel->Constant(&penalty_lock,DiagnosticRiftPenaltyLockEnum);
 
@@ -71,5 +69,5 @@
 	riftfront_elem_ids[0]=el1;
 	riftfront_elem_ids[1]=el2;
-	riftfront_matpar_id=numberofelements+1; //matlab indexing
+	riftfront_matpar_id=iomodel->numberofelements+1; //matlab indexing
 
 	/*Hooks: */
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 15450)
@@ -16,10 +16,8 @@
 	Element  *element = NULL;
 	Material *material = NULL;
-	int    numberofelements;
 	int    num_control_type;
 	bool   control_analysis;
 
 	/*Fetch parameters: */
-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
 	iomodel->Constant(&control_analysis,InversionIscontrolEnum);
 	if(control_analysis) iomodel->Constant(&num_control_type,InversionNumControlParametersEnum);
@@ -49,5 +47,5 @@
 	/*Update elements and materials: */
 	counter=0;
-	for (i=0;i<numberofelements;i++){
+	for (i=0;i<iomodel->numberofelements;i++){
 		if(iomodel->my_elements[i]){
 			element=(Element*)elements->GetObjectByOffset(counter);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/DiagnosticHutter/UpdateElementsDiagnosticHutter.cpp	(revision 15450)
@@ -11,9 +11,6 @@
 void	UpdateElementsDiagnosticHutter(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
-	int    numberofelements;
+	/*Fetch data needed: */
 	bool   ishutter;
-
-	/*Fetch data needed: */
-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
 	iomodel->Constant(&ishutter,FlowequationIshutterEnum);
 
@@ -25,5 +22,5 @@
 	/*Update elements: */
 	int counter=0;
-	for(int i=0;i<numberofelements;i++){
+	for(int i=0;i<iomodel->numberofelements;i++){
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Enthalpy/UpdateElementsEnthalpy.cpp	(revision 15450)
@@ -11,9 +11,4 @@
 void	UpdateElementsEnthalpy(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
-	int    numberofelements;
-
-	/*Fetch parameters: */
-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
-
 	/*Now, is the model 3d? otherwise, do nothing: */
 	if(iomodel->dim==2)return;
@@ -24,5 +19,5 @@
 	/*Update elements: */
 	int counter=0;
-	for(int i=0;i<numberofelements;i++){
+	for(int i=0;i<iomodel->numberofelements;i++){
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15449)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Prognostic/UpdateElementsPrognostic.cpp	(revision 15450)
@@ -11,5 +11,4 @@
 void	UpdateElementsPrognostic(Elements* elements, IoModel* iomodel,int analysis_counter,int analysis_type){
 
-	int    numberofelements;
 	int    stabilization;
 	bool   dakota_analysis;
@@ -19,5 +18,4 @@
 
 	/*Fetch data needed: */
-	iomodel->Constant(&numberofelements,MeshNumberofelementsEnum);
 	iomodel->Constant(&stabilization,PrognosticStabilizationEnum);
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
@@ -28,5 +26,5 @@
 	/*Update elements: */
 	int counter=0;
-	for(int i=0;i<numberofelements;i++){
+	for(int i=0;i<iomodel->numberofelements;i++){
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
