Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 17671)
@@ -526,4 +526,29 @@
 		lidlist[i]=nodes[i]->Lid();
 	}
+}
+/*}}}*/
+void  Element::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){/*{{{*/
+
+	/*Fetch number vertices for this element and allocate arrays*/
+	int numvertices = this->GetNumberOfVertices();
+	int*        vertexpidlist = xNew<int>(numvertices);
+	IssmDouble* values        = xNew<IssmDouble>(numvertices);
+
+	/*Fill in values*/
+	this->GetVertexPidList(vertexpidlist);
+	this->GetInputListOnNodesVelocity(values,input_enum);
+	vector->SetValues(numvertices,vertexpidlist,values,INS_VAL);
+
+	/*Clean up*/
+	xDelete<int>(vertexpidlist);
+	xDelete<IssmDouble>(values);
+
+}
+/*}}}*/
+void  Element::GetVertexPidList(int* pidlist){/*{{{*/
+
+	int numvertices = this->GetNumberOfVertices();
+	for(int i=0;i<numvertices;i++) pidlist[i]=vertices[i]->Pid();
+
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 17671)
@@ -86,4 +86,6 @@
 		void       GetNodesLidList(int* lidlist);
 		void       GetPhi(IssmDouble* phi, IssmDouble*  epsilon, IssmDouble viscosity);
+		void       GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
+		void	     GetVertexPidList(int* pidlist);
 		void       GetVerticesCoordinates(IssmDouble** xyz_list);
 		void       GetVerticesSidList(int* sidlist);
@@ -220,5 +222,4 @@
 
 		virtual void   InputScale(int enum_type,IssmDouble scale_factor)=0;
-		virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
 		virtual IssmDouble TimeAdapt()=0;
 		virtual void   PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 17671)
@@ -825,11 +825,4 @@
 }
 /*}}}*/
-/*FUNCTION Penta::GetVertexPidList {{{*/
-void  Penta::GetVertexPidList(int* doflist){
-
-	for(int i=0;i<6;i++) doflist[i]=vertices[i]->Pid();
-
-}
-/*}}}*/
 /*FUNCTION Penta::GetElementType {{{*/
 int Penta::GetElementType(){
@@ -966,23 +959,4 @@
 
 	return tau_parameter;
-}
-/*}}}*/
-/*FUNCTION Penta::GetVectorFromInputs{{{*/
-void  Penta::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){
-
-	int vertexpidlist[NUMVERTICES];
-
-	/*Get out if this is not an element input*/
-	if (!IsInput(input_enum)) return;
-
-	/*Prepare index list*/
-	this->GetVertexPidList(&vertexpidlist[0]);
-
-	/*Get input (either in element or material)*/
-	Input* input=inputs->GetInput(input_enum);
-	if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in element");
-
-	/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
-	input->GetVectorFromInputs(vector,&vertexpidlist[0]);
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 17671)
@@ -80,5 +80,4 @@
 		IssmDouble GetYcoord(Gauss* gauss);
 		IssmDouble GetZcoord(Gauss* gauss);
-		void   GetVectorFromInputs(Vector<IssmDouble>* vector,int name_enum);
 		void   GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
 		void   GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
@@ -178,6 +177,4 @@
 		ElementMatrix* CreateBasalMassMatrix(void);
 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble* xyz_zero,IssmDouble* xyz_list,int numpoints);
-
-		void	         GetVertexPidList(int* doflist);
 		int            GetElementType(void);
 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 17671)
@@ -128,5 +128,4 @@
 
 		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
-		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
 		void        InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 17671)
@@ -844,6 +844,7 @@
 			tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofelements+iomodel->elements[4*index+3];
 			break;
+		case TaylorHoodEnum:
 			numnodes        = 14;
-			tetra_node_ids   = xNew<int>(numnodes);
+			tetra_node_ids  = xNew<int>(numnodes);
 			tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
 			tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 17671)
@@ -133,5 +133,4 @@
 
 		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type){_error_("not implemented yet");};
-		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum){_error_("not implemented yet");};
 		void        InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");};
 		void        InputDuplicate(int original_enum,int new_enum){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 17671)
@@ -834,30 +834,4 @@
 
 }/*}}}*/
-/*FUNCTION Tria::GetVertexPidList {{{*/
-void  Tria::GetVertexPidList(int* doflist){
-
-	for(int i=0;i<3;i++) doflist[i]=vertices[i]->Pid();
-
-}
-/*}}}*/
-/*FUNCTION Tria::GetVectorFromInputs{{{*/
-void  Tria::GetVectorFromInputs(Vector<IssmDouble>* vector,int input_enum){
-
-	int vertexpidlist[NUMVERTICES];
-
-	/*Get out if this is not an element input*/
-	if(!IsInput(input_enum)) return;
-
-	/*Prepare index list*/
-	this->GetVertexPidList(&vertexpidlist[0]);
-
-	/*Get input (either in element or material)*/
-	Input* input=inputs->GetInput(input_enum);
-	if(!input) _error_("Input " << EnumToStringx(input_enum) << " not found in element");
-
-	/*We found the enum.  Use its values to fill into the vector, using the vertices ids: */
-	input->GetVectorFromInputs(vector,&vertexpidlist[0]);
-}
-/*}}}*/
 /*FUNCTION Tria::GetXcoord {{{*/
 IssmDouble Tria::GetXcoord(Gauss* gauss){
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 17670)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 17671)
@@ -82,5 +82,4 @@
 		int         NumberofNodesPressure(void);
 		void        GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution,int enum_type);
-		void        GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum);
 		void        GetVerticesCoordinatesBase(IssmDouble** pxyz_list);
 		void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
@@ -180,6 +179,4 @@
 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble* xyz_zero,IssmDouble* xyz_list,int numpoints);
 		int            GetElementType(void);
-
-		void	         GetVertexPidList(int* doflist);
 		IssmDouble     GetXcoord(Gauss* gauss);
 		IssmDouble     GetYcoord(Gauss* gauss);
