Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 16208)
@@ -67,5 +67,5 @@
 		virtual void   InputToResult(int enum_type,int step,IssmDouble time)=0;
 		virtual void   InputDuplicate(int original_enum,int new_enum)=0;
-		virtual void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
+		virtual void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
 		virtual void   RequestedOutput(int output_enum,int step,IssmDouble time)=0;
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 16208)
@@ -1874,6 +1874,6 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputCreate(IssmDouble* vector,int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
-void Penta::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
+/*FUNCTION Penta::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+void Penta::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){
 
 	/*Intermediaries*/
@@ -1891,5 +1891,5 @@
 		for(i=0;i<6;i++){ 
 			_assert_(iomodel->elements);
-			penta_vertex_ids[i]=iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
+			penta_vertex_ids[i]=iomodel->elements[6*this->sid+i]; //ids for vertices are in the elements array from Matlab
 		}
 
@@ -1930,11 +1930,11 @@
 
 			if (code==5){ //boolean
-				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool,IssmDouble>(vector[index])));
+				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool,IssmDouble>(vector[this->sid])));
 			}
 			else if (code==6){ //integer
-				this->inputs->AddInput(new IntInput(vector_enum,reCast<int,IssmDouble>(vector[index])));
+				this->inputs->AddInput(new IntInput(vector_enum,reCast<int,IssmDouble>(vector[this->sid])));
 			}
 			else if (code==7){ //IssmDouble
-				this->inputs->AddInput(new DoubleInput(vector_enum,vector[index]));
+				this->inputs->AddInput(new DoubleInput(vector_enum,vector[this->sid]));
 			}
 			else _error_("could not recognize nature of vector from code " << code);
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 16208)
@@ -94,5 +94,5 @@
 		int    Sid();
 		void   InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
-		void   InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+		void   InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
 		void   InputDuplicate(int original_enum,int new_enum);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 16208)
@@ -24,8 +24,8 @@
 /*FUNCTION Tria::Tria(){{{*/
 Tria::Tria(){
-	this->nodes    = NULL;
-	this->vertices = NULL;
-	this->material = NULL;
-	this->matpar   = NULL;
+	this->nodes      = NULL;
+	this->vertices   = NULL;
+	this->material   = NULL;
+	this->matpar     = NULL;
 	this->inputs     = NULL;
 	this->parameters = NULL;
@@ -36,13 +36,12 @@
 /*FUNCTION Tria::Tria(int id, int sid,int index, IoModel* iomodel,int nummodels){{{*/
 Tria::Tria(int tria_id, int tria_sid, int index, IoModel* iomodel,int nummodels)
-	:TriaRef(nummodels)
-	,ElementHook(nummodels,index+1,3,iomodel){
+	:TriaRef(nummodels),ElementHook(nummodels,index+1,3,iomodel){
 
 		/*id: */
-		this->id=tria_id;
-		this->sid=tria_sid;
+		this->id  = tria_id;
+		this->sid = tria_sid;
 
 		//this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
-		this->parameters=NULL;
+		this->parameters = NULL;
 
 		/*intialize inputs and results: */
@@ -81,11 +80,11 @@
 	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();
+	tria->hvertices = (Hook*)this->hvertices->copy();
+	tria->hmaterial = (Hook*)this->hmaterial->copy();
+	tria->hmatpar   = (Hook*)this->hmatpar->copy();
 
 	/*deal with Tria fields: */
-	tria->id=this->id;
-	tria->sid=this->sid;
+	tria->id  = this->id;
+	tria->sid = this->sid;
 	if(this->inputs){
 		tria->inputs=(Inputs*)this->inputs->Copy();
@@ -104,9 +103,10 @@
 
 	/*recover objects: */
-	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.
+	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();
+
+	tria->vertices = (Vertex**)tria->hvertices->deliverp();
+	tria->material = (Material*)tria->hmaterial->delivers();
+	tria->matpar   = (Matpar*)tria->hmatpar->delivers();
 
 	return tria;
@@ -1867,6 +1867,6 @@
 }
 /*}}}*/
-/*FUNCTION Tria::InputCreate(IssmDouble* vector,int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
-void Tria::InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){//index into elements
+/*FUNCTION Tria::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){{{*/
+void Tria::InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){
 
 	/*Intermediaries*/
@@ -1884,5 +1884,5 @@
 		for(i=0;i<3;i++){ 
 			_assert_(iomodel->elements);
-			tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*index+i]); //ids for vertices are in the elements array from Matlab
+			tria_vertex_ids[i]=reCast<int>(iomodel->elements[3*this->sid+i]); //ids for vertices are in the elements array from Matlab
 		}
 
@@ -1923,11 +1923,11 @@
 
 			if (code==5){ //boolean
-				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool>(vector[index])));
+				this->inputs->AddInput(new BoolInput(vector_enum,reCast<bool>(vector[this->sid])));
 			}
 			else if (code==6){ //integer
-				this->inputs->AddInput(new IntInput(vector_enum,reCast<int>(vector[index])));
+				this->inputs->AddInput(new IntInput(vector_enum,reCast<int>(vector[this->sid])));
 			}
 			else if (code==7){ //IssmDouble
-				this->inputs->AddInput(new DoubleInput(vector_enum,vector[index]));
+				this->inputs->AddInput(new DoubleInput(vector_enum,vector[this->sid]));
 			}
 			else _error_("could not recognize nature of vector from code " << code);
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 16208)
@@ -91,5 +91,5 @@
 		void        GetVectorFromResults(Vector<IssmDouble>* vector,int offset,int enum_in,int interp);
 		void        InputArtificialNoise(int enum_type,IssmDouble min, IssmDouble max);
