Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 24343)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 24344)
@@ -689,5 +689,5 @@
 		}
 	}
-	basalelement->AddInput2(HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType());
+	element->AddBasalInput2(HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType());
 
 	if(domaintype!=Domain2DhorizontalEnum){
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24343)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 24344)
@@ -3282,11 +3282,26 @@
 
 	/*If this input is not already in Inputs, maybe it needs to be computed?*/
-	Input2* input2 = this->GetInput2(output_enum);
-	if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+	switch(this->inputs2->GetInputObjectEnum(output_enum)){
+		case TriaInput2Enum:
+		case PentaInput2Enum:{
+			Input2* input2 = this->GetInput2(output_enum);
+			if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+			*pinterpolation   = input2->GetResultInterpolation();
+			*pnodesperelement = input2->GetResultNumberOfNodes();
+			*parray_size      = input2->GetResultArraySize();
+			}
+			break;
+		case BoolInput2Enum:
+			*pinterpolation   = P0Enum;
+			*pnodesperelement = 1;
+			*parray_size      = 1;
+			break;
+		default:
+			_error_("Input type \""<<EnumToStringx(this->inputs2->GetInputObjectEnum(output_enum))<<"\" not supported yet");
+	}
+
 
 	/*Assign output pointer*/
-	*pinterpolation   = input2->GetResultInterpolation();
-	*pnodesperelement = input2->GetResultNumberOfNodes();
-	*parray_size      = input2->GetResultArraySize();
+
 	return;
 }/*}}}*/
@@ -3311,47 +3326,54 @@
 void       Element::ResultToVector(Vector<IssmDouble>* vector,int output_enum){/*{{{*/
 
-
-		Input2* input2=this->GetInput2(output_enum);
-		if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
-
-		switch(input2->GetResultInterpolation()){
-			case P0Enum:{
-								IssmDouble  value;
-								bool        bvalue;
-								switch(input2->ObjectEnum()){
-									case BoolInputEnum:
-										(xDynamicCast<BoolInput2*>(input2))->GetInput(&bvalue,this->lid);
-										value=reCast<IssmDouble>(bvalue);
-										break;
-									default:
-										Gauss* gauss = this->NewGauss();
-										input2->GetInputValue(&value,gauss);
-										delete gauss;
-								}
-								vector->SetValue(this->Sid(),value,INS_VAL);
-								break;
-							}
-			case P1Enum:{
-								const int NUM_VERTICES = this->GetNumberOfVertices();
-
-								IssmDouble *values      = xNew<IssmDouble>(NUM_VERTICES);
-								int        *connectivity= xNew<int>(NUM_VERTICES);
-								int        *sidlist     = xNew<int>(NUM_VERTICES);
-
-								this->GetVerticesSidList(sidlist);
-								this->GetVerticesConnectivityList(connectivity);
-								this->GetInputListOnVertices(values,output_enum);
-								for(int i=0;i<NUM_VERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]);
-
-								vector->SetValues(NUM_VERTICES,sidlist,values,ADD_VAL);
-
-								xDelete<IssmDouble>(values);
-								xDelete<int>(connectivity);
-								xDelete<int>(sidlist);
-								break;
-							}
-			default:
-						 _error_("interpolation "<<EnumToStringx(input2->GetResultInterpolation())<<" not supported yet");
-		}
+	switch(this->inputs2->GetInputObjectEnum(output_enum)){
+		case TriaInput2Enum:
+		case PentaInput2Enum:{
+
+			Input2* input2 = this->GetInput2(output_enum);
+			if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
+
+			switch(input2->GetResultInterpolation()){
+				case P0Enum:{
+					IssmDouble  value;
+					bool        bvalue;
+					Gauss* gauss = this->NewGauss();
+					input2->GetInputValue(&value,gauss);
+					delete gauss;
+					vector->SetValue(this->Sid(),value,INS_VAL);
+					break;
+					}
+				case P1Enum:{
+					const int NUM_VERTICES = this->GetNumberOfVertices();
+
+					IssmDouble *values      = xNew<IssmDouble>(NUM_VERTICES);
+					int        *connectivity= xNew<int>(NUM_VERTICES);
+					int        *sidlist     = xNew<int>(NUM_VERTICES);
+
+					this->GetVerticesSidList(sidlist);
+					this->GetVerticesConnectivityList(connectivity);
+					this->GetInputListOnVertices(values,output_enum);
+					for(int i=0;i<NUM_VERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]);
+
+					vector->SetValues(NUM_VERTICES,sidlist,values,ADD_VAL);
+
+					xDelete<IssmDouble>(values);
+					xDelete<int>(connectivity);
+					xDelete<int>(sidlist);
+					break;
+					}
+				default:
+					_error_("interpolation "<<EnumToStringx(input2->GetResultInterpolation())<<" not supported yet");
+				}
+			}
+			break;
+		case BoolInput2Enum:
+			bool bvalue;
+			this->GetInput2Value(&bvalue,output_enum);
+			vector->SetValue(this->Sid(),reCast<IssmDouble>(bvalue),INS_VAL);
+			break;
+		default:
+			_error_("Input type \""<<EnumToStringx(this->inputs2->GetInputObjectEnum(output_enum))<<"\" not supported yet");
+	}
+
 } /*}}}*/
 void       Element::SetBoolInput(Inputs2* inputs2,int enum_in,bool value){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 24343)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 24344)
@@ -194,4 +194,5 @@
 	if(!this->inputs2){
 		int* temp = xNew<int>(3);
+		_error_("inputs2 not set");
 	}
 	_assert_(this->inputs2);
Index: /issm/trunk-jpl/src/c/classes/Inputs2/BoolInput2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/BoolInput2.cpp	(revision 24343)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/BoolInput2.cpp	(revision 24344)
@@ -44,6 +44,7 @@
 void BoolInput2::DeepEcho(void){/*{{{*/
 
-	//_printf_(setw(15)<<"   BoolInput2 "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
-	_error_("Not implemented");
+	_printf_("BoolInput2 Echo:\n");
+	_printf_("   Size:          "<<size<<"\n");
+	printarray(this->values,this->size);
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp	(revision 24343)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.cpp	(revision 24344)
@@ -246,4 +246,13 @@
 }
 /*}}}*/
+int Inputs2::GetInputObjectEnum(int enum_in){/*{{{*/
+
+	_assert_(this);
+
+	int index = EnumToIndex(enum_in);
+	if(!this->inputs[index]) _error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	return this->inputs[index]->ObjectEnum();
+}
+/*}}}*/
 void Inputs2::GetInputsInterpolations(int* pnuminputs,int** pinterpolations,int** pinputenums){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.h	(revision 24343)
+++ /issm/trunk-jpl/src/c/classes/Inputs2/Inputs2.h	(revision 24344)
@@ -60,4 +60,5 @@
 		ControlInput2*   GetControlInput2(int enum_type);
 		void  Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction);
+		int   GetInputObjectEnum(int enum_type);
 		void  GetInputValue(bool* pvalue,int enum_in,int index);
 		void  GetInputValue(int*  pvalue,int enum_in,int index);