-		void        InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+		void        InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=MeshElementsEnum);
 		void        InputDuplicate(int original_enum,int new_enum);
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 16208)
@@ -531,5 +531,5 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(bool*     pbool,int data_enum){{{*/
+/*FUNCTION IoModel::FetchData(bool*         pbool,int data_enum){{{*/
 void  IoModel::FetchData(bool* pboolean,int data_enum){
 
@@ -560,5 +560,5 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(int*      pinteger,int data_enum){{{*/
+/*FUNCTION IoModel::FetchData(int*          pinteger,int data_enum){{{*/
 void  IoModel::FetchData(int* pinteger,int data_enum){
 
@@ -616,5 +616,5 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(char**    pstring,int data_enum){{{*/
+/*FUNCTION IoModel::FetchData(char**        pstring,int data_enum){{{*/
 void  IoModel::FetchData(char** pstring,int data_enum){
 
@@ -663,5 +663,5 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(int**     pintegerematrix,int* pM,int* pN,int data_enum){{{*/
+/*FUNCTION IoModel::FetchData(int**         pintegerematrix,int* pM,int* pN,int data_enum){{{*/
 void  IoModel::FetchData(int** pmatrix,int* pM,int* pN,int data_enum){
 
@@ -792,5 +792,5 @@
 }
 /*}}}*/
-/*FUNCTION IoModel::FetchData(char***   pstrings,int* pnumstrings,int data_enum){{{*/
+/*FUNCTION IoModel::FetchData(char***       pstrings,int* pnumstrings,int data_enum){{{*/
 void  IoModel::FetchData(char*** pstrings,int* pnumstrings,int data_enum){
 
@@ -1033,13 +1033,9 @@
 /*}}}*/
 /*FUNCTION IoModel::FetchDataToInput{{{*/
-void IoModel::FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum,IssmDouble default_value){
+void IoModel::FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value){
 
 	/*intermediary: */
 	int     i;
-	bool    defaulting    = false;
-	int     code          = 0;
-	int     vector_layout = 0;
-	int     counter;
-	int     numberofelements;
+	int     code,vector_layout;
 
 	/*variables being fetched: */
@@ -1051,12 +1047,9 @@
 	int         M,N;
 
-	/*Fetch parameters: */
-	this->constants->FindParam(&numberofelements,MeshNumberofelementsEnum);
-
 	/*First of, find the record for the enum, and get code  of data type: */
 	this->SetFilePointerToData(&code, &vector_layout,vector_enum);
 
 	switch(code){
-		case 1: //boolean constant.  {{{
+		case 1: //boolean constant
 			this->FetchData(&boolean,vector_enum);
 			for(i=0;i<elements->Size();i++){
@@ -1064,6 +1057,6 @@
 				element->InputUpdateFromConstant(boolean,vector_enum);
 			}
-			break; /*}}}*/
-		case 2: //integer constant.  {{{
+			break;
+		case 2: //integer constant
 			this->FetchData(&integer,vector_enum);
 			for(i=0;i<elements->Size();i++){
@@ -1071,6 +1064,6 @@
 				element->InputUpdateFromConstant(integer,vector_enum);
 			}
-			break; /*}}}*/
-		case 3: //IssmDouble constant.  {{{
+			break;
+		case 3: //IssmDouble constant
 			this->FetchData(&scalar,vector_enum);
 			for(i=0;i<elements->Size();i++){
@@ -1078,127 +1071,38 @@
 				element->InputUpdateFromConstant(scalar,vector_enum);
 			}
-			break; /*}}}*/
-		case 5: //boolean vector.  {{{
-
-			/*Fetch vector:*/
+			break; 
+		case 5: //boolean vector
 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
-			/*Check we got something, otherwise fetch default: */
-			if(doublearray){
-				defaulting=false;  //we are not defaulting, because  we do have a vector
-			}
-			else{
-				/*do we have a default enum to go fetch? */
-				if(default_vector_enum!=NoneEnum){
-					/*yes. fetch it: */
-					this->FetchData(&doublearray,&M,&N,default_vector_enum);
-					if(doublearray){
-						defaulting=false;  //we are not defaulting, because  we do have a vector
-					}
-					else{
-						/*even the default vector is non existent. we are defaulting to the default value: */
-						defaulting=true;
-					}
-				}
-				else{
-					/*we are left with the default value: */
-					defaulting=true;
-				}
-			}
-
-			/*Create inputs:*/
-			counter=0;
-			for (i=0;i<numberofelements;i++){
-				if(this->my_elements[i]){
-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
-					if(defaulting) element->InputUpdateFromConstant(reCast<bool>(default_value),vector_enum); 
-					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
-					counter++;
-				}
-			}
-			break; /*}}}*/
-		case 6: //int vector{{{
-
-			/*Fetch vector:*/
+			for(i=0;i<elements->Size();i++){
+				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+				if(!doublearray) element->InputUpdateFromConstant(reCast<bool>(default_value),vector_enum); 
+				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+				element->InputUpdateFromConstant(boolean,vector_enum);
+			}
+			break;
+		case 6: //int vector
 			this->FetchData(&doublearray,&M,&N,vector_enum); //we still have a doublearray, because it might include times in transient mode
-			/*Check we got something, otherwise fetch default: */
-			if(doublearray){
-				defaulting=false;  //we are not defaulting, because  we do have a vector
-			}
-			else{
-				/*do we have a default enum to go fetch? */
-				if(default_vector_enum!=NoneEnum){
-					/*yes. fetch it: */
-					this->FetchData(&doublearray,&M,&N,default_vector_enum);
-					if(doublearray){
-						defaulting=false;  //we are not defaulting, because  we do have a vector
-					}
-					else{
-						/*even the default vector is non existent. we are defaulting to the default value: */
-						defaulting=true;
-					}
-				}
-				else{
-					/*we are left with the default value: */
-					defaulting=true;
-				}
-			}
-
-			/*Create inputs:*/
-			counter=0;
-			for (i=0;i<numberofelements;i++){
-				if(this->my_elements[i]){
-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
-					if(defaulting) element->InputUpdateFromConstant(reCast<int>(default_value),vector_enum); 
-					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
-					counter++;
-				}
-			}
-			break; /*}}}*/
-		case 7: //IssmDouble vector{{{
-
-			/*Fetch vector:*/
+			for(i=0;i<elements->Size();i++){
+				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+				if(!doublearray) element->InputUpdateFromConstant(reCast<int>(default_value),vector_enum); 
+				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+				element->InputUpdateFromConstant(boolean,vector_enum);
+			}
+			break;
+		case 7: //IssmDouble vector
 			this->FetchData(&doublearray,&M,&N,vector_enum);
-			/*Check we got something, otherwise fetch default: */
-			if(doublearray){
-				defaulting=false;  //we are not defaulting, because  we do have a vector
-			}
-			else{
-				/*do we have a default enum to go fetch? */
-				if(default_vector_enum!=NoneEnum){
-					/*yes. fetch it: */
-					this->FetchData(&doublearray,&M,&N,default_vector_enum);
-					if(doublearray){
-						defaulting=false;  //we are not defaulting, because  we do have a vector
-					}
-					else{
-						/*even the default vector is non existent. we are defaulting to the default value: */
-						defaulting=true;
-					}
-				}
-				else{
-					/*we are left with the default value: */
-					defaulting=true;
-				}
-			}
-
-			/*Create inputs:*/
-			counter=0;
-			for (i=0;i<numberofelements;i++){
-				if(this->my_elements[i]){
-					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
-					if(defaulting) element->InputUpdateFromConstant(default_value,vector_enum); 
-					else           element->InputCreate(doublearray,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
-					counter++;
-				}
-			}
-
-			break; /*}}}*/
-		default: /*{{{*/
+			for(i=0;i<elements->Size();i++){
+				Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
+				if(!doublearray) element->InputUpdateFromConstant(default_value,vector_enum); 
+				else             element->InputCreate(doublearray,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
+				element->InputUpdateFromConstant(boolean,vector_enum);
+			}
+			break;
+		default:
 			_error_("data code " << code << " not supported yet!");
 			break;
-			/*}}}*/
 	}
 	/*Free ressources. Pay attention to not freeing an AD mode independent variable though!:*/
-	if (!this->independents[vector_enum] && !this->independents[default_vector_enum]) xDelete<IssmDouble>(doublearray);
+	if (!this->independents[vector_enum]) xDelete<IssmDouble>(doublearray);
 	xDelete<char>(string);
 }
Index: /issm/trunk-jpl/src/c/classes/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 16207)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 16208)
@@ -78,5 +78,5 @@
 		void        FetchData(Option **poption,int data_enum);
 		void        FetchData(int num,...);
-		void        FetchDataToInput(Elements* elements,int vector_enum,int default_vector_enum=NoneEnum,IssmDouble default_value=0.);
+		void        FetchDataToInput(Elements* elements,int vector_enum,IssmDouble default_value=0.);
 		void        LastIndex(int *pindex);
 		FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
