Index: /issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- /issm/trunk-jpl/src/c/Makefile.am	(revision 25378)
+++ /issm/trunk-jpl/src/c/Makefile.am	(revision 25379)
@@ -318,16 +318,16 @@
 	./modules/OutputDefinitionsResponsex/OutputDefinitionsResponsex.cpp \
 	./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp \
-	./classes/Inputs2/Inputs2.cpp \
-	./classes/Inputs2/BoolInput2.cpp \
-	./classes/Inputs2/DoubleInput2.cpp \
-	./classes/Inputs2/IntInput2.cpp \
-	./classes/Inputs2/ElementInput2.cpp \
-	./classes/Inputs2/SegInput2.cpp \
-	./classes/Inputs2/TriaInput2.cpp \
-	./classes/Inputs2/PentaInput2.cpp \
-	./classes/Inputs2/DatasetInput2.cpp \
-	./classes/Inputs2/ControlInput2.cpp \
-	./classes/Inputs2/TransientInput2.cpp \
-	./classes/Inputs2/ArrayInput2.cpp
+	./classes/Inputs/Inputs.cpp \
+	./classes/Inputs/BoolInput.cpp \
+	./classes/Inputs/DoubleInput.cpp \
+	./classes/Inputs/IntInput.cpp \
+	./classes/Inputs/ElementInput.cpp \
+	./classes/Inputs/SegInput.cpp \
+	./classes/Inputs/TriaInput.cpp \
+	./classes/Inputs/PentaInput.cpp \
+	./classes/Inputs/DatasetInput.cpp \
+	./classes/Inputs/ControlInput.cpp \
+	./classes/Inputs/TransientInput.cpp \
+	./classes/Inputs/ArrayInput.cpp
 #}}}
 #ADJOINTMPI/MeDiPack sources {{{
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp	(revision 25379)
@@ -4,5 +4,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
-#include "../classes/Inputs2/DatasetInput2.h"
+#include "../classes/Inputs/DatasetInput.h"
 
 /*Model processor*/
@@ -19,5 +19,5 @@
 	return 1;
 }/*}}}*/
-void AdjointBalancethickness2Analysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void AdjointBalancethickness2Analysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 	_error_("not implemented yet");
 }/*}}}*/
@@ -66,9 +66,9 @@
 	element->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	element->FindParam(&responses,NULL,InversionCostFunctionsEnum);
-	Input2* surface_input      = element->GetInput2(SurfaceEnum);                          _assert_(surface_input);
-	Input2* surfaceobs_input   = element->GetInput2(InversionSurfaceObsEnum);              _assert_(surfaceobs_input);
-	DatasetInput2* weights_input      = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input           = element->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vy_input           = element->GetInput2(VyEnum);                                 _assert_(vy_input);
+	Input* surface_input      = element->GetInput(SurfaceEnum);                          _assert_(surface_input);
+	Input* surfaceobs_input   = element->GetInput(InversionSurfaceObsEnum);              _assert_(surfaceobs_input);
+	DatasetInput* weights_input      = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input           = element->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vy_input           = element->GetInput(VyEnum);                                 _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -172,5 +172,5 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* adjoint_input = element->GetInput2(AdjointEnum);            _assert_(adjoint_input);
+	Input* adjoint_input = element->GetInput(AdjointEnum);            _assert_(adjoint_input);
 
 	Gauss* gauss=element->NewGauss(2);
@@ -216,10 +216,10 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* adjoint_input = element->GetInput2(AdjointEnum);            _assert_(adjoint_input);
-	Input2* omega_input   = element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input);
-	Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 
-	Input2* surfaceslopex_input = element->GetInput2(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
-	Input2* surfaceslopey_input = element->GetInput2(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
-	Input2* velobs_input        = element->GetInput2(InversionVelObsEnum); _assert_(velobs_input); 
+	Input* adjoint_input = element->GetInput(AdjointEnum);            _assert_(adjoint_input);
+	Input* omega_input   = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
+	Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 
+	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 
+	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 
+	Input* velobs_input        = element->GetInput(InversionVelObsEnum); _assert_(velobs_input); 
 
 	Gauss* gauss=element->NewGauss(2);
@@ -273,6 +273,6 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* omega_input = element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input);
-	DatasetInput2* weights_input         = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
+	DatasetInput* weights_input         = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -322,7 +322,7 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* omega_input = element->GetInput2(BalancethicknessOmegaEnum);   _assert_(omega_input);
-	Input2* omega0_input = element->GetInput2(BalancethicknessOmega0Enum); _assert_(omega0_input);
-	DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* omega_input = element->GetInput(BalancethicknessOmegaEnum);   _assert_(omega_input);
+	Input* omega0_input = element->GetInput(BalancethicknessOmega0Enum); _assert_(omega0_input);
+	DatasetInput* weights_input = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 25379)
@@ -4,5 +4,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
-#include "../classes/Inputs2/DatasetInput2.h"
+#include "../classes/Inputs/DatasetInput.h"
 
 /*Model processor*/
@@ -19,5 +19,5 @@
 	return 1;
 }/*}}}*/
-void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 	_error_("not implemented yet");
 }/*}}}*/
@@ -86,9 +86,9 @@
 	basalelement->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	basalelement->FindParam(&responses,NULL,InversionCostFunctionsEnum);
-	Input2* thickness_input    = basalelement->GetInput2(ThicknessEnum);                          _assert_(thickness_input);
-	Input2* thicknessobs_input = basalelement->GetInput2(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
-	DatasetInput2* weights_input      = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input           = basalelement->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vy_input           = basalelement->GetInput2(VyEnum);                                 _assert_(vy_input);
+	Input* thickness_input    = basalelement->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+	Input* thicknessobs_input = basalelement->GetInput(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
+	DatasetInput* weights_input      = basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input           = basalelement->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vy_input           = basalelement->GetInput(VyEnum);                                 _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -283,6 +283,6 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* adjoint_input   = element->GetInput2(AdjointEnum);   _assert_(adjoint_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* adjoint_input   = element->GetInput(AdjointEnum);   _assert_(adjoint_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -330,6 +330,6 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* adjoint_input   = element->GetInput2(AdjointEnum);   _assert_(adjoint_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* adjoint_input   = element->GetInput(AdjointEnum);   _assert_(adjoint_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 25379)
@@ -4,5 +4,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
-#include "../classes/Inputs2/DatasetInput2.h"
+#include "../classes/Inputs/DatasetInput.h"
 
 /*Model processing*/
@@ -19,5 +19,5 @@
 	_error_("not implemented");
 }/*}}}*/
-void AdjointHorizAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void AdjointHorizAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 	   _error_("not implemented yet");
 }/*}}}*/
@@ -87,9 +87,9 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = element->GetInput2(VxEnum);_assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum);_assert_(vy_input);
-	Input2* vz_input = NULL;
+	Input* vx_input = element->GetInput(VxEnum);_assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum);_assert_(vy_input);
+	Input* vz_input = NULL;
 	if(dim==3){
-		vz_input = element->GetInput2(VzEnum);
+		vz_input = element->GetInput(VzEnum);
 	}
 	else{
@@ -171,6 +171,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
+	Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
 
 	/*Allocate dbasis*/
@@ -276,7 +276,7 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);       _assert_(vy_input);
-	Input2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);       _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);       _assert_(vy_input);
+	Input* thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);
 
 	/*Allocate dbasis*/
@@ -375,12 +375,12 @@
 	element->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	element->FindParam(&responses,NULL,InversionCostFunctionsEnum);
-	DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input      = element->GetInput2(VxEnum);             _assert_(vx_input);
-	Input2* vxobs_input   = element->GetInput2(InversionVxObsEnum); _assert_(vxobs_input);
-	Input2* vy_input    = NULL;
-	Input2* vyobs_input = NULL;
+	DatasetInput* weights_input = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input      = element->GetInput(VxEnum);             _assert_(vx_input);
+	Input* vxobs_input   = element->GetInput(InversionVxObsEnum); _assert_(vxobs_input);
+	Input* vy_input    = NULL;
+	Input* vyobs_input = NULL;
 	if(domaintype!=Domain2DverticalEnum){
-		vy_input      = element->GetInput2(VyEnum);             _assert_(vy_input);
-		vyobs_input   = element->GetInput2(InversionVyObsEnum); _assert_(vyobs_input);
+		vy_input      = element->GetInput(VyEnum);             _assert_(vy_input);
+		vyobs_input   = element->GetInput(InversionVyObsEnum); _assert_(vyobs_input);
 	}
 	IssmDouble epsvel  = 2.220446049250313e-16;
@@ -388,8 +388,8 @@
 
 	/*Get Surface if required by one response*/
-	Input2* S_input = NULL;
+	Input* S_input = NULL;
 	for(int resp=0;resp<num_responses;resp++){
 		if(responses[resp]==SurfaceAverageVelMisfitEnum){
-			S_input = element->GetInput2(SurfaceAreaEnum);  _assert_(S_input); break;
+			S_input = element->GetInput(SurfaceAreaEnum);  _assert_(S_input); break;
 		}
 	}
@@ -614,12 +614,12 @@
 	element->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	element->FindParam(&responses,NULL,InversionCostFunctionsEnum);
-	DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input      = element->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vxobs_input   = element->GetInput2(InversionVxObsEnum);                     _assert_(vxobs_input);
-	Input2* vy_input=NULL;
-	Input2* vyobs_input=NULL;
+	DatasetInput* weights_input = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input      = element->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vxobs_input   = element->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+	Input* vy_input=NULL;
+	Input* vyobs_input=NULL;
 	if(domaintype!=Domain2DverticalEnum){
-		vy_input      = element->GetInput2(VyEnum);                                 _assert_(vy_input);
-		vyobs_input   = element->GetInput2(InversionVyObsEnum);                     _assert_(vyobs_input);
+		vy_input      = element->GetInput(VyEnum);                                 _assert_(vy_input);
+		vyobs_input   = element->GetInput(InversionVyObsEnum);                     _assert_(vyobs_input);
 	}
 	IssmDouble epsvel  = 2.220446049250313e-16;
@@ -627,8 +627,8 @@
 
 	/*Get Surface if required by one response*/
-	Input2* S_input = NULL;
+	Input* S_input = NULL;
 	for(int resp=0;resp<num_responses;resp++){
 		if(responses[resp]==SurfaceAverageVelMisfitEnum){
-			S_input = element->GetInput2(SurfaceAreaEnum);  _assert_(S_input); break;
+			S_input = element->GetInput(SurfaceAreaEnum);  _assert_(S_input); break;
 		}
 	}
@@ -867,12 +867,12 @@
 	basalelement->FindParam(&num_responses,InversionNumCostFunctionsEnum);
 	basalelement->FindParam(&responses,NULL,InversionCostFunctionsEnum);
-	DatasetInput2* weights_input = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input      = basalelement->GetInput2(VxEnum);                                               _assert_(vx_input);
-	Input2* vxobs_input   = basalelement->GetInput2(InversionVxObsEnum);                                   _assert_(vxobs_input);
-	Input2* vy_input=NULL;
-	Input2* vyobs_input=NULL;
+	DatasetInput* weights_input = basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input      = basalelement->GetInput(VxEnum);                                               _assert_(vx_input);
+	Input* vxobs_input   = basalelement->GetInput(InversionVxObsEnum);                                   _assert_(vxobs_input);
+	Input* vy_input=NULL;
+	Input* vyobs_input=NULL;
 	if(domaintype!=Domain2DverticalEnum){
-		vy_input      = basalelement->GetInput2(VyEnum);              _assert_(vy_input);
-		vyobs_input   = basalelement->GetInput2(InversionVyObsEnum);  _assert_(vyobs_input);
+		vy_input      = basalelement->GetInput(VyEnum);              _assert_(vy_input);
+		vyobs_input   = basalelement->GetInput(InversionVyObsEnum);  _assert_(vyobs_input);
 	}
 	IssmDouble epsvel  = 2.220446049250313e-16;
@@ -880,8 +880,8 @@
 
 	/*Get Surface if required by one response*/
-	Input2* S_input = NULL;
+	Input* S_input = NULL;
 	for(int resp=0;resp<num_responses;resp++){
 		if(responses[resp]==SurfaceAverageVelMisfitEnum){
-			S_input = element->GetInput2(SurfaceAreaEnum);  _assert_(S_input); break;
+			S_input = element->GetInput(SurfaceAreaEnum);  _assert_(S_input); break;
 		}
 	}
@@ -1223,6 +1223,6 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBbarEnum);              _assert_(rheologyb_input);
-	DatasetInput2* weights_input   = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* rheologyb_input = basalelement->GetInput(MaterialsRheologyBbarEnum);              _assert_(rheologyb_input);
+	DatasetInput* weights_input   = basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1312,10 +1312,10 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* thickness_input = basalelement->GetInput2(ThicknessEnum);             _assert_(thickness_input);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);                    _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);                    _assert_(vy_input);
-	Input2* adjointx_input  = basalelement->GetInput2(AdjointxEnum);              _assert_(adjointx_input);
-	Input2* adjointy_input  = basalelement->GetInput2(AdjointyEnum);              _assert_(adjointy_input);
-	Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
+	Input* thickness_input = basalelement->GetInput(ThicknessEnum);             _assert_(thickness_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);                    _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);                    _assert_(vy_input);
+	Input* adjointx_input  = basalelement->GetInput(AdjointxEnum);              _assert_(adjointx_input);
+	Input* adjointy_input  = basalelement->GetInput(AdjointyEnum);              _assert_(adjointy_input);
+	Input* rheologyb_input = basalelement->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1409,6 +1409,6 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* rheology_input = element->GetInput2(MaterialsRheologyBEnum);              _assert_(rheology_input);
-	DatasetInput2* weights_input   = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* rheology_input = element->GetInput(MaterialsRheologyBEnum);              _assert_(rheology_input);
+	DatasetInput* weights_input   = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
 	/* Start  looping on the number of gaussian points: */
 	Gauss* gauss=element->NewGauss(2);
@@ -1475,7 +1475,7 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* rheology_input  = element->GetInput2(MaterialsRheologyBbarEnum);              _assert_(rheology_input);
-	Input2* rheology0_input = element->GetInput2(RheologyBInitialguessEnum);              _assert_(rheology0_input);
-	DatasetInput2* weights_input   = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* rheology_input  = element->GetInput(MaterialsRheologyBbarEnum);              _assert_(rheology_input);
+	Input* rheology0_input = element->GetInput(RheologyBInitialguessEnum);              _assert_(rheology0_input);
+	DatasetInput* weights_input   = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1530,13 +1530,13 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* thickness_input = element->GetInput2(ThicknessEnum);             _assert_(thickness_input);
-	Input2* vx_input        = element->GetInput2(VxEnum);                    _assert_(vx_input);
-	Input2* vy_input        = NULL;
-	Input2* adjointx_input  = element->GetInput2(AdjointxEnum);              _assert_(adjointx_input);
-	Input2* adjointy_input  = NULL;
-	Input2* rheologyb_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(rheologyb_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum);             _assert_(thickness_input);
+	Input* vx_input        = element->GetInput(VxEnum);                    _assert_(vx_input);
+	Input* vy_input        = NULL;
+	Input* adjointx_input  = element->GetInput(AdjointxEnum);              _assert_(adjointx_input);
+	Input* adjointy_input  = NULL;
+	Input* rheologyb_input = element->GetInput(MaterialsRheologyBEnum); _assert_(rheologyb_input);
 	if(domaintype!=Domain2DverticalEnum){
-		vy_input        = element->GetInput2(VyEnum);                   _assert_(vy_input);
-		adjointy_input  = element->GetInput2(AdjointyEnum);             _assert_(adjointy_input);
+		vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
+		adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
 	}
 	/* Start  looping on the number of gaussian points: */
@@ -1625,10 +1625,10 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* thickness_input = basalelement->GetInput2(ThicknessEnum);             _assert_(thickness_input);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);                    _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);                    _assert_(vy_input);
-	Input2* adjointx_input  = basalelement->GetInput2(AdjointxEnum);              _assert_(adjointx_input);
-	Input2* adjointy_input  = basalelement->GetInput2(AdjointyEnum);              _assert_(adjointy_input);
-	Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBEnum); _assert_(rheologyb_input);
+	Input* thickness_input = basalelement->GetInput(ThicknessEnum);             _assert_(thickness_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);                    _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);                    _assert_(vy_input);
+	Input* adjointx_input  = basalelement->GetInput(AdjointxEnum);              _assert_(adjointx_input);
+	Input* adjointy_input  = basalelement->GetInput(AdjointyEnum);              _assert_(adjointy_input);
+	Input* rheologyb_input = basalelement->GetInput(MaterialsRheologyBEnum); _assert_(rheologyb_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1715,15 +1715,15 @@
 	/* get the friction law: if 2-Weertman, 11-Schoof, use a special name for the coefficient*/
 	element->FindParam(&frictionlaw, FrictionLawEnum);
-	Input2* dragcoefficient_input;
+	Input* dragcoefficient_input;
 	switch(frictionlaw) {
 		case 2:
 		case 11:
-			dragcoefficient_input = basalelement->GetInput2(FrictionCEnum); _assert_(dragcoefficient_input);
+			dragcoefficient_input = basalelement->GetInput(FrictionCEnum); _assert_(dragcoefficient_input);
 			break;
 		default:
-			dragcoefficient_input = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(dragcoefficient_input);
-	}
-
-	DatasetInput2* weights_input         = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+			dragcoefficient_input = basalelement->GetInput(FrictionCoefficientEnum); _assert_(dragcoefficient_input);
+	}
+
+	DatasetInput* weights_input         = basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1793,15 +1793,15 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* vx_input        = element->GetInput2(VxEnum);                   _assert_(vx_input);
-	Input2* vy_input        = element->GetInput2(VyEnum);                   _assert_(vy_input);
-	Input2* adjointx_input  = element->GetInput2(AdjointxEnum);             _assert_(adjointx_input);
-	Input2* adjointy_input  = element->GetInput2(AdjointyEnum);             _assert_(adjointy_input);
-	Input2* vz_input        = NULL;
-	Input2* adjointz_input  = NULL;
+	Input* vx_input        = element->GetInput(VxEnum);                   _assert_(vx_input);
+	Input* vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
+	Input* adjointx_input  = element->GetInput(AdjointxEnum);             _assert_(adjointx_input);
+	Input* adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
+	Input* vz_input        = NULL;
+	Input* adjointz_input  = NULL;
 	if(domaintype!=Domain2DverticalEnum){
-		vz_input        = element->GetInput2(VzEnum);                   _assert_(vy_input);
-		adjointz_input  = element->GetInput2(AdjointzEnum);             _assert_(adjointz_input);
-	}
-	Input2* dragcoeff_input = element->GetInput2(FrictionCoefficientEnum);  _assert_(dragcoeff_input);
+		vz_input        = element->GetInput(VzEnum);                   _assert_(vy_input);
+		adjointz_input  = element->GetInput(AdjointzEnum);             _assert_(adjointz_input);
+	}
+	Input* dragcoeff_input = element->GetInput(FrictionCoefficientEnum);  _assert_(dragcoeff_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1892,12 +1892,12 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* vx_input        = element->GetInput2(VxEnum);                   _assert_(vx_input);
-	Input2* vy_input        = NULL;
-	Input2* adjointx_input  = element->GetInput2(AdjointxEnum);             _assert_(adjointx_input);
-	Input2* adjointy_input  = NULL;
-	Input2* dragcoeff_input = element->GetInput2(FrictionCoefficientEnum);  _assert_(dragcoeff_input);
+	Input* vx_input        = element->GetInput(VxEnum);                   _assert_(vx_input);
+	Input* vy_input        = NULL;
+	Input* adjointx_input  = element->GetInput(AdjointxEnum);             _assert_(adjointx_input);
+	Input* adjointy_input  = NULL;
+	Input* dragcoeff_input = element->GetInput(FrictionCoefficientEnum);  _assert_(dragcoeff_input);
 	if(domaintype!=Domain2DverticalEnum){
-		vy_input        = element->GetInput2(VyEnum);                   _assert_(vy_input);
-		adjointy_input  = element->GetInput2(AdjointyEnum);             _assert_(adjointy_input);
+		vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
+		adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
 	}
 	/* Start  looping on the number of gaussian points: */
@@ -1986,19 +1986,19 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);                   _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);                   _assert_(vy_input);
-	Input2* adjointx_input  = basalelement->GetInput2(AdjointxEnum);             _assert_(adjointx_input);
-	Input2* adjointy_input  = basalelement->GetInput2(AdjointyEnum);             _assert_(adjointy_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);                   _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);                   _assert_(vy_input);
+	Input* adjointx_input  = basalelement->GetInput(AdjointxEnum);             _assert_(adjointx_input);
+	Input* adjointy_input  = basalelement->GetInput(AdjointyEnum);             _assert_(adjointy_input);
 
 	/* get the friction law: 1- Budd, 11-Schoof*/
 	element->FindParam(&frictionlaw, FrictionLawEnum);
-	Input2* dragcoeff_input;
+	Input* dragcoeff_input;
 	switch(frictionlaw) {
 		case 1:
-			dragcoeff_input = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(dragcoeff_input);
+			dragcoeff_input = basalelement->GetInput(FrictionCoefficientEnum); _assert_(dragcoeff_input);
 			break;
 		case 2:
 		case 11:
-			dragcoeff_input = basalelement->GetInput2(FrictionCEnum); _assert_(dragcoeff_input);
+			dragcoeff_input = basalelement->GetInput(FrictionCEnum); _assert_(dragcoeff_input);
 			break;
 		default:
@@ -2071,13 +2071,13 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* vx_input        = element->GetInput2(VxEnum);                   _assert_(vx_input);
-	Input2* vy_input        = element->GetInput2(VyEnum);                   _assert_(vy_input);
-	Input2* adjointx_input  = element->GetInput2(AdjointxEnum);             _assert_(adjointx_input);
-	Input2* adjointy_input  = element->GetInput2(AdjointyEnum);             _assert_(adjointy_input);
-	Input2* vz_input        = NULL;
-	Input2* adjointz_input  = NULL;
+	Input* vx_input        = element->GetInput(VxEnum);                   _assert_(vx_input);
+	Input* vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
+	Input* adjointx_input  = element->GetInput(AdjointxEnum);             _assert_(adjointx_input);
+	Input* adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
+	Input* vz_input        = NULL;
+	Input* adjointz_input  = NULL;
 	if(domaintype!=Domain2DverticalEnum){
-		vz_input        = element->GetInput2(VzEnum);                   _assert_(vy_input);
-		adjointz_input  = element->GetInput2(AdjointzEnum);             _assert_(adjointz_input);
+		vz_input        = element->GetInput(VzEnum);                   _assert_(vy_input);
+		adjointz_input  = element->GetInput(AdjointzEnum);             _assert_(adjointz_input);
 	}
 
@@ -2168,11 +2168,11 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* vx_input        = element->GetInput2(VxEnum);                   _assert_(vx_input);
-	Input2* vy_input        = NULL;
-	Input2* adjointx_input  = element->GetInput2(AdjointxEnum);             _assert_(adjointx_input);
-	Input2* adjointy_input  = NULL;
+	Input* vx_input        = element->GetInput(VxEnum);                   _assert_(vx_input);
+	Input* vy_input        = NULL;
+	Input* adjointx_input  = element->GetInput(AdjointxEnum);             _assert_(adjointx_input);
+	Input* adjointy_input  = NULL;
 	if(domaintype!=Domain2DverticalEnum){
-		vy_input        = element->GetInput2(VyEnum);                   _assert_(vy_input);
-		adjointy_input  = element->GetInput2(AdjointyEnum);             _assert_(adjointy_input);
+		vy_input        = element->GetInput(VyEnum);                   _assert_(vy_input);
+		adjointy_input  = element->GetInput(AdjointyEnum);             _assert_(adjointy_input);
 	}
 	/* Start  looping on the number of gaussian points: */
@@ -2260,8 +2260,8 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);          _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);          _assert_(vy_input);
-	Input2* adjointx_input  = basalelement->GetInput2(AdjointxEnum);    _assert_(adjointx_input);
-	Input2* adjointy_input  = basalelement->GetInput2(AdjointyEnum);    _assert_(adjointy_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);          _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);          _assert_(vy_input);
+	Input* adjointx_input  = basalelement->GetInput(AdjointxEnum);    _assert_(adjointx_input);
+	Input* adjointy_input  = basalelement->GetInput(AdjointyEnum);    _assert_(adjointy_input);
 
 	IssmDouble  q_exp;
@@ -2276,9 +2276,9 @@
 
 	/*Recover parameters: */
-	Input2* qinput = basalelement->GetInput2(FrictionQEnum);
-	Input2* cinput = basalelement->GetInput2(FrictionCEnum);
-	Input2* Asinput = basalelement->GetInput2(FrictionAsEnum);
-	Input2* nInput =basalelement->GetInput2(MaterialsRheologyNEnum);
-	Input2* Ninput = basalelement->GetInput2(FrictionEffectivePressureEnum);	
+	Input* qinput = basalelement->GetInput(FrictionQEnum);
+	Input* cinput = basalelement->GetInput(FrictionCEnum);
+	Input* Asinput = basalelement->GetInput(FrictionAsEnum);
+	Input* nInput =basalelement->GetInput(MaterialsRheologyNEnum);
+	Input* Ninput = basalelement->GetInput(FrictionEffectivePressureEnum);	
 	/* Start  looping on the number of gaussian points: */
 	Gauss* gauss=basalelement->NewGauss(4);
@@ -2378,10 +2378,10 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->GradientIndexing(&vertexpidlist[0],control_index);
-	Input2* thickness_input = basalelement->GetInput2(ThicknessEnum);             _assert_(thickness_input);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);                    _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);                    _assert_(vy_input);
-	Input2* adjointx_input  = basalelement->GetInput2(AdjointxEnum);              _assert_(adjointx_input);
-	Input2* adjointy_input  = basalelement->GetInput2(AdjointyEnum);              _assert_(adjointy_input);
-	Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
+	Input* thickness_input = basalelement->GetInput(ThicknessEnum);             _assert_(thickness_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);                    _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);                    _assert_(vy_input);
+	Input* adjointx_input  = basalelement->GetInput(AdjointxEnum);              _assert_(adjointx_input);
+	Input* adjointy_input  = basalelement->GetInput(AdjointyEnum);              _assert_(adjointy_input);
+	Input* rheologyb_input = basalelement->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -2503,11 +2503,11 @@
 
 	/*Add vx and vy as inputs to the tria element: */
-	element->AddInput2(AdjointxEnum,lambdax,element->VelocityInterpolation());
-	element->AddInput2(AdjointyEnum,lambday,element->VelocityInterpolation());
-	if(domaintype!=Domain2DverticalEnum) element->AddInput2(AdjointzEnum,lambdaz,element->VelocityInterpolation());
+	element->AddInput(AdjointxEnum,lambdax,element->VelocityInterpolation());
+	element->AddInput(AdjointyEnum,lambday,element->VelocityInterpolation());
+	if(domaintype!=Domain2DverticalEnum) element->AddInput(AdjointzEnum,lambdaz,element->VelocityInterpolation());
 
 	element->FindParam(&fe_FS,FlowequationFeFSEnum);
 	if(fe_FS!=LATaylorHoodEnum && fe_FS!=LACrouzeixRaviartEnum)	
-	 element->AddInput2(AdjointpEnum,lambdap,element->PressureInterpolation());	
+	 element->AddInput(AdjointpEnum,lambdap,element->PressureInterpolation());	
 
 	/*Free ressources:*/
@@ -2560,6 +2560,6 @@
 
 	/*Add vx and vy as inputs to the tria element: */
-	element->AddInput2(AdjointxEnum,lambdax,element->GetElementType());
-	element->AddInput2(AdjointyEnum,lambday,element->GetElementType());
+	element->AddInput(AdjointxEnum,lambdax,element->GetElementType());
+	element->AddInput(AdjointyEnum,lambday,element->GetElementType());
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/Analysis.h	(revision 25379)
@@ -16,5 +16,5 @@
 
 class Parameters;
-class Inputs2;
+class Inputs;
 class IoModel;
 class Elements;
@@ -39,5 +39,5 @@
 		virtual void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false)=0;
 		virtual int  DofsPerNode(int** doflist,int domaintype,int approximation)=0;
-		virtual void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type)=0;
+		virtual void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type)=0;
 		virtual void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum)=0;
 
Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 25379)
@@ -23,5 +23,5 @@
 	return 1;
 }/*}}}*/
-void Balancethickness2Analysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void Balancethickness2Analysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Finite element type*/
@@ -29,14 +29,14 @@
 
 	/*Load variables in element*/
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
 
 	/*Update elements: */
@@ -45,5 +45,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 
 			counter++;
@@ -82,6 +82,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 
-	Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
+	Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 
+	Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
 
 	/*Get element characteristic length*/
@@ -142,7 +142,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* ms_input   = element->GetInput2(SmbMassBalanceEnum);                _assert_(ms_input);
-	Input2* mb_input   = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);       _assert_(mb_input);
-	Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum);            _assert_(dhdt_input);
+	Input* ms_input   = element->GetInput(SmbMassBalanceEnum);                _assert_(ms_input);
+	Input* mb_input   = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);       _assert_(mb_input);
+	Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum);            _assert_(dhdt_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 25379)
@@ -4,5 +4,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
-#include "../classes/Inputs2/DatasetInput2.h"
+#include "../classes/Inputs/DatasetInput.h"
 
 /*Model processing*/
@@ -73,5 +73,5 @@
 	return 1;
 }/*}}}*/
-void BalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void BalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int    stabilization,finiteelement;
@@ -91,23 +91,23 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -172,13 +172,13 @@
 	element->FindParam(&domaintype,DomainTypeEnum);
 	element->FindParam(&stabilization,BalancethicknessStabilizationEnum);
-	Input2* vxaverage_input=NULL;
-	Input2* vyaverage_input=NULL;
+	Input* vxaverage_input=NULL;
+	Input* vyaverage_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input);
-		vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input);
+		vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input);
+		vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input);
 	}
 	else{
-		vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);
-		vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);
+		vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
+		vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
 	}
 	h = element->CharacteristicLength();
@@ -271,13 +271,13 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&domaintype,DomainTypeEnum);
-	Input2* vxaverage_input=NULL;
-	Input2* vyaverage_input=NULL;
+	Input* vxaverage_input=NULL;
+	Input* vyaverage_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input);
-		vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input);
+		vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input);
+		vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input);
 	}
 	else{
-		vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);
-		vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);
+		vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
+		vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
 	}
 
@@ -354,7 +354,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* mb_input   = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);       _assert_(mb_input);
-	Input2* ms_input   = element->GetInput2(SmbMassBalanceEnum);     _assert_(ms_input);
-	Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
+	Input* mb_input   = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);       _assert_(mb_input);
+	Input* ms_input   = element->GetInput(SmbMassBalanceEnum);     _assert_(ms_input);
+	Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
 
 	/*Initialize mb_correction to 0, do not forget!:*/
@@ -395,7 +395,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* mb_input   = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);       _assert_(mb_input);
-	Input2* ms_input   = element->GetInput2(SmbMassBalanceEnum);     _assert_(ms_input);
-	Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
+	Input* mb_input   = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);       _assert_(mb_input);
+	Input* ms_input   = element->GetInput(SmbMassBalanceEnum);     _assert_(ms_input);
+	Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);
 
 	/*Initialize mb_correction to 0, do not forget!:*/
@@ -457,12 +457,12 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GradientIndexing(&vertexpidlist[0],control_index);
-	DatasetInput2* weights_input       = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum);  _assert_(weights_input);
-	Input2* thickness_input            = element->GetInput2(ThicknessEnum);                           _assert_(thickness_input);
-	Input2* thicknessobs_input         = element->GetInput2(InversionThicknessObsEnum);               _assert_(thicknessobs_input);
-	Input2* vx_input                   = element->GetInput2(VxEnum);                                  _assert_(vx_input);
-	Input2* vy_input                   = element->GetInput2(VyEnum);                                  _assert_(vy_input);
-	Input2* surface_mass_balance_input = element->GetInput2(SmbMassBalanceEnum);          _assert_(surface_mass_balance_input);
-	Input2* basal_melting_input        = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melting_input);
-	Input2* dhdt_input                 = element->GetInput2(BalancethicknessThickeningRateEnum);      _assert_(dhdt_input);
+	DatasetInput* weights_input       = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum);  _assert_(weights_input);
+	Input* thickness_input            = element->GetInput(ThicknessEnum);                           _assert_(thickness_input);
+	Input* thicknessobs_input         = element->GetInput(InversionThicknessObsEnum);               _assert_(thicknessobs_input);
+	Input* vx_input                   = element->GetInput(VxEnum);                                  _assert_(vx_input);
+	Input* vy_input                   = element->GetInput(VyEnum);                                  _assert_(vy_input);
+	Input* surface_mass_balance_input = element->GetInput(SmbMassBalanceEnum);          _assert_(surface_mass_balance_input);
+	Input* basal_melting_input        = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melting_input);
+	Input* dhdt_input                 = element->GetInput(BalancethicknessThickeningRateEnum);      _assert_(dhdt_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp	(revision 25379)
@@ -12,5 +12,5 @@
 	   _error_("not implemented yet");
 }/*}}}*/
-void BalancethicknessSoftAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void BalancethicknessSoftAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 	   _error_("not implemented yet");
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h	(revision 25379)
@@ -15,5 +15,5 @@
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 25379)
@@ -26,5 +26,5 @@
 	return 1;
 }/*}}}*/
-void BalancevelocityAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void BalancevelocityAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Update elements: */
@@ -33,23 +33,23 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -91,5 +91,5 @@
 	/*Retrieve all Inputs and parameters: */
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input);
+	Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input);
 	h = element->CharacteristicLength();
 
@@ -182,8 +182,8 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement->GetVerticesCoordinates(&xyz_list);
-	Input2* ms_input   = basalelement->GetInput2(SmbMassBalanceEnum);          _assert_(ms_input);
-	Input2* mb_input   = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);
-	Input2* dhdt_input = basalelement->GetInput2(BalancethicknessThickeningRateEnum);      _assert_(dhdt_input);
-	Input2* H_input    = basalelement->GetInput2(ThicknessEnum);                           _assert_(H_input);
+	Input* ms_input   = basalelement->GetInput(SmbMassBalanceEnum);          _assert_(ms_input);
+	Input* mb_input   = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);
+	Input* dhdt_input = basalelement->GetInput(BalancethicknessThickeningRateEnum);      _assert_(dhdt_input);
+	Input* H_input    = basalelement->GetInput(ThicknessEnum);                           _assert_(H_input);
 	IssmDouble h = basalelement->CharacteristicLength();
 
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp	(revision 25379)
@@ -40,5 +40,5 @@
 	return 1;
 }/*}}}*/
-void DamageEvolutionAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void DamageEvolutionAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int finiteelement;
@@ -54,9 +54,9 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 
 			/*Need to know the type of approximation for this element*/
 			if(iomodel->Data("md.flowequation.element_equation")){
-				inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
+				inputs->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
 			}
 			counter++;
@@ -68,15 +68,15 @@
 	for(int i=0;i<elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		element->SetElementInput(inputs2,DamageFEnum,0.);
+		element->SetElementInput(inputs,DamageFEnum,0.);
 	}
 
 
 	/*What input do I need to run my damage evolution model?*/
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.damage.D",DamageDEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.damage.D",DamageDEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
 
 }/*}}}*/
@@ -139,5 +139,5 @@
 
 	/*Add input*/
-	element->AddInput2(DamageFEnum,f,element->GetElementType());
+	element->AddInput(DamageFEnum,f,element->GetElementType());
 
 	/*Clean up and return*/
@@ -174,13 +174,13 @@
 	element->ComputeDeviatoricStressTensor();
 
-	Input2* principalDevStress1_input = element->GetInput2(DeviatoricStress1Enum);     _assert_(principalDevStress1_input);
-	Input2* principalDevStress2_input = element->GetInput2(DeviatoricStress2Enum);     _assert_(principalDevStress2_input);
-
-	Input2* damage_input = NULL;
+	Input* principalDevStress1_input = element->GetInput(DeviatoricStress1Enum);     _assert_(principalDevStress1_input);
+	Input* principalDevStress2_input = element->GetInput(DeviatoricStress2Enum);     _assert_(principalDevStress2_input);
+
+	Input* damage_input = NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		damage_input = element->GetInput2(DamageDbarEnum); 	_assert_(damage_input);
+		damage_input = element->GetInput(DamageDbarEnum); 	_assert_(damage_input);
 	}
 	else{
-		damage_input = element->GetInput2(DamageDEnum);   _assert_(damage_input);
+		damage_input = element->GetInput(DamageDEnum);   _assert_(damage_input);
 	}
 
@@ -222,5 +222,5 @@
 
 	/*Add input*/
-	element->AddInput2(DamageFEnum,f,element->GetElementType());
+	element->AddInput(DamageFEnum,f,element->GetElementType());
 
 	/*Clean up and return*/
@@ -250,17 +250,17 @@
 
 	/*retrieve what we need: */
-	Input2* eps_xx_input  = element->GetInput2(StrainRatexxEnum);     _assert_(eps_xx_input);
-	Input2* eps_xy_input  = element->GetInput2(StrainRatexyEnum);     _assert_(eps_xy_input);
-	Input2* eps_yy_input  = element->GetInput2(StrainRateyyEnum);     _assert_(eps_yy_input);
-	Input2*  n_input=element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input);
-	Input2* damage_input = NULL;
-	Input2* B_input = NULL;
+	Input* eps_xx_input  = element->GetInput(StrainRatexxEnum);     _assert_(eps_xx_input);
+	Input* eps_xy_input  = element->GetInput(StrainRatexyEnum);     _assert_(eps_xy_input);
+	Input* eps_yy_input  = element->GetInput(StrainRateyyEnum);     _assert_(eps_yy_input);
+	Input*  n_input=element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
+	Input* damage_input = NULL;
+	Input* B_input = NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		damage_input = element->GetInput2(DamageDbarEnum); 	_assert_(damage_input);
-		B_input=element->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input);
+		damage_input = element->GetInput(DamageDbarEnum); 	_assert_(damage_input);
+		B_input=element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);
 	}
 	else{
-		damage_input = element->GetInput2(DamageDEnum);   _assert_(damage_input);
-		B_input=element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
+		damage_input = element->GetInput(DamageDEnum);   _assert_(damage_input);
+		B_input=element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
 	}
 
@@ -297,5 +297,5 @@
 
 	/*Add input*/
-	element->AddInput2(DamageFEnum,f,P1DGEnum);
+	element->AddInput(DamageFEnum,f,P1DGEnum);
 
 	/*Clean up and return*/
@@ -337,23 +337,23 @@
 	}
 	/*retrieve what we need: */
-	Input2* tau_xx_input  = element->GetInput2(DeviatoricStressxxEnum);     _assert_(tau_xx_input);
-	Input2* tau_xy_input  = element->GetInput2(DeviatoricStressxyEnum);     _assert_(tau_xy_input);
-	Input2* tau_yy_input  = element->GetInput2(DeviatoricStressyyEnum);     _assert_(tau_yy_input);
-	Input2* tau_xz_input  = NULL;
-	Input2* tau_yz_input  = NULL;
-	Input2* tau_zz_input  = NULL;
-	Input2* stressMaxPrincipal_input = NULL;
+	Input* tau_xx_input  = element->GetInput(DeviatoricStressxxEnum);     _assert_(tau_xx_input);
+	Input* tau_xy_input  = element->GetInput(DeviatoricStressxyEnum);     _assert_(tau_xy_input);
+	Input* tau_yy_input  = element->GetInput(DeviatoricStressyyEnum);     _assert_(tau_yy_input);
+	Input* tau_xz_input  = NULL;
+	Input* tau_yz_input  = NULL;
+	Input* tau_zz_input  = NULL;
+	Input* stressMaxPrincipal_input = NULL;
 	if(dim==3){
-		tau_xz_input  = element->GetInput2(DeviatoricStressxzEnum);     _assert_(tau_xz_input);
-		tau_yz_input  = element->GetInput2(DeviatoricStressyzEnum);     _assert_(tau_yz_input);
-		tau_zz_input  = element->GetInput2(DeviatoricStresszzEnum);     _assert_(tau_zz_input);
-		stressMaxPrincipal_input = element->GetInput2(StressMaxPrincipalEnum); _assert_(stressMaxPrincipal_input);
-	}
-	Input2* damage_input = NULL;
+		tau_xz_input  = element->GetInput(DeviatoricStressxzEnum);     _assert_(tau_xz_input);
+		tau_yz_input  = element->GetInput(DeviatoricStressyzEnum);     _assert_(tau_yz_input);
+		tau_zz_input  = element->GetInput(DeviatoricStresszzEnum);     _assert_(tau_zz_input);
+		stressMaxPrincipal_input = element->GetInput(StressMaxPrincipalEnum); _assert_(stressMaxPrincipal_input);
+	}
+	Input* damage_input = NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		damage_input = element->GetInput2(DamageDbarEnum); 	_assert_(damage_input);
+		damage_input = element->GetInput(DamageDbarEnum); 	_assert_(damage_input);
 	}
 	else{
-		damage_input = element->GetInput2(DamageDEnum);   _assert_(damage_input);
+		damage_input = element->GetInput(DamageDEnum);   _assert_(damage_input);
 	}
 
@@ -416,5 +416,5 @@
 	}
 	/*Add input*/
-	element->AddInput2(DamageFEnum,f,P1DGEnum);
+	element->AddInput(DamageFEnum,f,P1DGEnum);
 
 	/*Clean up and return*/
@@ -461,9 +461,9 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&stabilization,DamageStabilizationEnum);
-	Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input = NULL;
+	Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input = NULL;
 	if(dim==3){
-		vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
+		vz_input=element->GetInput(VzEnum); _assert_(vz_input);
 	}
 
@@ -644,11 +644,11 @@
 	}
 
-	Input2* damaged_input = NULL;
-	Input2* damagef_input = element->GetInput2(DamageFEnum); _assert_(damagef_input);
+	Input* damaged_input = NULL;
+	Input* damagef_input = element->GetInput(DamageFEnum); _assert_(damagef_input);
 	if(domaintype==Domain2DhorizontalEnum){
-		damaged_input = element->GetInput2(DamageDbarEnum); _assert_(damaged_input);
+		damaged_input = element->GetInput(DamageDbarEnum); _assert_(damaged_input);
 	}
 	else{
-		damaged_input = element->GetInput2(DamageDEnum); _assert_(damaged_input);
+		damaged_input = element->GetInput(DamageDEnum); _assert_(damaged_input);
 	}
 
@@ -708,8 +708,8 @@
 	element->FindParam(&domaintype,DomainTypeEnum);
 	if(domaintype==Domain2DhorizontalEnum){
-		element->AddInput2(DamageDbarEnum,newdamage,element->GetElementType());
+		element->AddInput(DamageDbarEnum,newdamage,element->GetElementType());
 	}
 	else{
-		element->AddInput2(DamageDEnum,newdamage,element->GetElementType());
+		element->AddInput(DamageDEnum,newdamage,element->GetElementType());
 	}
 
@@ -744,6 +744,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input);
-	Input2* vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input);
+	Input* vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input);
+	Input* vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 	return 1;
 }/*}}}*/
-void DepthAverageAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void DepthAverageAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int counter=0;
@@ -24,5 +24,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -30,5 +30,5 @@
 
 	if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 }/*}}}*/
@@ -114,5 +114,5 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&input_enum,InputToDepthaverageInEnum);
-	Input2* input = element->GetInput2(input_enum); _assert_(input);
+	Input* input = element->GetInput(input_enum); _assert_(input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp	(revision 25379)
@@ -99,5 +99,5 @@
 	return 1;
 }/*}}}*/
-void EnthalpyAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void EnthalpyAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	bool dakota_analysis,ismovingfront,isenthalpy;
@@ -124,5 +124,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
@@ -134,28 +134,28 @@
 	iomodel->FindConstant(&materialstype,"md.materials.type");
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.waterfraction",WaterfractionEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.enthalpy",EnthalpyEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,VxMeshEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,VyMeshEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,VzMeshEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.waterfraction",WaterfractionEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.enthalpy",EnthalpyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",WatercolumnEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,VxMeshEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,VyMeshEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,VzMeshEnum);
 	if(ismovingfront){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
 	}
 
@@ -166,24 +166,24 @@
 			break;
 		default:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
 			break;
 	}
 
 	/*Rheology type*/
-	iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
 	switch(materialstype){
 		case MatenhancediceEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
 			break;
 		case MatdamageiceEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 			break;
 		case MatestarEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
 			break;
 		case MaticeEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 			break;
 		default:
@@ -195,65 +195,65 @@
 		case 1:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 2:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 3:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.As",FrictionAsEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 4:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
 			break;
 		case 5:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 7:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 9:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
-			InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum);
-			InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
+			InputUpdateFromConstantx(inputs,elements,1.,FrictionPEnum);
+			InputUpdateFromConstantx(inputs,elements,1.,FrictionQEnum);
 			break;
 		default:
@@ -325,5 +325,5 @@
 
 	/*Get parameters and inputs: */
-	Input2* pressure_input		 = element->GetInput2(PressureEnum);							 _assert_(pressure_input);
+	Input* pressure_input		 = element->GetInput(PressureEnum);							 _assert_(pressure_input);
 
 	/*Fetch indices of basal & surface nodes for this finite element*/
@@ -407,10 +407,10 @@
 
 	/*retrieve inputs*/
-	Input2* enthalpy_input       = element->GetInput2(enthalpy_enum);                   _assert_(enthalpy_input);
-	Input2* pressure_input       = element->GetInput2(PressureEnum);                    _assert_(pressure_input);
-	Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
-	Input2* vx_input             = element->GetInput2(VxEnum);                          _assert_(vx_input);
-	Input2* vy_input             = element->GetInput2(VyEnum);                          _assert_(vy_input);
-	Input2* vz_input             = element->GetInput2(VzEnum);                          _assert_(vz_input);
+	Input* enthalpy_input       = element->GetInput(enthalpy_enum);                   _assert_(enthalpy_input);
+	Input* pressure_input       = element->GetInput(PressureEnum);                    _assert_(pressure_input);
+	Input* geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
+	Input* vx_input             = element->GetInput(VxEnum);                          _assert_(vx_input);
+	Input* vy_input             = element->GetInput(VyEnum);                          _assert_(vy_input);
+	Input* vz_input             = element->GetInput(VzEnum);                          _assert_(vz_input);
 
 	/*Build friction element, needed later: */
@@ -511,8 +511,8 @@
 	int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
 	if(dt!=0.){
-		element->AddInput2(enthalpy_enum,enthalpies,finite_element);
-		element->AddInput2(WatercolumnEnum,watercolumns,finite_element);
-	}
-	element->AddInput2(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,P1DGEnum);
+		element->AddInput(enthalpy_enum,enthalpies,finite_element);
+		element->AddInput(WatercolumnEnum,watercolumns,finite_element);
+	}
+	element->AddInput(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,P1DGEnum);
 
 	/*Clean up and return*/
@@ -602,10 +602,10 @@
 	IssmDouble  heatcapacity        = element->FindParam(MaterialsHeatcapacityEnum);
 	IssmDouble  thermalconductivity = element->FindParam(MaterialsThermalconductivityEnum);
-	Input2* vx_input  = element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input  = element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input  = element->GetInput2(VzEnum);     _assert_(vz_input);
-	Input2* vxm_input = element->GetInput2(VxMeshEnum); _assert_(vxm_input);
-	Input2* vym_input = element->GetInput2(VyMeshEnum); _assert_(vym_input);
-	Input2* vzm_input = element->GetInput2(VzMeshEnum); _assert_(vzm_input);
+	Input* vx_input  = element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input  = element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input  = element->GetInput(VzEnum);     _assert_(vz_input);
+	Input* vxm_input = element->GetInput(VxMeshEnum); _assert_(vxm_input);
+	Input* vym_input = element->GetInput(VyMeshEnum); _assert_(vym_input);
+	Input* vzm_input = element->GetInput(VzMeshEnum); _assert_(vzm_input);
 
 	/*Enthalpy diffusion parameter*/
@@ -824,12 +824,12 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&stabilization,ThermalStabilizationEnum);
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
-	Input2* enthalpypicard_input=element->GetInput2(EnthalpyPicardEnum); _assert_(enthalpypicard_input);
-	Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input);
-	Input2* enthalpy_input=NULL;
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input);
+	Input* enthalpypicard_input=element->GetInput(EnthalpyPicardEnum); _assert_(enthalpypicard_input);
+	Input* pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);
+	Input* enthalpy_input=NULL;
 	if(dt>0.){
-		enthalpy_input = element->GetInput2(EnthalpyEnum); _assert_(enthalpy_input);
+		enthalpy_input = element->GetInput(EnthalpyEnum); _assert_(enthalpy_input);
 	}
 
@@ -948,12 +948,12 @@
 	if(dt==0. && !converged) enthalpy_enum=EnthalpyPicardEnum; // use enthalpy from last iteration
 	else enthalpy_enum=EnthalpyEnum; // use enthalpy from last time step
-	Input2* vx_input             = element->GetInput2(VxEnum);                          _assert_(vx_input);
-	Input2* vy_input             = element->GetInput2(VyEnum);                          _assert_(vy_input);
-	Input2* vz_input             = element->GetInput2(VzEnum);                          _assert_(vz_input);
-	Input2* enthalpy_input		 = element->GetInput2(enthalpy_enum);					 _assert_(enthalpy_input);
-	Input2* pressure_input		 = element->GetInput2(PressureEnum);							 _assert_(pressure_input);
-	Input2* watercolumn_input	 = element->GetInput2(WatercolumnEnum);							 _assert_(watercolumn_input);
-	Input2* meltingrate_input	 = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);							 _assert_(meltingrate_input);
-	Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
+	Input* vx_input             = element->GetInput(VxEnum);                          _assert_(vx_input);
+	Input* vy_input             = element->GetInput(VyEnum);                          _assert_(vy_input);
+	Input* vz_input             = element->GetInput(VzEnum);                          _assert_(vz_input);
+	Input* enthalpy_input		 = element->GetInput(enthalpy_enum);					 _assert_(enthalpy_input);
+	Input* pressure_input		 = element->GetInput(PressureEnum);							 _assert_(pressure_input);
+	Input* watercolumn_input	 = element->GetInput(WatercolumnEnum);							 _assert_(watercolumn_input);
+	Input* meltingrate_input	 = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);							 _assert_(meltingrate_input);
+	Input* geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
 	IssmDouble  rho_ice			 = element->FindParam(MaterialsRhoIceEnum);
 
@@ -1041,5 +1041,5 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2*      pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input);
+	Input*      pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);
 	IssmDouble  gravity             = element->FindParam(ConstantsGEnum);
 	IssmDouble  rho_water           = element->FindParam(MaterialsRhoSeawaterEnum);
@@ -1097,5 +1097,5 @@
 		}
 		int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
-		element->AddInput2(WaterfractionDrainageEnum,drainage,finite_element);
+		element->AddInput(WaterfractionDrainageEnum,drainage,finite_element);
 
 		xDelete<IssmDouble>(waterfractions);
@@ -1131,5 +1131,5 @@
 		}
 		int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
-		element->AddInput2(WaterfractionDrainageIntegratedEnum, drainage_int,finite_element);
+		element->AddInput(WaterfractionDrainageIntegratedEnum, drainage_int,finite_element);
 
 		xDelete<IssmDouble>(drainage_int);
@@ -1155,5 +1155,5 @@
 		}
 		int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
-		element->AddInput2(WatercolumnEnum, watercolumn,finite_element);
+		element->AddInput(WatercolumnEnum, watercolumn,finite_element);
 
 		xDelete<IssmDouble>(watercolumn);
@@ -1192,6 +1192,6 @@
 		}
 		int finite_element = element->GetElementType(); if(finite_element==P1Enum) finite_element = P1DGEnum;
-		element->AddInput2(WaterfractionEnum,waterfractions,finite_element);
-		element->AddInput2(EnthalpyEnum,enthalpies,finite_element);
+		element->AddInput(WaterfractionEnum,waterfractions,finite_element);
+		element->AddInput(EnthalpyEnum,enthalpies,finite_element);
 
 		xDelete<IssmDouble>(enthalpies);
@@ -1320,8 +1320,8 @@
 
 	/*Get parameters and inputs: */
-	Input2* enthalpy_input		 = element->GetInput2(EnthalpyPicardEnum);					 _assert_(enthalpy_input);
-	Input2* pressure_input		 = element->GetInput2(PressureEnum);							 _assert_(pressure_input);
-	Input2* watercolumn_input	 = element->GetInput2(WatercolumnEnum);							 _assert_(watercolumn_input);
-	Input2* meltingrate_input	 = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);							 _assert_(meltingrate_input);
+	Input* enthalpy_input		 = element->GetInput(EnthalpyPicardEnum);					 _assert_(enthalpy_input);
+	Input* pressure_input		 = element->GetInput(PressureEnum);							 _assert_(pressure_input);
+	Input* watercolumn_input	 = element->GetInput(WatercolumnEnum);							 _assert_(watercolumn_input);
+	Input* meltingrate_input	 = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);							 _assert_(meltingrate_input);
 
 	/*Fetch indices of basal & surface nodes for this finite element*/
@@ -1391,8 +1391,8 @@
 
 	/*Get parameters and inputs: */
-	Input2* enthalpy_input    = element->GetInput2(EnthalpyEnum);                            _assert_(enthalpy_input); //TODO: check EnthalpyPicard?
-	Input2* pressure_input    = element->GetInput2(PressureEnum);                            _assert_(pressure_input);
-	Input2* watercolumn_input = element->GetInput2(WatercolumnEnum);                         _assert_(watercolumn_input);
-	Input2* meltingrate_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input);
+	Input* enthalpy_input    = element->GetInput(EnthalpyEnum);                            _assert_(enthalpy_input); //TODO: check EnthalpyPicard?
+	Input* pressure_input    = element->GetInput(PressureEnum);                            _assert_(pressure_input);
+	Input* watercolumn_input = element->GetInput(WatercolumnEnum);                         _assert_(watercolumn_input);
+	Input* meltingrate_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input);
 
 	/*Fetch indices of basal & surface nodes for this finite element*/
@@ -1563,7 +1563,7 @@
 			//if(waterfraction[i]>1.) _error_("Water fraction >1 found in solution vector");
 		}
-		element->AddInput2(EnthalpyEnum,values,finite_element);
-		element->AddInput2(WaterfractionEnum,waterfraction,finite_element);
-		element->AddInput2(TemperatureEnum,temperature,finite_element);
+		element->AddInput(EnthalpyEnum,values,finite_element);
+		element->AddInput(WaterfractionEnum,waterfraction,finite_element);
+		element->AddInput(TemperatureEnum,temperature,finite_element);
 
 		IssmDouble* n = xNew<IssmDouble>(numnodes);
@@ -1585,35 +1585,35 @@
 			case BuddJackaEnum:
 				for(i=0;i<numnodes;i++) B[i]=BuddJacka(temperature[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 			case CuffeyEnum:
 				for(i=0;i<numnodes;i++) B[i]=Cuffey(temperature[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 			case CuffeyTemperateEnum:
 				for(i=0;i<numnodes;i++) B[i]=CuffeyTemperate(temperature[i], waterfraction[i],n[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 			case PatersonEnum:
 				for(i=0;i<numnodes;i++) B[i]=Paterson(temperature[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 			case NyeH2OEnum:
 				for(i=0;i<numnodes;i++) B[i]=NyeH2O(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 			case NyeCO2Enum:
 				for(i=0;i<numnodes;i++) B[i]=NyeCO2(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 			case ArrheniusEnum:{
 				element->GetVerticesCoordinates(&xyz_list);
 				for(i=0;i<numnodes;i++) B[i]=Arrhenius(temperature[i],surface[i]-xyz_list[i*3+2],n[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element);
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element);
 				break;
 				}
 			case LliboutryDuvalEnum:{
 				for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n[i],element->FindParam(MaterialsBetaEnum),element->FindParam(ConstantsReferencetemperatureEnum),element->FindParam(MaterialsHeatcapacityEnum),element->FindParam(MaterialsLatentheatEnum)); 
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],finite_element); 
+				element->AddInput(MaterialsRheologyBEnum,&B[0],finite_element); 
 				break; 
 				}
@@ -1623,5 +1623,5 @@
 	}
 	else{
-		element->AddInput2(EnthalpyPicardEnum,values,finite_element);
+		element->AddInput(EnthalpyPicardEnum,values,finite_element);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h	(revision 25379)
@@ -18,5 +18,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h	(revision 25379)
@@ -10,5 +10,5 @@
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
Index: /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 	return 1;
 }/*}}}*/
-void EsaAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void EsaAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Update elements: */
@@ -25,5 +25,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -31,6 +31,6 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.esa.deltathickness",EsaDeltathicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.esa.deltathickness",EsaDeltathicknessEnum);
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/EsaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/EsaAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/EsaAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp	(revision 25379)
@@ -26,5 +26,5 @@
 }
 /*}}}*/
-void ExtrapolationAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void ExtrapolationAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 	int    finiteelement;
 
@@ -37,11 +37,11 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }
@@ -123,6 +123,6 @@
 
 	/*Retrieve all inputs and parameters*/
-	Input2* lsf_slopex_input=workelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
-	Input2* lsf_slopey_input=workelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+	Input* lsf_slopex_input=workelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+	Input* lsf_slopey_input=workelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
 	workelement->GetVerticesCoordinates(&xyz_list);
 
@@ -268,6 +268,6 @@
 	element->FindParam(&extvar_enum, ExtrapolationVariableEnum);
 
-	Input2* active_input=element->GetInput2(IceMaskNodeActivationEnum); _assert_(active_input);
-	Input2* extvar_input=element->GetInput2(extvar_enum); _assert_(extvar_input);
+	Input* active_input=element->GetInput(IceMaskNodeActivationEnum); _assert_(active_input);
+	Input* extvar_input=element->GetInput(extvar_enum); _assert_(extvar_input);
 
 	Gauss* gauss=element->NewGauss();
Index: /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 	void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 	int  DofsPerNode(int** doflist,int domaintype,int approximation);
-	void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+	void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 	void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 	return 1;
 }/*}}}*/
-void ExtrudeFromBaseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void ExtrudeFromBaseAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int counter=0;
@@ -24,5 +24,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -30,5 +30,5 @@
 
 	if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 	return 1;
 }/*}}}*/
-void ExtrudeFromTopAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void ExtrudeFromTopAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int counter=0;
@@ -24,5 +24,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -30,5 +30,5 @@
 
 	if(iomodel->domaintype==Domain2DverticalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 25379)
@@ -55,5 +55,5 @@
 	return 1;
 }/*}}}*/
-void FreeSurfaceBaseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void FreeSurfaceBaseAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -68,21 +68,21 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
 	if(iomodel->domaindim==3){
-		iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum);
 	}
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 
@@ -92,5 +92,5 @@
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
 			break;
 		case LinearFloatingMeltRateEnum:
@@ -101,18 +101,18 @@
 			break;
 		case SpatialLinearFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
 			break;
 		case BasalforcingsPicoEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);
 			break;
 		case BasalforcingsIsmip6Enum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
 			break;
 		case BeckmannGoosseFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
 			break;
 		default:
@@ -176,7 +176,7 @@
 	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
 	basalelement->FindParam(&stabilization,MasstransportStabilizationEnum);
-	Input2* vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=NULL;
-	if(dim>1){vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input);}
+	Input* vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=NULL;
+	if(dim>1){vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);}
 	h = basalelement->CharacteristicLength();
 
@@ -307,12 +307,12 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2* groundedice_input   = basalelement->GetInput2(MaskOceanLevelsetEnum);              _assert_(groundedice_input);
-	Input2* gmb_input           = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
-	Input2* fmb_input           = basalelement->GetInput2(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
-	Input2* base_input          = basalelement->GetInput2(BaseEnum);                                 _assert_(base_input);
-	Input2* vz_input      = NULL;
+	Input* groundedice_input   = basalelement->GetInput(MaskOceanLevelsetEnum);              _assert_(groundedice_input);
+	Input* gmb_input           = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
+	Input* fmb_input           = basalelement->GetInput(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
+	Input* base_input          = basalelement->GetInput(BaseEnum);                                 _assert_(base_input);
+	Input* vz_input      = NULL;
 	switch(dim){
-		case 1: vz_input = basalelement->GetInput2(VyEnum); _assert_(vz_input); break;
-		case 2: vz_input = basalelement->GetInput2(VzEnum); _assert_(vz_input); break;
+		case 1: vz_input = basalelement->GetInput(VyEnum); _assert_(vz_input); break;
+		case 2: vz_input = basalelement->GetInput(VzEnum); _assert_(vz_input); break;
 		default: _error_("not implemented");
 	}
@@ -365,7 +365,7 @@
 
 		int             numnodes = element->GetNumberOfNodes();
-		Input2* groundedice_input = element->GetInput2(MaskOceanLevelsetEnum);  _assert_(groundedice_input);
-		Input2* onbase_input       = element->GetInput2(MeshVertexonbaseEnum);          _assert_(onbase_input);
-		Input2* base_input        = element->GetInput2(BaseEnum);                     _assert_(base_input);
+		Input* groundedice_input = element->GetInput(MaskOceanLevelsetEnum);  _assert_(groundedice_input);
+		Input* onbase_input       = element->GetInput(MeshVertexonbaseEnum);          _assert_(onbase_input);
+		Input* base_input        = element->GetInput(BaseEnum);                     _assert_(base_input);
 
 		Gauss* gauss=element->NewGauss();
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 25379)
@@ -55,5 +55,5 @@
 	return 1;
 }/*}}}*/
-void FreeSurfaceTopAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void FreeSurfaceTopAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -71,23 +71,23 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
 	}
 	if(iomodel->domaindim==3){
-		iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum);
 	}
 	switch(smb_model){
 		case SMBforcingEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);
 			break;
 		default:
@@ -152,7 +152,7 @@
 	topelement->FindParam(&dt,TimesteppingTimeStepEnum);
 	topelement->FindParam(&stabilization,MasstransportStabilizationEnum);
-	Input2* vx_input=topelement->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=NULL;
-	if(dim>1){vy_input = topelement->GetInput2(VyEnum); _assert_(vy_input);}
+	Input* vx_input=topelement->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=NULL;
+	if(dim>1){vy_input = topelement->GetInput(VyEnum); _assert_(vy_input);}
 	h = topelement->CharacteristicLength();
 
@@ -286,10 +286,10 @@
 	topelement->GetVerticesCoordinates(&xyz_list);
 	topelement->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2* ms_input      = topelement->GetInput2(SmbMassBalanceEnum);  _assert_(ms_input);
-	Input2* surface_input = topelement->GetInput2(SurfaceEnum);                     _assert_(surface_input);
-	Input2* vz_input      = NULL;
+	Input* ms_input      = topelement->GetInput(SmbMassBalanceEnum);  _assert_(ms_input);
+	Input* surface_input = topelement->GetInput(SurfaceEnum);                     _assert_(surface_input);
+	Input* vz_input      = NULL;
 	switch(dim){
-		case 1: vz_input = topelement->GetInput2(VyEnum); _assert_(vz_input); break;
-		case 2: vz_input = topelement->GetInput2(VzEnum); _assert_(vz_input); break;
+		case 1: vz_input = topelement->GetInput(VyEnum); _assert_(vz_input); break;
+		case 2: vz_input = topelement->GetInput(VzEnum); _assert_(vz_input); break;
 		default: _error_("not implemented");
 	}
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 25379)
@@ -24,5 +24,5 @@
 	return 1;
 }/*}}}*/
-void GLheightadvectionAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void GLheightadvectionAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Update elements: */
@@ -31,5 +31,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -37,8 +37,8 @@
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
 }/*}}}*/
 void GLheightadvectionAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -71,7 +71,7 @@
 	IssmDouble vel,vx,vy;
 	IssmDouble* xyz_list      = NULL;
-	Input2* vx_input           = NULL;
-	Input2* vy_input           = NULL;
-	Input2* bc_input           = NULL;
+	Input* vx_input           = NULL;
+	Input* vy_input           = NULL;
+	Input* bc_input           = NULL;
 
 	/*Get problem dimension*/
@@ -95,7 +95,7 @@
 	/*Retrieve all inputs and parameters*/
 	basalelement->GetVerticesCoordinates(&xyz_list);
-	vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input);
-	vy_input=basalelement->GetInput2(VyEnum); _assert_(vy_input);
-	bc_input=basalelement->GetInput2(MeshVertexonboundaryEnum); _assert_(bc_input);
+	vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
+	vy_input=basalelement->GetInput(VyEnum); _assert_(vy_input);
+	bc_input=basalelement->GetInput(MeshVertexonboundaryEnum); _assert_(bc_input);
 
 	IssmDouble h = basalelement->CharacteristicLength();
Index: /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 	return 1;
 }/*}}}*/
-void GiaAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void GiaAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int giamodel=0;
@@ -28,5 +28,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -36,8 +36,8 @@
 	iomodel->FetchData(&giamodel,"md.gia.model");
 	if(giamodel==1){ //GiaIvins
-		iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	}
 	else if(giamodel==2){ //GiaCaron: not implemneted yet
@@ -45,6 +45,6 @@
 	else if(giamodel==3){
 		/*take Ngia and Ugia from the offline models and plug into the element inputs:*/
-		iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
-		iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
+		iomodel->FetchDataToDatasetInput(inputs,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
+		iomodel->FetchDataToDatasetInput(inputs,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
 	}
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/GiaAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 25379)
@@ -34,5 +34,5 @@
 	parameters->AddObject(new IntParam(HydrologydcEplThickCompEnum,eplthickcomp));
 }/*}}}*/
-void HydrologyDCEfficientAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void HydrologyDCEfficientAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	bool   isefficientlayer;
@@ -52,18 +52,18 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_head",EplHeadSubstepEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_thickness",HydrologydcEplThicknessSubstepEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.epl_head",EplHeadSubstepEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.epl_thickness",HydrologydcEplThicknessSubstepEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -211,5 +211,5 @@
 	basalelement->GetVerticesCoordinates(&xyz_list);
 	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2* epl_thick_input = basalelement->GetInput2(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input);
+	Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -291,7 +291,7 @@
 
 	IssmDouble *xyz_list             = NULL;
-	Input2     *old_wh_input         = NULL;
-	Input2     *dummy_input          = NULL;
-	Input2     *surface_runoff_input = NULL;
+	Input     *old_wh_input         = NULL;
+	Input     *dummy_input          = NULL;
+	Input     *surface_runoff_input = NULL;
 
 	/*Fetch number of nodes and dof for this finite element*/
@@ -308,11 +308,11 @@
 	basalelement ->FindParam(&smb_model,SmbEnum);
 
-	Input2*	epl_thick_input  = basalelement->GetInput2(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input);
-	Input2*	sed_head_input   = basalelement->GetInput2(SedimentHeadSubstepEnum); _assert_(sed_head_input);
-	Input2*	basal_melt_input = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
-	Input2*	residual_input   = basalelement->GetInput2(SedimentHeadResidualEnum); _assert_(residual_input);
+	Input*	epl_thick_input  = basalelement->GetInput(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input);
+	Input*	sed_head_input   = basalelement->GetInput(SedimentHeadSubstepEnum); _assert_(sed_head_input);
+	Input*	basal_melt_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
+	Input*	residual_input   = basalelement->GetInput(SedimentHeadResidualEnum); _assert_(residual_input);
 
 	if(dt!= 0.){
-		old_wh_input = basalelement->GetInput2(EplHeadOldEnum);            _assert_(old_wh_input);
+		old_wh_input = basalelement->GetInput(EplHeadOldEnum);            _assert_(old_wh_input);
 	}
 	if(smb_model==SMBgradientscomponentsEnum){
@@ -323,16 +323,16 @@
 		if(smbsubstepping==1){
 			//no substeping for the smb we take the result from there
-			dummy_input = basalelement->GetInput2(SmbRunoffEnum); _assert_(dummy_input);
+			dummy_input = basalelement->GetInput(SmbRunoffEnum); _assert_(dummy_input);
 		}
 		else if(smbsubstepping>1 && smbsubstepping<=hydrologysubstepping){
 			//finer hydro stepping, we take the value at the needed time
-			dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum, time); _assert_(dummy_input);
+			dummy_input = basalelement->GetInput(SmbRunoffTransientEnum, time); _assert_(dummy_input);
 		}
 		else{
 			//finer stepping in smb, we average the runoff from transient input
 			basalelement->FindParam(&smb_averaging,SmbAveragingEnum);
-			dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum,time-dt,time,smb_averaging); _assert_(dummy_input);
-		}
-		surface_runoff_input=xDynamicCast<Input2*>(dummy_input); _assert_(surface_runoff_input);
+			dummy_input = basalelement->GetInput(SmbRunoffTransientEnum,time-dt,time,smb_averaging); _assert_(dummy_input);
+		}
+		surface_runoff_input=xDynamicCast<Input*>(dummy_input); _assert_(surface_runoff_input);
 	}
 
@@ -422,5 +422,5 @@
 	}
 	/*Add input to the element: */
-	element->AddBasalInput2(EplHeadSubstepEnum,eplHeads,P1Enum);
+	element->AddBasalInput(EplHeadSubstepEnum,eplHeads,P1Enum);
 
 	/*Free ressources:*/
@@ -435,5 +435,5 @@
 
 /*Intermediaries*/
-IssmDouble HydrologyDCEfficientAnalysis::EplStoring(Element* element,Gauss* gauss, Input2* epl_thick_input){/*{{{*/
+IssmDouble HydrologyDCEfficientAnalysis::EplStoring(Element* element,Gauss* gauss, Input* epl_thick_input){/*{{{*/
 	IssmDouble epl_storing;
 	IssmDouble epl_thickness;
@@ -446,5 +446,5 @@
 	return epl_storing;
 }/*}}}*/
-IssmDouble HydrologyDCEfficientAnalysis::EplTransmitivity(Element* element,Gauss* gauss, Input2* epl_thick_input){/*{{{*/
+IssmDouble HydrologyDCEfficientAnalysis::EplTransmitivity(Element* element,Gauss* gauss, Input* epl_thick_input){/*{{{*/
 	IssmDouble epl_transmitivity;
 	IssmDouble epl_thickness;
@@ -511,5 +511,5 @@
 	return transfer;
 }/*}}}*/
-IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* sed_head_input){/*{{{*/
+IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input){/*{{{*/
 
 	int transfermethod;
@@ -634,5 +634,5 @@
 			}
 		}
-		element->AddInput2(HydrologydcEplThicknessSubstepEnum,thickness,element->GetElementType());
+		element->AddInput(HydrologydcEplThicknessSubstepEnum,thickness,element->GetElementType());
 		xDelete<IssmDouble>(thickness);
 		xDelete<IssmDouble>(eplhead);
@@ -724,5 +724,5 @@
 		}
 	}
-	element->AddBasalInput2(HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType());
+	element->AddBasalInput(HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType());
 
 	if(domaintype!=Domain2DhorizontalEnum){
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h	(revision 25379)
@@ -9,5 +9,5 @@
 #include "./Analysis.h"
 class Node;
-class Input2;
+class Input;
 class HydrologyDCEfficientAnalysis: public Analysis{
 
@@ -16,5 +16,5 @@
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
@@ -35,9 +35,9 @@
 
 		/*Intermediaries*/
-		IssmDouble EplStoring(Element* element,Gauss* gauss, Input2* epl_thick_input);
-		IssmDouble EplTransmitivity(Element* element,Gauss* gauss, Input2* epl_thick_input);
+		IssmDouble EplStoring(Element* element,Gauss* gauss, Input* epl_thick_input);
+		IssmDouble EplTransmitivity(Element* element,Gauss* gauss, Input* epl_thick_input);
 		void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode);
 		IssmDouble GetHydrologyKMatrixTransfer(Element* element);
-		IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* sed_head_input);
+		IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input);
 		void ComputeEPLThickness(FemModel* femmodel);
 		void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask, Vector<IssmDouble>* recurence, Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 25379)
@@ -5,5 +5,5 @@
 #include "../shared/shared.h"
 #include "../modules/modules.h"
-#include "../classes/Inputs2/TransientInput2.h"
+#include "../classes/Inputs/TransientInput.h"
 
 /*Model processing*/
@@ -79,5 +79,5 @@
   iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs");
 }/*}}}*/
-void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	bool   isefficientlayer;
@@ -98,23 +98,23 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.sediment_transmitivity",HydrologydcSedimentTransmitivityEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.mask_thawed_node",HydrologydcMaskThawedNodeEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.sediment_transmitivity",HydrologydcSedimentTransmitivityEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.mask_thawed_node",HydrologydcMaskThawedNodeEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 	if(isefficientlayer){
-		iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_head",EplHeadSubstepEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.initialization.epl_head",EplHeadSubstepEnum);
 	}
 
@@ -205,5 +205,5 @@
 	}
 
-	basalelement->GetInput2Value(&thawed_element,HydrologydcMaskThawedEltEnum);
+	basalelement->GetInputValue(&thawed_element,HydrologydcMaskThawedEltEnum);
 
 	/*Check that all nodes are active, else return empty matrix*/
@@ -235,11 +235,11 @@
 	basalelement ->FindParam(&dt,TimesteppingTimeStepEnum);
 	basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
-	Input2* SedTrans_input = basalelement->GetInput2(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
-	Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum);
-	Input2* base_input     = basalelement->GetInput2(BaseEnum);
+	Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
+	Input* sed_head_input = basalelement->GetInput(SedimentHeadSubstepEnum);
+	Input* base_input     = basalelement->GetInput(BaseEnum);
 
 	/*Transfer related Inputs*/
 	if(isefficientlayer){
-		basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum);
+		basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum);
 	}
 	/* Start  looping on the number of gaussian points: */
@@ -308,5 +308,5 @@
 	}
 
-	basalelement->GetInput2Value(&thawed_element,HydrologydcMaskThawedEltEnum);
+	basalelement->GetInputValue(&thawed_element,HydrologydcMaskThawedEltEnum);
 
 	/*Check that all nodes are active, else return empty matrix*/
@@ -329,8 +329,8 @@
 
 	IssmDouble *xyz_list             = NULL;
-	Input2     *active_element_input = NULL;
-	Input2     *old_wh_input         = NULL;
-	Input2     *dummy_input          = NULL;
-	Input2     *surface_runoff_input = NULL;
+	Input     *active_element_input = NULL;
+	Input     *old_wh_input         = NULL;
+	Input     *dummy_input          = NULL;
+	Input     *surface_runoff_input = NULL;
 
 	/*Fetch number of nodes and dof for this finite element*/
@@ -347,12 +347,12 @@
 	basalelement->FindParam(&smb_model,SmbEnum);
 
-	Input2*	sed_head_input   = basalelement->GetInput2(SedimentHeadSubstepEnum);
-	Input2*	epl_head_input   = basalelement->GetInput2(EplHeadSubstepEnum);
-	Input2*	base_input       = basalelement->GetInput2(BaseEnum);
-	Input2*	basal_melt_input = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
-	Input2*	SedTrans_input   = basalelement->GetInput2(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
+	Input*	sed_head_input   = basalelement->GetInput(SedimentHeadSubstepEnum);
+	Input*	epl_head_input   = basalelement->GetInput(EplHeadSubstepEnum);
+	Input*	base_input       = basalelement->GetInput(BaseEnum);
+	Input*	basal_melt_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);
+	Input*	SedTrans_input   = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
 
 	if(dt!= 0.){
-		old_wh_input = basalelement->GetInput2(SedimentHeadOldEnum); _assert_(old_wh_input);
+		old_wh_input = basalelement->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input);
 	}
 	if(smb_model==SMBgradientscomponentsEnum){
@@ -363,21 +363,21 @@
 		if(smbsubstepping==1){
 			//no substeping for the smb we take the result from there
-			dummy_input = basalelement->GetInput2(SmbRunoffEnum); _assert_(dummy_input);
+			dummy_input = basalelement->GetInput(SmbRunoffEnum); _assert_(dummy_input);
 		}
 		else if(smbsubstepping>1 && smbsubstepping<=hydrologysubstepping){
 			//finer hydro stepping, we take the value at the needed time
-			dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum, time); _assert_(dummy_input);
+			dummy_input = basalelement->GetInput(SmbRunoffTransientEnum, time); _assert_(dummy_input);
 		}
 		else{
 			//finer stepping in smb, we average the runoff from transient input
 			basalelement->FindParam(&smb_averaging,SmbAveragingEnum);
-			dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum,time-dt,time,smb_averaging); _assert_(dummy_input);
-		}
-		surface_runoff_input=xDynamicCast<Input2*>(dummy_input); _assert_(surface_runoff_input);
+			dummy_input = basalelement->GetInput(SmbRunoffTransientEnum,time-dt,time,smb_averaging); _assert_(dummy_input);
+		}
+		surface_runoff_input=xDynamicCast<Input*>(dummy_input); _assert_(surface_runoff_input);
 	}
 
 	/*Transfer related Inputs*/
 	if(isefficientlayer){
-		basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum);
+		basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum);
 	}
 
@@ -528,7 +528,7 @@
 
 	/*Add input to the element: */
-	element->AddBasalInput2(SedimentHeadSubstepEnum,values,P1Enum);
-	element->AddBasalInput2(EffectivePressureSubstepEnum,pressure,P1Enum);
-	element->AddBasalInput2(SedimentHeadResidualEnum,residual,P1Enum);
+	element->AddBasalInput(SedimentHeadSubstepEnum,values,P1Enum);
+	element->AddBasalInput(EffectivePressureSubstepEnum,pressure,P1Enum);
+	element->AddBasalInput(SedimentHeadResidualEnum,residual,P1Enum);
 
 	/*Free ressources:*/
@@ -547,5 +547,5 @@
 }/*}}}*/
 /*Intermediaries*/
-IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input){/*{{{*/
+IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input){/*{{{*/
 	int unconf_scheme;
 	IssmDouble expfac;
@@ -577,5 +577,5 @@
 	return sediment_storing;
 }/*}}}*/
-IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input,Input2* SedTrans_input){/*{{{*/
+IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input,Input* SedTrans_input){/*{{{*/
 	int unconf_scheme;
 	IssmDouble sediment_transmitivity;
@@ -664,5 +664,5 @@
 	return transfer;
 }/*}}}*/
-IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* epl_head_input){/*{{{*/
+IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_head_input){/*{{{*/
 
 	int transfermethod;
@@ -696,5 +696,5 @@
 		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
 
-		Input2* input=element->GetInput2(HydrologydcMaskEplactiveNodeEnum); _assert_(input);
+		Input* input=element->GetInput(HydrologydcMaskEplactiveNodeEnum); _assert_(input);
 		if(input->GetInputMax()>0.){
 			element_active = true;
@@ -703,5 +703,5 @@
 			element_active = false;
 		}
-		element->SetBoolInput(element->inputs2,HydrologydcMaskEplactiveEltEnum,element_active);
+		element->SetBoolInput(element->inputs,HydrologydcMaskEplactiveEltEnum,element_active);
 	}
 }/*}}}*/
@@ -756,5 +756,5 @@
 		element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
 
-		Input2* input=element->GetInput2(HydrologydcMaskThawedNodeEnum); _assert_(input);
+		Input* input=element->GetInput(HydrologydcMaskThawedNodeEnum); _assert_(input);
 		if(input->GetInputMax()>0.){
 			element_active = true;
@@ -763,5 +763,5 @@
 			element_active = false;
 		}
-		element->SetBoolInput(element->inputs2,HydrologydcMaskThawedEltEnum,element_active);
+		element->SetBoolInput(element->inputs,HydrologydcMaskThawedEltEnum,element_active);
 	}
 }/*}}}*/
@@ -791,5 +791,5 @@
 	/*Pass the activity mask from elements to nodes*/
 	basalelement->GetInputListOnVertices(&active[0],HydrologydcMaskThawedNodeEnum);
-	basalelement->GetInput2Value(&active_element,HydrologydcMaskThawedEltEnum);
+	basalelement->GetInputValue(&active_element,HydrologydcMaskThawedEltEnum);
 
 	for(int i=0;i<numnodes;i++) flag+=active[i];
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h	(revision 25379)
@@ -9,5 +9,5 @@
 #include "./Analysis.h"
 class Node;
-class Input2;
+class Input;
 class HydrologyDCInefficientAnalysis: public Analysis{
 
@@ -16,5 +16,5 @@
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		void CreateConstraints(Constraints* constraints,IoModel* iomodel);
@@ -33,9 +33,9 @@
 
 		/*Intermediaries*/
-		IssmDouble SedimentStoring(Element* element, Gauss* gauss, Input2* sed_head_input, Input2* base_input);
-		IssmDouble SedimentTransmitivity(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input,Input2* SedTrans_input);
+		IssmDouble SedimentStoring(Element* element, Gauss* gauss, Input* sed_head_input, Input* base_input);
+		IssmDouble SedimentTransmitivity(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input,Input* SedTrans_input);
 		void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode);
 		IssmDouble GetHydrologyKMatrixTransfer(Element* element);
-		IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* epl_head_input);
+		IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* epl_head_input);
 		void ElementizeEplMask(FemModel* femmodel);
 		void HydrologyIDSGetMask(Vector<IssmDouble>* vec_mask, Element* element);
Index: /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp	(revision 25379)
@@ -107,5 +107,5 @@
 	return 1;
 }/*}}}*/
-void HydrologyGlaDSAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void HydrologyGlaDSAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Fetch data needed: */
@@ -121,28 +121,28 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
 
@@ -150,10 +150,10 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 8:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
 			break;
 		default:
@@ -249,11 +249,11 @@
 	IssmDouble g         = element->FindParam(ConstantsGEnum);
 	IssmDouble e_v       = element->FindParam(HydrologyEnglacialVoidRatioEnum);
-	Input2* k_input   = element->GetInput2(HydrologySheetConductivityEnum);_assert_(k_input);
-	Input2* phi_input = element->GetInput2(HydraulicPotentialEnum);      _assert_(phi_input);
-	Input2* h_input   = element->GetInput2(HydrologySheetThicknessEnum); _assert_(h_input);
-	Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* k_input   = element->GetInput(HydrologySheetConductivityEnum);_assert_(k_input);
+	Input* phi_input = element->GetInput(HydraulicPotentialEnum);      _assert_(phi_input);
+	Input* h_input   = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input);
+	Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
+	Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -349,16 +349,16 @@
 	IssmDouble g         = element->FindParam(ConstantsGEnum);
 	IssmDouble e_v       = element->FindParam(HydrologyEnglacialVoidRatioEnum);
-	Input2* hr_input     = element->GetInput2(HydrologyBumpHeightEnum);_assert_(hr_input);
-	Input2* vx_input     = element->GetInput2(VxEnum);_assert_(vx_input);
-	Input2* vy_input     = element->GetInput2(VyEnum);_assert_(vy_input);
-	Input2* h_input      = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input);
-	Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* G_input      = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(G_input);
-	Input2* m_input      = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);_assert_(m_input);
-	Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* phiold_input = element->GetInput2(HydraulicPotentialOldEnum);      _assert_(phiold_input);
-	Input2* phi_input    = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
+	Input* hr_input     = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);
+	Input* vx_input     = element->GetInput(VxEnum);_assert_(vx_input);
+	Input* vy_input     = element->GetInput(VyEnum);_assert_(vy_input);
+	Input* h_input      = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
+	Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
+	Input* G_input      = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(G_input);
+	Input* m_input      = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);_assert_(m_input);
+	Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* phiold_input = element->GetInput(HydraulicPotentialOldEnum);      _assert_(phiold_input);
+	Input* phi_input    = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
 
 	/*Build friction element, needed later: */
@@ -486,13 +486,13 @@
 	IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum);
 	IssmDouble g         = element->FindParam(ConstantsGEnum);
-	Input2* hr_input = element->GetInput2(HydrologyBumpHeightEnum);_assert_(hr_input);
-	Input2* vx_input = element->GetInput2(VxEnum);_assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum);_assert_(vy_input);
-	Input2* H_input  = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input  = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* hold_input  = element->GetInput2(HydrologySheetThicknessOldEnum);_assert_(hold_input);
-	Input2* B_input  = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input  = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* phi_input = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
+	Input* hr_input = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);
+	Input* vx_input = element->GetInput(VxEnum);_assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum);_assert_(vy_input);
+	Input* H_input  = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input  = element->GetInput(BedEnum); _assert_(b_input);
+	Input* hold_input  = element->GetInput(HydrologySheetThicknessOldEnum);_assert_(hold_input);
+	Input* B_input  = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input  = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* phi_input = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -539,5 +539,5 @@
 	}
 
-	element->AddInput2(HydrologySheetThicknessEnum,h_new,P1Enum);
+	element->AddInput(HydrologySheetThicknessEnum,h_new,P1Enum);
 
 	/*Clean up and return*/
@@ -569,7 +569,7 @@
 	IssmDouble  rho_water = element->FindParam(MaterialsRhoFreshwaterEnum);
 	IssmDouble  g         = element->FindParam(ConstantsGEnum);
-	Input2* H_input   = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input   = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input);
+	Input* H_input   = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input   = element->GetInput(BedEnum); _assert_(b_input);
+	Input* phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -599,5 +599,5 @@
 	}
 
-	element->AddInput2(EffectivePressureEnum,N,element->FiniteElement());
+	element->AddInput(EffectivePressureEnum,N,element->FiniteElement());
 
 	/*Clean up and return*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp	(revision 25379)
@@ -22,5 +22,5 @@
 	return 0;
 }/*}}}*/
-void HydrologyPismAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void HydrologyPismAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Fetch data needed: */
@@ -32,10 +32,10 @@
 
 	/*Add input to elements*/
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
 }/*}}}*/
 void HydrologyPismAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -132,5 +132,5 @@
 	/* Divide by connectivity, add degree of channelization as an input */
 	/*FIXME: should be changed to P1, this is due to the NR, IsFloating will return 0 on this element, but it should not be DG*/
-	element->AddInput2(WatercolumnEnum,&watercolumn[0],P1DGEnum);
+	element->AddInput(WatercolumnEnum,&watercolumn[0],P1DGEnum);
 
 	/*Clean up and return*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp	(revision 25379)
@@ -80,5 +80,5 @@
 	return 1;
 }/*}}}*/
-void HydrologyShaktiAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void HydrologyShaktiAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Fetch data needed: */
@@ -94,29 +94,29 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.head",HydrologyHeadEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.gap_height",HydrologyGapHeightEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.englacial_input",HydrologyEnglacialInputEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_spacing",HydrologyBumpSpacingEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.reynolds",HydrologyReynoldsEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.head",HydrologyHeadEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.gap_height",HydrologyGapHeightEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.englacial_input",HydrologyEnglacialInputEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.bump_spacing",HydrologyBumpSpacingEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.reynolds",HydrologyReynoldsEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
 	iomodel->FindConstant(&frictionlaw,"md.friction.law");
 
@@ -124,10 +124,10 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 8:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
 			break;
 		default:
@@ -244,17 +244,17 @@
 	IssmDouble  rho_ice         = element->FindParam(MaterialsRhoIceEnum);
 	IssmDouble  rho_water       = element->FindParam(MaterialsRhoFreshwaterEnum);
-	Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);
-	Input2* head_input           = element->GetInput2(HydrologyHeadEnum);              _assert_(head_input);
-	Input2* gap_input            = element->GetInput2(HydrologyGapHeightEnum);         _assert_(gap_input);
-	Input2* thickness_input      = element->GetInput2(ThicknessEnum);                  _assert_(thickness_input);
-	Input2* base_input           = element->GetInput2(BaseEnum);                       _assert_(base_input);
-	Input2* B_input              = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input              = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* englacial_input      = element->GetInput2(HydrologyEnglacialInputEnum);    _assert_(englacial_input);
-	Input2* vx_input             = element->GetInput2(VxEnum);                         _assert_(vx_input);
-	Input2* vy_input             = element->GetInput2(VyEnum);                         _assert_(vy_input);
-	Input2* lr_input             = element->GetInput2(HydrologyBumpSpacingEnum);       _assert_(lr_input);
-	Input2* br_input             = element->GetInput2(HydrologyBumpHeightEnum);        _assert_(br_input);
-   Input2* headold_input        = element->GetInput2(HydrologyHeadOldEnum);           _assert_(headold_input);
+	Input* geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);
+	Input* head_input           = element->GetInput(HydrologyHeadEnum);              _assert_(head_input);
+	Input* gap_input            = element->GetInput(HydrologyGapHeightEnum);         _assert_(gap_input);
+	Input* thickness_input      = element->GetInput(ThicknessEnum);                  _assert_(thickness_input);
+	Input* base_input           = element->GetInput(BaseEnum);                       _assert_(base_input);
+	Input* B_input              = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input              = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* englacial_input      = element->GetInput(HydrologyEnglacialInputEnum);    _assert_(englacial_input);
+	Input* vx_input             = element->GetInput(VxEnum);                         _assert_(vx_input);
+	Input* vy_input             = element->GetInput(VyEnum);                         _assert_(vy_input);
+	Input* lr_input             = element->GetInput(HydrologyBumpSpacingEnum);       _assert_(lr_input);
+	Input* br_input             = element->GetInput(HydrologyBumpHeightEnum);        _assert_(br_input);
+   Input* headold_input        = element->GetInput(HydrologyHeadOldEnum);           _assert_(headold_input);
 
 	/*Get conductivity from inputs*/
@@ -403,10 +403,10 @@
 
 	/*Add input to the element: */
-	element->AddInput2(HydrologyHeadEnum,values,element->GetElementType());
-   element->AddInput2(EffectivePressureEnum,eff_pressure,P1Enum);
+	element->AddInput(HydrologyHeadEnum,values,element->GetElementType());
+   element->AddInput(EffectivePressureEnum,eff_pressure,P1Enum);
 
 	/*Update reynolds number according to new solution*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* head_input = element->GetInput2(HydrologyHeadEnum);_assert_(head_input);
+	Input* head_input = element->GetInput(HydrologyHeadEnum);_assert_(head_input);
 	IssmDouble conductivity = GetConductivity(element);
 
@@ -417,5 +417,5 @@
 
 	IssmDouble reynolds = conductivity*sqrt(dh[0]*dh[0]+dh[1]*dh[1])/NU;
-	element->AddInput2(HydrologyReynoldsEnum,&reynolds,P0Enum);
+	element->AddInput(HydrologyReynoldsEnum,&reynolds,P0Enum);
 
 	/*Free resources:*/
@@ -443,6 +443,6 @@
 
 	/*Get Reynolds and gap average values*/
-	Input2* reynolds_input = element->GetInput2(HydrologyReynoldsEnum);  _assert_(reynolds_input);
-	Input2* gap_input      = element->GetInput2(HydrologyGapHeightEnum); _assert_(gap_input);
+	Input* reynolds_input = element->GetInput(HydrologyReynoldsEnum);  _assert_(reynolds_input);
+	Input* gap_input      = element->GetInput(HydrologyGapHeightEnum); _assert_(gap_input);
 	reynolds_input->GetInputAverage(&reynolds);
 	gap_input->GetInputAverage(&gap);
@@ -486,16 +486,16 @@
 	IssmDouble  rho_ice         = element->FindParam(MaterialsRhoIceEnum);
 	IssmDouble  rho_water       = element->FindParam(MaterialsRhoFreshwaterEnum);
-	Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);
-	Input2* head_input           = element->GetInput2(HydrologyHeadEnum);              _assert_(head_input);
-	Input2* gap_input            = element->GetInput2(HydrologyGapHeightEnum);         _assert_(gap_input);
-	Input2* thickness_input      = element->GetInput2(ThicknessEnum);                  _assert_(thickness_input);
-	Input2* base_input           = element->GetInput2(BaseEnum);                       _assert_(base_input);
-	Input2* B_input              = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input              = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* englacial_input      = element->GetInput2(HydrologyEnglacialInputEnum);    _assert_(englacial_input);
-	Input2* vx_input             = element->GetInput2(VxEnum);                         _assert_(vx_input);
-	Input2* vy_input             = element->GetInput2(VyEnum);                         _assert_(vy_input);
-	Input2* lr_input             = element->GetInput2(HydrologyBumpSpacingEnum);       _assert_(lr_input);
-	Input2* br_input             = element->GetInput2(HydrologyBumpHeightEnum);        _assert_(br_input);
+	Input* geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);
+	Input* head_input           = element->GetInput(HydrologyHeadEnum);              _assert_(head_input);
+	Input* gap_input            = element->GetInput(HydrologyGapHeightEnum);         _assert_(gap_input);
+	Input* thickness_input      = element->GetInput(ThicknessEnum);                  _assert_(thickness_input);
+	Input* base_input           = element->GetInput(BaseEnum);                       _assert_(base_input);
+	Input* B_input              = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input              = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* englacial_input      = element->GetInput(HydrologyEnglacialInputEnum);    _assert_(englacial_input);
+	Input* vx_input             = element->GetInput(VxEnum);                         _assert_(vx_input);
+	Input* vy_input             = element->GetInput(VyEnum);                         _assert_(vy_input);
+	Input* lr_input             = element->GetInput(HydrologyBumpSpacingEnum);       _assert_(lr_input);
+	Input* br_input             = element->GetInput(HydrologyBumpHeightEnum);        _assert_(br_input);
 
 	/*Get conductivity from inputs*/
@@ -582,13 +582,13 @@
 
 	/*Add new gap as an input*/
-	element->AddInput2(HydrologyGapHeightEnum,&newgap,P0Enum);
+	element->AddInput(HydrologyGapHeightEnum,&newgap,P0Enum);
 
 	/*Divide by connectivity, add basal flux as an input*/
 	q = q/totalweights;
-	element->AddInput2(HydrologyBasalFluxEnum,&q,P0Enum);
+	element->AddInput(HydrologyBasalFluxEnum,&q,P0Enum);
 
 	/* Divide by connectivity, add degree of channelization as an input */
 	channelization = channelization/totalweights;
-	element->AddInput2(DegreeOfChannelizationEnum,&channelization,P0Enum);
+	element->AddInput(DegreeOfChannelizationEnum,&channelization,P0Enum);
 
 	/*Clean up and return*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp	(revision 25379)
@@ -36,5 +36,5 @@
 	return 1;
 }/*}}}*/
-void HydrologyShreveAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void HydrologyShreveAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Fetch data needed: */
@@ -50,23 +50,23 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum);
-
-	inputs2->DuplicateInput(WatercolumnEnum,WaterColumnOldEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",WatercolumnEnum);
+
+	inputs->DuplicateInput(WatercolumnEnum,WaterColumnOldEnum);
 }/*}}}*/
 void HydrologyShreveAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -109,9 +109,9 @@
 	IssmDouble  g         = element->FindParam(ConstantsGEnum);
 	IssmDouble  mu_water  = element->FindParam(MaterialsMuWaterEnum);
-	Input2* surfaceslopex_input = element->GetInput2(SurfaceSlopeXEnum); _assert_(surfaceslopex_input);
-	Input2* surfaceslopey_input = element->GetInput2(SurfaceSlopeYEnum); _assert_(surfaceslopey_input);
-	Input2* bedslopex_input     = element->GetInput2(BedSlopeXEnum);     _assert_(bedslopex_input);
-	Input2* bedslopey_input     = element->GetInput2(BedSlopeYEnum);     _assert_(bedslopey_input);
-	Input2* watercolumn_input   = element->GetInput2(WatercolumnEnum);   _assert_(watercolumn_input);
+	Input* surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input);
+	Input* surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input);
+	Input* bedslopex_input     = element->GetInput(BedSlopeXEnum);     _assert_(bedslopex_input);
+	Input* bedslopey_input     = element->GetInput(BedSlopeYEnum);     _assert_(bedslopey_input);
+	Input* watercolumn_input   = element->GetInput(WatercolumnEnum);   _assert_(watercolumn_input);
 
 	/*Fetch number of vertices and allocate output*/
@@ -138,6 +138,6 @@
 
 	/*Add to inputs*/
-	element->AddInput2(HydrologyWaterVxEnum,vx,P1Enum);
-	element->AddInput2(HydrologyWaterVyEnum,vy,P1Enum);
+	element->AddInput(HydrologyWaterVxEnum,vx,P1Enum);
+	element->AddInput(HydrologyWaterVyEnum,vy,P1Enum);
 	xDelete<IssmDouble>(vx);
 	xDelete<IssmDouble>(vy);
@@ -171,6 +171,6 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&diffusivity,HydrologyshreveStabilizationEnum);
-	Input2* vx_input=element->GetInput2(HydrologyWaterVxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(HydrologyWaterVyEnum); _assert_(vy_input);
+	Input* vx_input=element->GetInput(HydrologyWaterVxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(HydrologyWaterVyEnum); _assert_(vy_input);
 	h = element->CharacteristicLength();
 
@@ -249,6 +249,6 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2* mb_input   = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);
-	Input2* oldw_input = element->GetInput2(WaterColumnOldEnum);                      _assert_(oldw_input);
+	Input* mb_input   = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);
+	Input* oldw_input = element->GetInput(WaterColumnOldEnum);                      _assert_(oldw_input);
 
 	/*Initialize mb_correction to 0, do not forget!:*/
@@ -305,5 +305,5 @@
 
 	/*Add input to the element: */
-	element->AddInput2(WatercolumnEnum,values,element->GetElementType());
+	element->AddInput(WatercolumnEnum,values,element->GetElementType());
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 25379)
@@ -28,5 +28,5 @@
 	return 1;
 }/*}}}*/
-void L2ProjectionBaseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void L2ProjectionBaseAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Update elements: */
@@ -35,16 +35,16 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-   iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+   iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -144,6 +144,6 @@
 	int         input_enum;
 	IssmDouble  Jdet,value,slopes[2];
-	Input2     *input     = NULL;
-	Input2     *input2    = NULL;
+	Input     *input     = NULL;
+	Input     *input2    = NULL;
 	IssmDouble *xyz_list  = NULL;
 
@@ -159,13 +159,13 @@
 	basalelement->FindParam(&input_enum,InputToL2ProjectEnum);
 	switch(input_enum){
-		case SurfaceSlopeXEnum: input2 = basalelement->GetInput2(SurfaceEnum); _assert_(input2); break;
-		case SurfaceSlopeYEnum: input2 = basalelement->GetInput2(SurfaceEnum); _assert_(input2); break;
-		case BedSlopeXEnum:     input2 = basalelement->GetInput2(BaseEnum);     _assert_(input2); break;
-		case BedSlopeYEnum:     input2 = basalelement->GetInput2(BaseEnum);     _assert_(input2); break;
-		case BaseSlopeXEnum:    input2 = basalelement->GetInput2(BaseEnum);    _assert_(input2); break;
-		case BaseSlopeYEnum:    input2 = basalelement->GetInput2(BaseEnum);    _assert_(input2); break;
-		case LevelsetfunctionSlopeXEnum: input2 = basalelement->GetInput2(MaskIceLevelsetEnum);     _assert_(input2); break;
-		case LevelsetfunctionSlopeYEnum: input2 = basalelement->GetInput2(MaskIceLevelsetEnum);     _assert_(input2); break;
-		default: input = element->GetInput2(input_enum);
+		case SurfaceSlopeXEnum: input2 = basalelement->GetInput(SurfaceEnum); _assert_(input2); break;
+		case SurfaceSlopeYEnum: input2 = basalelement->GetInput(SurfaceEnum); _assert_(input2); break;
+		case BedSlopeXEnum:     input2 = basalelement->GetInput(BaseEnum);     _assert_(input2); break;
+		case BedSlopeYEnum:     input2 = basalelement->GetInput(BaseEnum);     _assert_(input2); break;
+		case BaseSlopeXEnum:    input2 = basalelement->GetInput(BaseEnum);    _assert_(input2); break;
+		case BaseSlopeYEnum:    input2 = basalelement->GetInput(BaseEnum);    _assert_(input2); break;
+		case LevelsetfunctionSlopeXEnum: input2 = basalelement->GetInput(MaskIceLevelsetEnum);     _assert_(input2); break;
+		case LevelsetfunctionSlopeYEnum: input2 = basalelement->GetInput(MaskIceLevelsetEnum);     _assert_(input2); break;
+		default: input = element->GetInput(input_enum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 25379)
@@ -37,5 +37,5 @@
 	return 1;
 }/*}}}*/
-void L2ProjectionEPLAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void L2ProjectionEPLAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	bool   isefficientlayer;
@@ -55,14 +55,14 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_head",EplHeadSubstepEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.epl_head",EplHeadSubstepEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 }/*}}}*/
@@ -105,5 +105,5 @@
 	}
 
-	basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum);
+	basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum);
 
 	/* Check that all nodes are active, else return empty matrix */
@@ -168,5 +168,5 @@
 	}
 
-	basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum);
+	basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum);
 
 	/*Check that all nodes are active, else return empty matrix*/
@@ -182,5 +182,5 @@
 	int         input_enum,index;
 	IssmDouble  Jdet,slopes[2];
-	Input2     *input     = NULL;
+	Input     *input     = NULL;
 	IssmDouble *xyz_list  = NULL;
 
@@ -196,6 +196,6 @@
 	basalelement->FindParam(&input_enum,InputToL2ProjectEnum);
 	switch(input_enum){
-		case EplHeadSlopeXEnum: input = basalelement->GetInput2(EplHeadSubstepEnum); index = 0; _assert_(input); break;
-		case EplHeadSlopeYEnum: input = basalelement->GetInput2(EplHeadSubstepEnum); index = 1; _assert_(input); break;
+		case EplHeadSlopeXEnum: input = basalelement->GetInput(EplHeadSubstepEnum); index = 0; _assert_(input); break;
+		case EplHeadSlopeYEnum: input = basalelement->GetInput(EplHeadSubstepEnum); index = 1; _assert_(input); break;
 		default: _error_("not implemented");
 	}
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 25379)
@@ -32,5 +32,5 @@
 }
 /*}}}*/
-void LevelsetAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void LevelsetAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Finite element type*/
@@ -43,12 +43,12 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
 
 	/*Get moving front parameters*/
@@ -57,26 +57,26 @@
 	switch(calvinglaw){
 		case DefaultCalvingEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",CalvingCalvingrateEnum);
 			break;
 		case CalvingLevermannEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.coeff",CalvinglevermannCoeffEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.coeff",CalvinglevermannCoeffEnum);
 			break;
 		case CalvingVonmisesEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
 			break;
 		case CalvingMinthicknessEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
 			break;
 		case CalvingHabEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);
 			break;
 		case CalvingCrevasseDepthEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.water_height",WaterheightEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.water_height",WaterheightEnum);
 			break;
 		case CalvingDev2Enum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);
 			break;
 		default:
@@ -89,10 +89,10 @@
 	switch(melt_parameterization){
 		case FrontalForcingsDefaultEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);
 			break;
 		case FrontalForcingsRignotEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum);
 			break;
 		default:
@@ -226,28 +226,28 @@
 	basalelement->FindParam(&dt,TimesteppingTimeStepEnum);
 	basalelement->FindParam(&calvingmax,CalvingMaxEnum);
-	Input2* vx_input           = NULL;
-	Input2* vy_input           = NULL;
-	Input2* calvingratex_input = NULL;
-	Input2* calvingratey_input = NULL;
-	Input2* lsf_slopex_input   = NULL;
-	Input2* lsf_slopey_input   = NULL;
-	Input2* calvingrate_input  = NULL;
-	Input2* meltingrate_input  = NULL;
-	Input2* gr_input           = NULL;
+	Input* vx_input           = NULL;
+	Input* vy_input           = NULL;
+	Input* calvingratex_input = NULL;
+	Input* calvingratey_input = NULL;
+	Input* lsf_slopex_input   = NULL;
+	Input* lsf_slopey_input   = NULL;
+	Input* calvingrate_input  = NULL;
+	Input* meltingrate_input  = NULL;
+	Input* gr_input           = NULL;
 
 	/*Load velocities*/
 	switch(domaintype){
 		case Domain2DverticalEnum:
-			vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input);
+			vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
 			break;
 		case Domain2DhorizontalEnum:
-			vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input);
-			vy_input=basalelement->GetInput2(VyEnum); _assert_(vy_input);
-			gr_input=basalelement->GetInput2(MaskOceanLevelsetEnum); _assert_(gr_input);
+			vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);
+			vy_input=basalelement->GetInput(VyEnum); _assert_(vy_input);
+			gr_input=basalelement->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
 			break;
 		case Domain3DEnum:
-			vx_input=basalelement->GetInput2(VxAverageEnum); _assert_(vx_input);
-			vy_input=basalelement->GetInput2(VyAverageEnum); _assert_(vy_input);
-			gr_input=basalelement->GetInput2(MaskOceanLevelsetEnum); _assert_(gr_input);
+			vx_input=basalelement->GetInput(VxAverageEnum); _assert_(vx_input);
+			vy_input=basalelement->GetInput(VyAverageEnum); _assert_(vy_input);
+			gr_input=basalelement->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
 			break;
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
@@ -258,47 +258,47 @@
 		case DefaultCalvingEnum:
 		case CalvingVonmisesEnum:
-			lsf_slopex_input  = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
-			if(dim==2) lsf_slopey_input  = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
-			calvingrate_input = basalelement->GetInput2(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
-			meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
+			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
 		case CalvingLevermannEnum:
 			switch(domaintype){
 				case Domain2DverticalEnum:
-					calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
+					calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
 					break;
 				case Domain2DhorizontalEnum:
-					calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-					calvingratey_input=basalelement->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
+					calvingratex_input=basalelement->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+					calvingratey_input=basalelement->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
 					break;
 				case Domain3DEnum:
-					calvingratex_input=basalelement->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input);
-					calvingratey_input=basalelement->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input);
+					calvingratex_input=basalelement->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
+					calvingratey_input=basalelement->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
 					break;
 				default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 			}
-			meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
 		case CalvingMinthicknessEnum:
-			lsf_slopex_input  = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
-			if(dim==2) lsf_slopey_input  = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
-			meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
 		case CalvingHabEnum:
-			lsf_slopex_input  = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
-			if(dim==2) lsf_slopey_input  = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
-			meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
 		case CalvingCrevasseDepthEnum:
-			lsf_slopex_input  = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
-			if(dim==2) lsf_slopey_input  = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
-			meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
 		case CalvingDev2Enum:
 			basalelement->FindParam(&calvinghaf,CalvingHeightAboveFloatationEnum);
-			lsf_slopex_input  = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
-			if(dim==2) lsf_slopey_input  = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
-			calvingrate_input = basalelement->GetInput2(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
-			meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
+			lsf_slopex_input  = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);
+			if(dim==2) lsf_slopey_input  = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);
+			calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum);     _assert_(calvingrate_input);
+			meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum);     _assert_(meltingrate_input);
 			break;
 		default:
@@ -569,5 +569,5 @@
 		/*Retrieve all inputs and parameters*/
 		basalelement->GetVerticesCoordinates(&xyz_list);
-		Input2* levelset_input     = basalelement->GetInput2(MaskIceLevelsetEnum);                    _assert_(levelset_input);
+		Input* levelset_input     = basalelement->GetInput(MaskIceLevelsetEnum);                    _assert_(levelset_input);
 
 		/* Start  looping on the number of gaussian points: */
@@ -661,7 +661,7 @@
 			int      numnodes = element->GetNumberOfNodes();
 			Gauss*   gauss    = element->NewGauss();
-			Input2*   H_input  = element->GetInput2(ThicknessEnum); _assert_(H_input);
-			Input2*   b_input = element->GetInput2(BedEnum); _assert_(b_input);
-			Input2*   sl_input = element->GetInput2(SealevelEnum); _assert_(sl_input);
+			Input*   H_input  = element->GetInput(ThicknessEnum); _assert_(H_input);
+			Input*   b_input = element->GetInput(BedEnum); _assert_(b_input);
+			Input*   sl_input = element->GetInput(SealevelEnum); _assert_(sl_input);
 
 			/*Potentially constrain nodes of this element*/
@@ -701,8 +701,8 @@
 			int      numnodes           = element->GetNumberOfNodes();
 			Gauss*   gauss              = element->NewGauss();
-			Input2*   H_input            = element->GetInput2(ThicknessEnum); _assert_(H_input);
-			Input2*   bed_input          = element->GetInput2(BedEnum); _assert_(bed_input);
-			Input2*   hab_fraction_input = element->GetInput2(CalvingHabFractionEnum); _assert_(hab_fraction_input);
-			Input2*   ls_input           = element->GetInput2(DistanceToCalvingfrontEnum); _assert_(ls_input);
+			Input*   H_input            = element->GetInput(ThicknessEnum); _assert_(H_input);
+			Input*   bed_input          = element->GetInput(BedEnum); _assert_(bed_input);
+			Input*   hab_fraction_input = element->GetInput(CalvingHabFractionEnum); _assert_(hab_fraction_input);
+			Input*   ls_input           = element->GetInput(DistanceToCalvingfrontEnum); _assert_(ls_input);
 
 			/*Potentially constrain nodes of this element*/
@@ -746,9 +746,9 @@
 			int      numnodes              = element->GetNumberOfNodes();
 			Gauss*   gauss                 = element->NewGauss();
-			Input2*   crevassedepth_input   = element->GetInput2(CrevasseDepthEnum); _assert_(crevassedepth_input);
-			Input2*   bed_input             = element->GetInput2(BedEnum); _assert_(bed_input);
-			Input2*   surface_crevasse_input = element->GetInput2(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);
-			Input2*   thickness_input       = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-			Input2*   surface_input         = element->GetInput2(SurfaceEnum); _assert_(surface_input);
+			Input*   crevassedepth_input   = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);
+			Input*   bed_input             = element->GetInput(BedEnum); _assert_(bed_input);
+			Input*   surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);
+			Input*   thickness_input       = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+			Input*   surface_input         = element->GetInput(SurfaceEnum); _assert_(surface_input);
 
 			/*First, look at ice front and figure out if any of the nodes will be calved*/
@@ -784,10 +784,10 @@
 				int      numnodes               = element->GetNumberOfNodes();
 				Gauss*   gauss                  = element->NewGauss();
-				Input2*   levelset_input         = element->GetInput2(DistanceToCalvingfrontEnum); _assert_(levelset_input);
-				Input2*   crevassedepth_input    = element->GetInput2(CrevasseDepthEnum); _assert_(crevassedepth_input);
-				Input2*   bed_input              = element->GetInput2(BedEnum); _assert_(bed_input);
-				Input2*   surface_crevasse_input = element->GetInput2(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);
-				Input2*   thickness_input        = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-				Input2*   surface_input          = element->GetInput2(SurfaceEnum); _assert_(surface_input);
+				Input*   levelset_input         = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input);
+				Input*   crevassedepth_input    = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);
+				Input*   bed_input              = element->GetInput(BedEnum); _assert_(bed_input);
+				Input*   surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);
+				Input*   thickness_input        = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+				Input*   surface_input          = element->GetInput(SurfaceEnum); _assert_(surface_input);
 
 				/*Is this element connected to a node that should be calved*/
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp	(revision 25379)
@@ -15,5 +15,5 @@
 	_error_("not needed!");
 }/*}}}*/
-void LoveAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void LoveAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/LoveAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 25379)
@@ -111,5 +111,5 @@
 	return 1;
 }/*}}}*/
-void MasstransportAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void MasstransportAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int    stabilization,finiteelement;
@@ -140,23 +140,23 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	if(isgroundingline) 	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	if(isgroundingline) 	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
 	/*Initialize cumdeltalthickness input*/
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelriseCumDeltathicknessEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelriseCumDeltathicknessEnum);
 	/*Initialize ThicknessResidual input*/
-	InputUpdateFromConstantx(inputs2,elements,0.,ThicknessResidualEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,ThicknessResidualEnum);
 
 	/*Get what we need for ocean-induced basal melting*/
@@ -165,8 +165,8 @@
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
 			break;
 		case LinearFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.perturbation_melting_rate",BasalforcingsPerturbationMeltingRateEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.perturbation_melting_rate",BasalforcingsPerturbationMeltingRateEnum,0.);
 			break;
 		case MismipFloatingMeltRateEnum:
@@ -175,15 +175,15 @@
 			break;
 		case SpatialLinearFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
 			break;
 		case BasalforcingsPicoEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);
 			break;
 		case BasalforcingsIsmip6Enum:{
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmip6MeltAnomalyEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmip6MeltAnomalyEnum,0.);
 			IssmDouble** array3d = NULL; int* Ms = NULL; int* Ns = NULL; int K;
 			iomodel->FetchData(&array3d,&Ms,&Ns,&K,"md.basalforcings.tf");
@@ -193,5 +193,5 @@
 				if(iomodel->domaintype!=Domain2DhorizontalEnum && !element->IsOnBase()) continue;
 				for(int kk=0;kk<K;kk++){
-					element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs2,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,7,kk);
+					element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,7,kk);
 				}
 			}
@@ -202,6 +202,6 @@
 			break;
 		case BeckmannGoosseFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
 			break;
 		default:
@@ -210,16 +210,16 @@
 
 	if(!issmb){
-		iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
 	}
 	if(stabilization==3){
-		iomodel->FetchDataToInput(inputs2,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
+		iomodel->FetchDataToInput(inputs,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element
 	}
 	if(stabilization==4){
-		iomodel->FetchDataToInput(inputs2,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties)
+		iomodel->FetchDataToInput(inputs,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties)
 	}
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 
@@ -318,8 +318,8 @@
 	element->FindParam(&domaintype,DomainTypeEnum);
 	element->FindParam(&stabilization,MasstransportStabilizationEnum);
-	Input2* vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);
-	Input2* vyaverage_input=NULL;
+	Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
+	Input* vyaverage_input=NULL;
 	if(dim==2){
-		vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);
+		vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
 	}
 
@@ -512,6 +512,6 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&domaintype,DomainTypeEnum);
-	Input2* vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input);
-	Input2* vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input);
+	Input* vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);
+	Input* vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -616,11 +616,11 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&stabilization,MasstransportStabilizationEnum);
-	Input2* gmb_input        = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
-	Input2* fmb_input        = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
-	Input2* gllevelset_input = element->GetInput2(MaskOceanLevelsetEnum);              _assert_(gllevelset_input);
-	Input2* ms_input         = element->GetInput2(SmbMassBalanceEnum);                       _assert_(ms_input);
-	Input2* thickness_input  = element->GetInput2(ThicknessEnum);                            _assert_(thickness_input);
-	Input2* vxaverage_input  = element->GetInput2(VxAverageEnum);										_assert_(vxaverage_input);
-	Input2* vyaverage_input  = element->GetInput2(VyAverageEnum);										_assert_(vyaverage_input);
+	Input* gmb_input        = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
+	Input* fmb_input        = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
+	Input* gllevelset_input = element->GetInput(MaskOceanLevelsetEnum);              _assert_(gllevelset_input);
+	Input* ms_input         = element->GetInput(SmbMassBalanceEnum);                       _assert_(ms_input);
+	Input* thickness_input  = element->GetInput(ThicknessEnum);                            _assert_(thickness_input);
+	Input* vxaverage_input  = element->GetInput(VxAverageEnum);										_assert_(vxaverage_input);
+	Input* vyaverage_input  = element->GetInput(VyAverageEnum);										_assert_(vyaverage_input);
 
 //	if(element->Id()==9){
@@ -730,9 +730,9 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum);
-	Input2* gmb_input        = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);
-	Input2* fmb_input        = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);
-	Input2* ms_input         = element->GetInput2(SmbMassBalanceEnum);                      _assert_(ms_input);
-	Input2* gllevelset_input = element->GetInput2(MaskOceanLevelsetEnum);             _assert_(gllevelset_input);
-	Input2* thickness_input  = element->GetInput2(ThicknessEnum);                           _assert_(thickness_input);
+	Input* gmb_input        = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);
+	Input* fmb_input        = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);
+	Input* ms_input         = element->GetInput(SmbMassBalanceEnum);                      _assert_(ms_input);
+	Input* gllevelset_input = element->GetInput(MaskOceanLevelsetEnum);             _assert_(gllevelset_input);
+	Input* thickness_input  = element->GetInput(ThicknessEnum);                           _assert_(thickness_input);
 
    /*Recover portion of element that is grounded*/
@@ -819,6 +819,6 @@
 		}
 	}
-	element->AddBasalInput2(ThicknessEnum,newthickness,element->GetElementType());
-	element->AddBasalInput2(ThicknessResidualEnum,thicknessresidual,element->GetElementType());
+	element->AddBasalInput(ThicknessEnum,newthickness,element->GetElementType());
+	element->AddBasalInput(ThicknessResidualEnum,thicknessresidual,element->GetElementType());
 	
 	xDelete<int>(doflist);
@@ -900,8 +900,8 @@
 
 	/*Add input to the element: */
-	element->AddBasalInput2(SurfaceEnum,newsurface,P1Enum);
-	element->AddBasalInput2(BaseEnum,newbase,P1Enum);
-	element->AddBasalInput2(SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum);
-	element->AddBasalInput2(SurfaceloadIceThicknessChangeEnum,deltathickness,P1Enum);
+	element->AddBasalInput(SurfaceEnum,newsurface,P1Enum);
+	element->AddBasalInput(BaseEnum,newbase,P1Enum);
+	element->AddBasalInput(SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum);
+	element->AddBasalInput(SurfaceloadIceThicknessChangeEnum,deltathickness,P1Enum);
 
 	/*Free ressources:*/
@@ -948,6 +948,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input);
-	Input2* vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input);
+	Input* vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input);
+	Input* vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1061,10 +1061,10 @@
 	element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum);
 	element->FindParam(&stabilization,MasstransportStabilizationEnum);
-	Input2* gmb_input        = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
-	Input2* fmb_input        = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
-	Input2* gllevelset_input = element->GetInput2(MaskOceanLevelsetEnum);              _assert_(gllevelset_input);
-	Input2* ms_input         = element->GetInput2(SmbMassBalanceEnum);                       _assert_(ms_input);
-	Input2* vxaverage_input  = element->GetInput2(VxAverageEnum);										_assert_(vxaverage_input);
-	Input2* vyaverage_input  = element->GetInput2(VyAverageEnum);										_assert_(vyaverage_input);
+	Input* gmb_input        = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);  _assert_(gmb_input);
+	Input* fmb_input        = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum);  _assert_(fmb_input);
+	Input* gllevelset_input = element->GetInput(MaskOceanLevelsetEnum);              _assert_(gllevelset_input);
+	Input* ms_input         = element->GetInput(SmbMassBalanceEnum);                       _assert_(ms_input);
+	Input* vxaverage_input  = element->GetInput(VxAverageEnum);										_assert_(vxaverage_input);
+	Input* vyaverage_input  = element->GetInput(VyAverageEnum);										_assert_(vyaverage_input);
 	
 	/*Recover portion of element that is grounded*/
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 25379)
@@ -37,5 +37,5 @@
 	return 1;
 }/*}}}*/
-void MeltingAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void MeltingAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Now, is the model 3d? otherwise, do nothing: */
@@ -47,5 +47,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -53,14 +53,14 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
 }/*}}}*/
 void MeltingAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp	(revision 25379)
@@ -3,5 +3,5 @@
 #include "../toolkits/toolkits.h"
 #include "../classes/classes.h"
-#include "../classes/Inputs2/TransientInput2.h"
+#include "../classes/Inputs/TransientInput.h"
 #include "../shared/shared.h"
 #include "../modules/modules.h"
@@ -20,5 +20,5 @@
 	return 1;
 }/*}}}*/
-void SealevelriseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void SealevelriseAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int geodetic=0;
@@ -30,5 +30,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -36,11 +36,11 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	iomodel->FetchData(&geodetic,"md.solidearth.settings.computesealevelchange");
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.surfaceload.icethicknesschange",SurfaceloadIceThicknessChangeEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.surfaceload.waterheightchange",SurfaceloadWaterHeightChangeEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.icethicknesschange",SurfaceloadIceThicknessChangeEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.surfaceload.waterheightchange",SurfaceloadWaterHeightChangeEnum);
 		
 	/*dynamic sea level: */
@@ -61,6 +61,6 @@
 
 		/*create transient input: */
-		inputs2->SetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,times,N);
-		TransientInput2* transientinput = inputs2->GetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
+		inputs->SetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,times,N);
+		TransientInput* transientinput = inputs->GetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
 		
 			
@@ -82,6 +82,6 @@
 
 		/*deal with dynamic sea level fields: */
-		iomodel->FetchDataToInput(inputs2,elements,"md.dsl.sea_surface_height_change_above_geoid", DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.dsl.sea_water_pressure_change_at_sea_floor", DslSeaWaterPressureChangeAtSeaFloorEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_surface_height_change_above_geoid", DslSeaSurfaceHeightChangeAboveGeoidEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_water_pressure_change_at_sea_floor", DslSeaWaterPressureChangeAtSeaFloorEnum);
 		
 	} /*}}}*/
@@ -111,5 +111,5 @@
 			for(int t=0;t<N;t++) times[t] = str[(M-1)*N+t];
 
-			TransientInput2* transientinput=inputs2->SetDatasetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,i, times,N);
+			TransientInput* transientinput=inputs->SetDatasetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum,i, times,N);
 			
 			for(int j=0;j<elements->Size();j++){
@@ -135,6 +135,6 @@
 		xDelete<int>(pN);
 		/*}}}*/
-		iomodel->FetchDataToInput(inputs2,elements,"md.dsl.sea_surface_height_change_above_geoid",DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.dsl.sea_water_pressure_change_at_sea_floor",DslSeaWaterPressureChangeAtSeaFloorEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_surface_height_change_above_geoid",DslSeaSurfaceHeightChangeAboveGeoidEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.dsl.sea_water_pressure_change_at_sea_floor",DslSeaWaterPressureChangeAtSeaFloorEnum);
 
 	} /*}}}*/
@@ -144,10 +144,10 @@
 
 	/*Initialize cumdeltalthickness and sealevel rise rate input*/
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelriseCumDeltathicknessEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelNEsaRateEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelUEsaRateEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelRSLRateEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelEustaticMaskEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,SealevelEustaticOceanMaskEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelriseCumDeltathicknessEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelNEsaRateEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelUEsaRateEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelRSLRateEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelEustaticMaskEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,SealevelEustaticOceanMaskEnum);
 
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 25379)
@@ -21,5 +21,5 @@
 	return 1;
 }/*}}}*/
-void SmbAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void SmbAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int    smb_model;
@@ -31,5 +31,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -40,38 +40,38 @@
 	switch(smb_model){
 		case SMBforcingEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);
 			break;
 		case SMBgembEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Ta",SmbTaEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.V",SmbVEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dswrf",SmbDswrfEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dlwrf",SmbDlwrfEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.P",SmbPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.eAir",SmbEAirEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.pAir",SmbPAirEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.zTop",SmbZTopEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dzTop",SmbDzTopEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dzMin",SmbDzMinEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.zY",SmbZYEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.zMax",SmbZMaxEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.zMin",SmbZMinEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tmean",SmbTmeanEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Vmean",SmbVmeanEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.C",SmbCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tz",SmbTzEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Vz",SmbVzEnum);
-			InputUpdateFromConstantx(inputs2,elements,false,SmbIsInitializedEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Dzini",SmbDziniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Dini",SmbDiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Reini",SmbReiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Gdnini",SmbGdniniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Gspini",SmbGspiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.ECini",SmbECiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Wini",SmbWiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Aini",SmbAiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tini",SmbTiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.Sizeini",SmbSizeiniEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.aValue",SmbAValueEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.teValue",SmbTeValueEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Ta",SmbTaEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.V",SmbVEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dswrf",SmbDswrfEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dlwrf",SmbDlwrfEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.P",SmbPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.eAir",SmbEAirEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.pAir",SmbPAirEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.zTop",SmbZTopEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dzTop",SmbDzTopEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dzMin",SmbDzMinEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.zY",SmbZYEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.zMax",SmbZMaxEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.zMin",SmbZMinEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Tmean",SmbTmeanEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Vmean",SmbVmeanEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.C",SmbCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Tz",SmbTzEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Vz",SmbVzEnum);
+			InputUpdateFromConstantx(inputs,elements,false,SmbIsInitializedEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Dzini",SmbDziniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Dini",SmbDiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Reini",SmbReiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Gdnini",SmbGdniniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Gspini",SmbGspiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.ECini",SmbECiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Wini",SmbWiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Aini",SmbAiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Tini",SmbTiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.Sizeini",SmbSizeiniEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.aValue",SmbAValueEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.teValue",SmbTeValueEnum);
 			break;
 		case SMBpddEnum:
@@ -79,30 +79,30 @@
 			iomodel->FindConstant(&ismungsm,"md.smb.ismungsm");
 			iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
-			iomodel->FetchDataToInput(inputs2,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0p",SmbS0pEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0p",SmbS0pEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0t",SmbS0tEnum);
 			if(isdelta18o || ismungsm){
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum);
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum);
 			}else{
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitation",SmbPrecipitationEnum);
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.precipitation",SmbPrecipitationEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);
 			}
 			if(issetpddfac){
-				iomodel->FetchDataToInput(inputs2,elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);
-				iomodel->FetchDataToInput(inputs2,elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);
 			}
 			break;
 		case SMBpddSicopolisEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0p",SmbS0pEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0p",SmbS0pEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0t",SmbS0tEnum);
 			iomodel->FindConstant(&isfirnwarming,"md.smb.isfirnwarming");
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.smb_corr",SmbSmbCorrEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitation_anomaly",SmbPrecipitationsAnomalyEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperature_anomaly",SmbTemperaturesAnomalyEnum);
-			iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);
-			iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitation",SmbPrecipitationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.smb_corr",SmbSmbCorrEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.precipitation_anomaly",SmbPrecipitationsAnomalyEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.temperature_anomaly",SmbTemperaturesAnomalyEnum);
+			iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);
+			iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.precipitation",SmbPrecipitationEnum);
 			break;
 		case SMBd18opddEnum:
@@ -112,10 +112,10 @@
 			iomodel->FindConstant(&isd18opd,"md.smb.isd18opd");
 			iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac");
-			iomodel->FetchDataToInput(inputs2,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0p",SmbS0pEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0p",SmbS0pEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0t",SmbS0tEnum);
 			if(isd18opd){
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
-				iomodel->FetchDataToDatasetInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);
+				iomodel->FetchDataToDatasetInput(inputs,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);
 				if(!istemperaturescaled){
 					/*Fetch array*/
@@ -131,5 +131,5 @@
 					for(int i=0;i<elements->Size();i++){
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-						element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs2,iomodel,SmbTemperaturesReconstructedEnum);
+						element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs,iomodel,SmbTemperaturesReconstructedEnum);
 					}
 					xDelete<int>(ids);
@@ -149,5 +149,5 @@
 					for(int i=0;i<elements->Size();i++){
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-						element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs2,iomodel,SmbPrecipitationsReconstructedEnum);
+						element->DatasetInputCreate(doublearray,M-1,N,ids,N,inputs,iomodel,SmbPrecipitationsReconstructedEnum);
 					}
 					xDelete<int>(ids);
@@ -156,34 +156,34 @@
 			}
 			if(issetpddfac){
-				iomodel->FetchDataToInput(inputs2,elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);
-				iomodel->FetchDataToInput(inputs2,elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);
+				iomodel->FetchDataToInput(inputs,elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);
 			}
 			break;
 		case SMBgradientsEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.href",SmbHrefEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.smbref",SmbSmbrefEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_pos",SmbBPosEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_neg",SmbBNegEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.href",SmbHrefEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.smbref",SmbSmbrefEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.b_pos",SmbBPosEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.b_neg",SmbBNegEnum);
 			break;
 		case SMBgradientselaEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.ela",SmbElaEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_pos",SmbBPosEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_neg",SmbBNegEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_max",SmbBMaxEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_min",SmbBMinEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.ela",SmbElaEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.b_pos",SmbBPosEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.b_neg",SmbBNegEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.b_max",SmbBMaxEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.b_min",SmbBMinEnum);
 			break;
 		case SMBhenningEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.smbref",SmbSmbrefEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.smbref",SmbSmbrefEnum,0.);
 			break;
 		case SMBcomponentsEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.accumulation",SmbAccumulationEnum,0.);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.evaporation",SmbEvaporationEnum,0.);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.runoff",SmbRunoffEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.accumulation",SmbAccumulationEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.evaporation",SmbEvaporationEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.runoff",SmbRunoffEnum,0.);
 			break;
 		case SMBmeltcomponentsEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.accumulation",SmbAccumulationEnum,0.);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.evaporation",SmbEvaporationEnum,0.);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.melt",SmbMeltEnum,0.);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.refreeze",SmbRefreezeEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.accumulation",SmbAccumulationEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.evaporation",SmbEvaporationEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.melt",SmbMeltEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.refreeze",SmbRefreezeEnum,0.);
 			break;
 		case SMBgradientscomponentsEnum:
@@ -191,15 +191,15 @@
 			break;
 		case SMBsemicEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0gcm",SmbS0gcmEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailysnowfall",SmbDailysnowfallEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailyrainfall",SmbDailyrainfallEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailydsradiation",SmbDailydsradiationEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailydlradiation",SmbDailydlradiationEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailywindspeed",SmbDailywindspeedEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailypressure",SmbDailypressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailyairdensity",SmbDailyairdensityEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailyairhumidity",SmbDailyairhumidityEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailytemperature",SmbDailytemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.s0gcm",SmbS0gcmEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailysnowfall",SmbDailysnowfallEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailyrainfall",SmbDailyrainfallEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailydsradiation",SmbDailydsradiationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailydlradiation",SmbDailydlradiationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailywindspeed",SmbDailywindspeedEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailypressure",SmbDailypressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailyairdensity",SmbDailyairdensityEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailyairhumidity",SmbDailyairhumidityEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.smb.dailytemperature",SmbDailytemperatureEnum);
 			break;
 		default:
Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 	return 1;
 }/*}}}*/
-void SmoothAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void SmoothAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Update elements: */
@@ -25,5 +25,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
@@ -70,5 +70,5 @@
 	element->FindParam(&l,SmoothThicknessMultiplierEnum); _assert_(l>0.);
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
 
 	/* Start looping on the number of gaussian points: */
@@ -116,8 +116,8 @@
 	IssmDouble  Jdet,value;
 	IssmDouble *xyz_list  = NULL;
-	Input2     *input = NULL;
+	Input     *input = NULL;
 
 	/*SPECIFICS: Driving stress for balance velocities*/
-	Input2*      H_input = NULL, *surface_input = NULL, *vx_input = NULL, *vy_input = NULL;
+	Input*      H_input = NULL, *surface_input = NULL, *vx_input = NULL, *vy_input = NULL;
 	IssmDouble  taud_x,norms,normv,vx,vy;
 	IssmDouble  rho_ice,gravity,slope[2],thickness;
@@ -139,16 +139,16 @@
 			rho_ice       = element->FindParam(MaterialsRhoIceEnum);
 			gravity       = element->FindParam(ConstantsGEnum);
-			H_input       = element->GetInput2(ThicknessEnum); _assert_(H_input);
-			surface_input = element->GetInput2(SurfaceEnum);   _assert_(surface_input);
-			vx_input      = element->GetInput2(VxEnum);
-			vy_input      = element->GetInput2(VyEnum);
+			H_input       = element->GetInput(ThicknessEnum); _assert_(H_input);
+			surface_input = element->GetInput(SurfaceEnum);   _assert_(surface_input);
+			vx_input      = element->GetInput(VxEnum);
+			vy_input      = element->GetInput(VyEnum);
 			}
 			break;
 		case SurfaceSlopeXEnum:
 		case SurfaceSlopeYEnum:{
-			surface_input = element->GetInput2(SurfaceEnum);   _assert_(surface_input);
-			}
-			break;
-		default: input = element->GetInput2(input_enum);
+			surface_input = element->GetInput(SurfaceEnum);   _assert_(surface_input);
+			}
+			break;
+		default: input = element->GetInput(input_enum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 25379)
@@ -670,5 +670,5 @@
 	return numdofs;
 }/*}}}*/
-void StressbalanceAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void StressbalanceAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Intermediaries*/
@@ -741,9 +741,9 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]);
 
 			/*Need to know the type of approximation for this element*/
 			if(iomodel->Data("md.flowequation.element_equation")){
-				inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
+				inputs->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
 			}
 
@@ -753,29 +753,29 @@
 
 	/*Create inputs: */
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.);
-	iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);
 	#ifdef LATERALFRICTION
-	iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);
 	#endif
 
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
 	}
 	if(iomodel->domaintype==Domain3DEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.flowequation.borderFS",FlowequationBorderFSEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcez",LoadingforceZEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum,0.);
+		iomodel->FetchDataToInput(inputs,elements,"md.flowequation.borderFS",FlowequationBorderFSEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.stressbalance.loadingforcez",LoadingforceZEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum,0.);
 	}
 	if(isFS){
-		iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum,0.);
+		iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum,0.);
 
 		/*Add basal forcings to compute melt rate*/
@@ -784,5 +784,5 @@
 		switch(basalforcing_model){
 			case FloatingMeltRateEnum:
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
 				break;
 			case LinearFloatingMeltRateEnum:
@@ -793,18 +793,18 @@
 				break;
 			case SpatialLinearFloatingMeltRateEnum:
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
 				break;
 			case BasalforcingsPicoEnum:
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.overturning_coeff",BasalforcingsPicoOverturningCoeffEnum);
 				break;
 			case BasalforcingsIsmip6Enum:
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
 				break;
 			case BeckmannGoosseFloatingMeltRateEnum:
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
-				iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
 				break;
 			default:
@@ -815,5 +815,5 @@
 	iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS");
 	if(fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum){
-		InputUpdateFromConstantx(inputs2,elements,0.,SigmaNNEnum);
+		InputUpdateFromConstantx(inputs,elements,0.,SigmaNNEnum);
 	}
 
@@ -822,83 +822,83 @@
 		case 1:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if(FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 2:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 3:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.As",FrictionAsEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if(FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 4:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
 			break;
 		case 5:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 7:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if(FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 
 			}
 			break;
 		case 9:
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
-			InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum);
-			InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
+			InputUpdateFromConstantx(inputs,elements,1.,FrictionPEnum);
+			InputUpdateFromConstantx(inputs,elements,1.,FrictionQEnum);
 			break;
 		case 10:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.watercolumn",WatercolumnEnum,0.);
 			break;
 		case 11:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.Cmax",FrictionCmaxEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.Cmax",FrictionCmaxEnum);
 			break;
 		case 12:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.f",FrictionfEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.f",FrictionfEnum);
 			break;
 		default:
@@ -907,5 +907,5 @@
 
 #ifdef _HAVE_ANDROID_
-	inputs2->DuplicateInput(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
+	inputs->DuplicateInput(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);
 #endif
 
@@ -1086,5 +1086,5 @@
 
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	switch(approximation){
 		case FSApproximationEnum:
@@ -1099,5 +1099,5 @@
 
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	switch(approximation){
 		case SSAApproximationEnum:
@@ -1115,5 +1115,5 @@
 ElementMatrix* StressbalanceAnalysis::CreateKMatrix(Element* element){/*{{{*/
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	switch(approximation){
 		case SIAApproximationEnum:
@@ -1142,5 +1142,5 @@
 
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	switch(approximation){
 		case SIAApproximationEnum:
@@ -1169,5 +1169,5 @@
 
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	switch(approximation){
 		case FSApproximationEnum: case NoneApproximationEnum:
@@ -1205,5 +1205,5 @@
 	int numnodes = element->GetNumberOfNodes();
 	int numdof   = numnodes*dofpernode;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 
 	/*Fetch dof list and allocate solution vector*/
@@ -1212,7 +1212,7 @@
 
 	/*Get inputs*/
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=NULL;
-	if(domaintype!=Domain2DverticalEnum){vy_input=element->GetInput2(VyEnum); _assert_(vy_input);}
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=NULL;
+	if(domaintype!=Domain2DverticalEnum){vy_input=element->GetInput(VyEnum); _assert_(vy_input);}
 
 	/*Ok, we have vx and vy in values, fill in vx and vy arrays: */
@@ -1243,5 +1243,5 @@
 
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	switch(approximation){
 		case FSApproximationEnum: case NoneApproximationEnum:
@@ -1314,7 +1314,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* thickness_input = basalelement->GetInput2(ThicknessEnum);_assert_(thickness_input);
-	Input2* vx_input        = basalelement->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2* vy_input        = basalelement->GetInput2(VyEnum);       _assert_(vy_input);
+	Input* thickness_input = basalelement->GetInput(ThicknessEnum);_assert_(thickness_input);
+	Input* vx_input        = basalelement->GetInput(VxEnum);       _assert_(vx_input);
+	Input* vy_input        = basalelement->GetInput(VyEnum);       _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1433,6 +1433,6 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum);
-	Input2* surface_input    = element->GetInput2(SurfaceEnum); _assert_(surface_input);
-	Input2* gllevelset_input = NULL;
+	Input* surface_input    = element->GetInput(SurfaceEnum); _assert_(surface_input);
+	Input* gllevelset_input = NULL;
 
 	/*build friction object, used later on: */
@@ -1442,5 +1442,5 @@
 	if(!(friction_style==SubelementFriction2Enum)) phi=element->GetGroundedPortion(xyz_list);
 	if(friction_style==SubelementFriction2Enum){
-		gllevelset_input=element->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+		gllevelset_input=element->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
 		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
 	   gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
@@ -1528,5 +1528,5 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GetLevelCoordinates(&xyz_list_boundary,xyz_list,MeshVertexonboundaryEnum,1.);
-	Input2* icelevelset_input = element->GetInput2(MaskIceLevelsetEnum); _assert_(icelevelset_input);
+	Input* icelevelset_input = element->GetInput(MaskIceLevelsetEnum); _assert_(icelevelset_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -1590,9 +1590,9 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* vx_input=element->GetInput2(VxEnum);               _assert_(vx_input);
-	Input2* vy_input    = NULL;
+	Input* thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input=element->GetInput(VxEnum);               _assert_(vx_input);
+	Input* vy_input    = NULL;
 	if(dim==2){
-		vy_input    = element->GetInput2(VyEnum);       _assert_(vy_input);
+		vy_input    = element->GetInput(VyEnum);       _assert_(vy_input);
 	}
 
@@ -1707,6 +1707,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2*     thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2*     surface_input  =element->GetInput2(SurfaceEnum);   _assert_(surface_input);
+	Input*     thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input*     surface_input  =element->GetInput(SurfaceEnum);   _assert_(surface_input);
 	IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum);
 
@@ -1771,7 +1771,7 @@
 
 	/*Retrieve all inputs and parameters*/
-	Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* base_input       = element->GetInput2(BaseEnum);       _assert_(base_input);
-	Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* base_input       = element->GetInput(BaseEnum);       _assert_(base_input);
+	Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
 	IssmDouble rho_water   = element->FindParam(MaterialsRhoSeawaterEnum);
 	IssmDouble rho_ice     = element->FindParam(MaterialsRhoIceEnum);
@@ -1968,5 +1968,5 @@
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 	xDelete<IssmDouble>(pressure);
 	xDelete<IssmDouble>(thickness);
@@ -2027,7 +2027,7 @@
 
 	/*Add vx and vy as inputs to the tria element: */
-	element->AddBasalInput2(VxEnum,vx,element->GetElementType());
-	if(dim==2)element->AddBasalInput2(VyEnum,vy,element->GetElementType());
-	element->AddBasalInput2(VelEnum,vel,element->GetElementType());
+	element->AddBasalInput(VxEnum,vx,element->GetElementType());
+	if(dim==2)element->AddBasalInput(VyEnum,vy,element->GetElementType());
+	element->AddBasalInput(VelEnum,vel,element->GetElementType());
 
 	/*Free ressources:*/
@@ -2089,7 +2089,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input);
-	Input2* vx_input      = element->GetInput2(VxEnum);      _assert_(vx_input);
-	Input2* vy_input      = element->GetInput2(VyEnum);      _assert_(vy_input);
+	Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);
+	Input* vx_input      = element->GetInput(VxEnum);      _assert_(vx_input);
+	Input* vy_input      = element->GetInput(VyEnum);      _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -2176,6 +2176,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2*     thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2*     surface_input  =element->GetInput2(SurfaceEnum);   _assert_(surface_input);
+	Input*     thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input*     surface_input  =element->GetInput(SurfaceEnum);   _assert_(surface_input);
 	IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum);
 
@@ -2227,7 +2227,7 @@
 
 	/*Retrieve all inputs and parameters*/
-	Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* base_input       = element->GetInput2(BaseEnum);       _assert_(base_input);
-	Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* base_input       = element->GetInput(BaseEnum);       _assert_(base_input);
+	Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
 	IssmDouble rho_water   = element->FindParam(MaterialsRhoSeawaterEnum);
 	IssmDouble rho_ice     = element->FindParam(MaterialsRhoIceEnum);
@@ -2297,5 +2297,5 @@
 		for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]);
 	}
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 	xDelete<IssmDouble>(pressure);
 	xDelete<IssmDouble>(thickness);
@@ -2350,7 +2350,7 @@
 
 	/*Add vx and vy as inputs to the tria element: */
-	element->AddBasalInput2(VxEnum,vx,element->GetElementType());
-	element->AddBasalInput2(VyEnum,vy,element->GetElementType());
-	element->AddBasalInput2(VelEnum,vel,element->GetElementType());
+	element->AddBasalInput(VxEnum,vx,element->GetElementType());
+	element->AddBasalInput(VyEnum,vy,element->GetElementType());
+	element->AddBasalInput(VelEnum,vel,element->GetElementType());
 
 	/*Free ressources:*/
@@ -2386,6 +2386,6 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
+	Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -2472,5 +2472,5 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum);
-	Input2* gllevelset_input = NULL;
+	Input* gllevelset_input = NULL;
 
 	/*build friction object, used later on: */
@@ -2480,5 +2480,5 @@
 	if(!(friction_style==SubelementFriction2Enum)) phi=element->GetGroundedPortion(xyz_list_base);
 	if(friction_style==SubelementFriction2Enum){
-		gllevelset_input=element->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+		gllevelset_input=element->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
 		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
 		gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
@@ -2556,8 +2556,8 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input    = element->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2* vy_input    = NULL;
+	Input* vx_input    = element->GetInput(VxEnum);       _assert_(vx_input);
+	Input* vy_input    = NULL;
 	if(dim==3){
-		vy_input=element->GetInput2(VyEnum);          _assert_(vy_input);
+		vy_input=element->GetInput(VyEnum);          _assert_(vy_input);
 	}
 
@@ -2704,5 +2704,5 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2*     surface_input = element->GetInput2(SurfaceEnum);   _assert_(surface_input);
+	Input*     surface_input = element->GetInput(SurfaceEnum);   _assert_(surface_input);
 	IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum);
 
@@ -2760,6 +2760,6 @@
 
 	/*Retrieve all inputs and parameters*/
-	Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input);
-	Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
+	Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);
+	Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
 	IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum);
 	IssmDouble rho_ice   = element->FindParam(MaterialsRhoIceEnum);
@@ -2965,5 +2965,5 @@
 		default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");
 	}
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 	xDelete<IssmDouble>(pressure);
 	xDelete<IssmDouble>(surface);
@@ -3010,7 +3010,7 @@
 
 	/*Add vx and vy as inputs to the element: */
-	element->AddInput2(VxEnum,vx,element->GetElementType());
-	if(dim==3)element->AddInput2(VyEnum,vy,element->GetElementType());
-	element->AddInput2(VelEnum,vel,element->GetElementType());
+	element->AddInput(VxEnum,vx,element->GetElementType());
+	if(dim==3)element->AddInput(VyEnum,vy,element->GetElementType());
+	element->AddInput(VelEnum,vel,element->GetElementType());
 
 	/*Free ressources:*/
@@ -3078,7 +3078,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input);
+	Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input = element->GetInput(VzEnum); _assert_(vz_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3168,5 +3168,5 @@
 	/*If on not water or not FS, skip stiffness: */
 	int approximation,shelf_dampening;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
 	element->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum);
@@ -3201,5 +3201,5 @@
 	IssmDouble  rho_water     = element->FindParam(MaterialsRhoSeawaterEnum);
 	IssmDouble  gravity       = element->FindParam(ConstantsGEnum);
-	Input2*      base_input = element->GetInput2(BaseEnum); _assert_(base_input);
+	Input*      base_input = element->GetInput(BaseEnum); _assert_(base_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3259,8 +3259,8 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input = NULL;
-	if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input = NULL;
+	if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 	/* Start  looping on the number of gaussian points: */
@@ -3409,8 +3409,8 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	//element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input = NULL;
-	if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input = NULL;
+	if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 
@@ -3483,8 +3483,8 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input = element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input = NULL;
-	if(dim==3){vz_input = element->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input = element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input = element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input = NULL;
+	if(dim==3){vz_input = element->GetInput(VzEnum); _assert_(vz_input);}
 
 	/* Start  looping on the number of gaussian points: */
@@ -3608,8 +3608,8 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input;
-	if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input;
+	if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 	/* Start  looping on the number of gaussian points: */
@@ -3650,5 +3650,5 @@
 	/*If on water or not FS, skip stiffness: */
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
 
@@ -3677,8 +3677,8 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input         = element->GetInput2(VxEnum);      _assert_(vx_input);
-	Input2* vy_input         = element->GetInput2(VyEnum);      _assert_(vy_input);
-	Input2* vz_input         = NULL;
-	if(dim==3){    vz_input = element->GetInput2(VzEnum);      _assert_(vz_input);}
+	Input* vx_input         = element->GetInput(VxEnum);      _assert_(vx_input);
+	Input* vy_input         = element->GetInput(VyEnum);      _assert_(vy_input);
+	Input* vz_input         = NULL;
+	if(dim==3){    vz_input = element->GetInput(VzEnum);      _assert_(vz_input);}
 
 	/* Start  looping on the number of gaussian points: */
@@ -3755,5 +3755,5 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
-	Input2*  alpha2_input=element->GetInput2(FrictionCoefficientEnum); _assert_(alpha2_input);
+	Input*  alpha2_input=element->GetInput(FrictionCoefficientEnum); _assert_(alpha2_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3809,7 +3809,7 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
-	Input2*  sigmann_input=element->GetInput2(VzEnum); _assert_(sigmann_input);
-	Input2*  sigmant_input=element->GetInput2(TemperatureEnum); _assert_(sigmant_input);
-	Input2*  bedslope_input=element->GetInput2(BedSlopeXEnum);     _assert_(bedslope_input);
+	Input*  sigmann_input=element->GetInput(VzEnum); _assert_(sigmann_input);
+	Input*  sigmant_input=element->GetInput(TemperatureEnum); _assert_(sigmant_input);
+	Input*  bedslope_input=element->GetInput(BedSlopeXEnum);     _assert_(bedslope_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3926,5 +3926,5 @@
 	/*If on water or not FS, skip stiffness: */
 	int approximation;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL;
 
@@ -3954,5 +3954,5 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum);
-	Input2* gllevelset_input = NULL;
+	Input* gllevelset_input = NULL;
 
 	/*build friction object, used later on: */
@@ -3963,5 +3963,5 @@
 	if(friction_style==SubelementFriction2Enum){
 		if(domaintype==Domain2DverticalEnum) _error_("Subelement Friction 2 not implemented yet for Flowline");
-		gllevelset_input=element->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+		gllevelset_input=element->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
 		element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating);
 		//gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2);
@@ -4095,9 +4095,9 @@
 	IssmDouble  rho_ice =element->FindParam(MaterialsRhoIceEnum);
 	IssmDouble  gravity =element->FindParam(ConstantsGEnum);
-	Input2*      loadingforcex_input=element->GetInput2(LoadingforceXEnum);  _assert_(loadingforcex_input);
-	Input2*      loadingforcey_input=element->GetInput2(LoadingforceYEnum);  _assert_(loadingforcey_input);
-	Input2*      loadingforcez_input=NULL;
+	Input*      loadingforcex_input=element->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
+	Input*      loadingforcey_input=element->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
+	Input*      loadingforcez_input=NULL;
 	if(dim==3){
-		loadingforcez_input=element->GetInput2(LoadingforceZEnum);  _assert_(loadingforcez_input);
+		loadingforcez_input=element->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
 	}
 
@@ -4173,6 +4173,6 @@
 	element->GetIcefrontCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum);
 	element->NormalSection(&normal[0],xyz_list_front);
-	Input2* surface_input  = element->GetInput2(SurfaceEnum); _assert_(surface_input);
-	Input2* sealevel_input       = element->GetInput2(SealevelEnum);       _assert_(sealevel_input);
+	Input* surface_input  = element->GetInput(SurfaceEnum); _assert_(surface_input);
+	Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
 	IssmDouble  rho_water = element->FindParam(MaterialsRhoSeawaterEnum);
 	IssmDouble  gravity   = element->FindParam(ConstantsGEnum);
@@ -4242,5 +4242,5 @@
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
-	Input2*      base_input=element->GetInput2(BaseEnum); _assert_(base_input);
+	Input*      base_input=element->GetInput(BaseEnum); _assert_(base_input);
 	IssmDouble  rho_water=element->FindParam(MaterialsRhoSeawaterEnum);
 	IssmDouble  gravity  =element->FindParam(ConstantsGEnum);
@@ -4266,5 +4266,5 @@
 	element->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum);
 	if(shelf_dampening) {
-		Input2*      mb_input=element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(mb_input);
+		Input*      mb_input=element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(mb_input);
 		IssmDouble  dt,mb;
 		element->FindParam(&dt,TimesteppingTimeStepEnum);
@@ -4317,6 +4317,6 @@
 
 	/*Get pressure and sigmann*/
-	Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input);
-	Input2* sigmann_input =element->GetInput2(SigmaNNEnum);  _assert_(sigmann_input);
+	Input* pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);
+	Input* sigmann_input =element->GetInput(SigmaNNEnum);  _assert_(sigmann_input);
 
 	gauss=element->NewGauss(5);
@@ -4410,19 +4410,19 @@
 
 	/*Get d and tau*/
-	Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input);
-	Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input);
-	Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input);
-	Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL;
-	Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
-	Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
-	Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
-	Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL;
+	Input* epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);
+	Input* epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);
+	Input* epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);
+	Input* epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;
+	Input* sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
+	Input* sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
+	Input* sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
+	Input* sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;
 	if(dim==3){
-		epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input);
-		epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input);
-		epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input);
-		sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
-		sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
-		sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
+		epszz_input=element->GetInput(StrainRatezzEnum); _assert_(epszz_input);
+		epsxz_input=element->GetInput(StrainRatexzEnum); _assert_(epsxz_input);
+		epsyz_input=element->GetInput(StrainRateyzEnum); _assert_(epsyz_input);
+		sigmapzz_input=element->GetInput(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
+		sigmapxz_input=element->GetInput(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
+		sigmapyz_input=element->GetInput(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
 	}
 
@@ -5086,5 +5086,5 @@
 	int*         vdoflist=NULL;
 	int*         pdoflist=NULL;
-	Input2*       vz_input=NULL;
+	Input*       vz_input=NULL;
 	int          dim;
 	IssmDouble   vx,vy,vz,p;
@@ -5108,8 +5108,8 @@
 	element->GetDofListVelocity(&vdoflist,GsetEnum);
 	element->GetDofListPressure(&pdoflist,GsetEnum);
-	Input2*     vx_input=element->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2*     vy_input=element->GetInput2(VyEnum);       _assert_(vy_input);
-	if(dim==3){vz_input=element->GetInput2(VzEnum);       _assert_(vz_input);}
-	Input2*     p_input =element->GetInput2(PressureEnum); _assert_(p_input);
+	Input*     vx_input=element->GetInput(VxEnum);       _assert_(vx_input);
+	Input*     vy_input=element->GetInput(VyEnum);       _assert_(vy_input);
+	if(dim==3){vz_input=element->GetInput(VzEnum);       _assert_(vz_input);}
+	Input*     p_input =element->GetInput(PressureEnum); _assert_(p_input);
 
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
@@ -5169,8 +5169,8 @@
 		/*Get inputs and parameters*/
 		element->GetVerticesCoordinates(&xyz_list);
-		Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-		Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
-		Input2* vz_input;
-		if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+		Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+		Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+		Input* vz_input;
+		if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 		/*Allocate new inputs*/
@@ -5211,11 +5211,11 @@
 
 		/*Add inputs*/
-		element->AddInput2(StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput2(DeviatoricStressxxEnum,sigmapxx,P1DGEnum);
-		element->AddInput2(StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput2(DeviatoricStressyyEnum,sigmapyy,P1DGEnum);
-		element->AddInput2(StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput2(DeviatoricStressxyEnum,sigmapxy,P1DGEnum);
+		element->AddInput(StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput(DeviatoricStressxxEnum,sigmapxx,P1DGEnum);
+		element->AddInput(StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput(DeviatoricStressyyEnum,sigmapyy,P1DGEnum);
+		element->AddInput(StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput(DeviatoricStressxyEnum,sigmapxy,P1DGEnum);
 		if(dim==3){
-			element->AddInput2(StrainRatezzEnum,epszz,P1DGEnum); element->AddInput2(DeviatoricStresszzEnum,sigmapzz,P1DGEnum);
-			element->AddInput2(StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput2(DeviatoricStressxzEnum,sigmapxz,P1DGEnum);
-			element->AddInput2(StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput2(DeviatoricStressyzEnum,sigmapyz,P1DGEnum);
+			element->AddInput(StrainRatezzEnum,epszz,P1DGEnum); element->AddInput(DeviatoricStresszzEnum,sigmapzz,P1DGEnum);
+			element->AddInput(StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput(DeviatoricStressxzEnum,sigmapxz,P1DGEnum);
+			element->AddInput(StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput(DeviatoricStressyzEnum,sigmapyz,P1DGEnum);
 		}
 
@@ -5303,9 +5303,9 @@
 	if(v_interp==P1bubbleEnum) v_interp=P1Enum;
 	if(v_interp == P1bubblecondensedEnum) v_interp = P1Enum;
-	element->AddInput2(VxEnum, vx, v_interp);
-	element->AddInput2(VyEnum, vy, v_interp);
-	element->AddInput2(VelEnum,vel,v_interp);
-	if(pnumdof>0) element->AddInput2(PressureEnum,pressure,element->PressureInterpolation());
-	if(dim==3) element->AddInput2(VzEnum,vz,v_interp);
+	element->AddInput(VxEnum, vx, v_interp);
+	element->AddInput(VyEnum, vy, v_interp);
+	element->AddInput(VelEnum,vel,v_interp);
+	if(pnumdof>0) element->AddInput(PressureEnum,pressure,element->PressureInterpolation());
+	if(dim==3) element->AddInput(VzEnum,vz,v_interp);
 
 	/*Free ressources:*/
@@ -5341,10 +5341,10 @@
 		/*Get inputs and parameters*/
 		element->GetVerticesCoordinates(&xyz_list);
-		Input2*  B_input=element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
-		Input2*  n_input=element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input);
-		Input2* vx_input=element->GetInput2(VxEnum);                 _assert_(vx_input);
-		Input2* vy_input=element->GetInput2(VyEnum);                 _assert_(vy_input);
-		Input2* vz_input;
-		if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+		Input*  B_input=element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
+		Input*  n_input=element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
+		Input* vx_input=element->GetInput(VxEnum);                 _assert_(vx_input);
+		Input* vy_input=element->GetInput(VyEnum);                 _assert_(vy_input);
+		Input* vz_input;
+		if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 		/*Fetch number of nodes and dof for this finite element*/
@@ -5365,23 +5365,23 @@
 
 		/*Get previous d*/
-		Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input);
-		Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input);
-		Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input);
-		Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL;
+		Input* epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);
+		Input* epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);
+		Input* epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);
+		Input* epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;
 		if(dim==3){
-			epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input);
-			epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input);
-			epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input);
+			epszz_input=element->GetInput(StrainRatezzEnum); _assert_(epszz_input);
+			epsxz_input=element->GetInput(StrainRatexzEnum); _assert_(epsxz_input);
+			epsyz_input=element->GetInput(StrainRateyzEnum); _assert_(epsyz_input);
 		}
 
 		/*Get tau*/
-		Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
-		Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
-		Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
-		Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL;
+		Input* sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
+		Input* sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
+		Input* sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
+		Input* sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;
 		if(dim==3){
-			sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
-			sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
-			sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
+			sigmapzz_input=element->GetInput(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
+			sigmapxz_input=element->GetInput(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
+			sigmapyz_input=element->GetInput(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
 		}
 
@@ -5497,7 +5497,7 @@
 			for(int i=0;i<3;i++) _assert_(!xIsNan<IssmDouble>(d_yy[i]));
 			for(int i=0;i<3;i++) _assert_(!xIsNan<IssmDouble>(d_xx[i]));
-			element->AddInput2(StrainRatexxEnum,d_xx,P1DGEnum);
-			element->AddInput2(StrainRateyyEnum,d_yy,P1DGEnum);
-			element->AddInput2(StrainRatexyEnum,d_xy,P1DGEnum);
+			element->AddInput(StrainRatexxEnum,d_xx,P1DGEnum);
+			element->AddInput(StrainRateyyEnum,d_yy,P1DGEnum);
+			element->AddInput(StrainRatexyEnum,d_xy,P1DGEnum);
 		}
 		else{
@@ -5512,10 +5512,10 @@
 			Matrix4x4Solve(&d_xz[0],Ke,pe_xz);
 			Matrix4x4Solve(&d_yz[0],Ke,pe_yz);
-			element->AddInput2(StrainRatexxEnum,d_xx,P1DGEnum);
-			element->AddInput2(StrainRateyyEnum,d_yy,P1DGEnum);
-			element->AddInput2(StrainRatexyEnum,d_xy,P1DGEnum);
-			element->AddInput2(StrainRatezzEnum,d_zz,P1DGEnum);
-			element->AddInput2(StrainRatexzEnum,d_xz,P1DGEnum);
-			element->AddInput2(StrainRateyzEnum,d_yz,P1DGEnum);
+			element->AddInput(StrainRatexxEnum,d_xx,P1DGEnum);
+			element->AddInput(StrainRateyyEnum,d_yy,P1DGEnum);
+			element->AddInput(StrainRatexyEnum,d_xy,P1DGEnum);
+			element->AddInput(StrainRatezzEnum,d_zz,P1DGEnum);
+			element->AddInput(StrainRatexzEnum,d_xz,P1DGEnum);
+			element->AddInput(StrainRateyzEnum,d_yz,P1DGEnum);
 		}
 
@@ -5554,29 +5554,29 @@
 		/*Get inputs and parameters*/
 		element->GetVerticesCoordinates(&xyz_list);
-		Input2* vx_input=element->GetInput2(VxEnum);                 _assert_(vx_input);
-		Input2* vy_input=element->GetInput2(VyEnum);                 _assert_(vy_input);
-		Input2* vz_input=NULL;
-		if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+		Input* vx_input=element->GetInput(VxEnum);                 _assert_(vx_input);
+		Input* vy_input=element->GetInput(VyEnum);                 _assert_(vy_input);
+		Input* vz_input=NULL;
+		if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 		/*Get previous tau*/
-		Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
-		Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
-		Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
-		Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL;
+		Input* sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);
+		Input* sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);
+		Input* sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);
+		Input* sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;
 		if(dim==3){
-			sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
-			sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
-			sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
+			sigmapzz_input=element->GetInput(DeviatoricStresszzEnum); _assert_(sigmapzz_input);
+			sigmapxz_input=element->GetInput(DeviatoricStressxzEnum); _assert_(sigmapxz_input);
+			sigmapyz_input=element->GetInput(DeviatoricStressyzEnum); _assert_(sigmapyz_input);
 		}
 
 		/*Get NEW d*/
-		Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input);
-		Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input);
-		Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input);
-		Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL;
+		Input* epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);
+		Input* epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);
+		Input* epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);
+		Input* epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;
 		if(dim==3){
-			epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input);
-			epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input);
-			epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input);
+			epszz_input=element->GetInput(StrainRatezzEnum); _assert_(epszz_input);
+			epsxz_input=element->GetInput(StrainRatexzEnum); _assert_(epsxz_input);
+			epsyz_input=element->GetInput(StrainRateyzEnum); _assert_(epsyz_input);
 		}
 
@@ -5647,11 +5647,11 @@
 
 		/*Add inputs*/
-		element->AddInput2(DeviatoricStressxxEnum,tau_xx,P1DGEnum);
-		element->AddInput2(DeviatoricStressyyEnum,tau_yy,P1DGEnum);
-		element->AddInput2(DeviatoricStressxyEnum,tau_xy,P1DGEnum);
+		element->AddInput(DeviatoricStressxxEnum,tau_xx,P1DGEnum);
+		element->AddInput(DeviatoricStressyyEnum,tau_yy,P1DGEnum);
+		element->AddInput(DeviatoricStressxyEnum,tau_xy,P1DGEnum);
 		if(dim==3){
-			element->AddInput2(DeviatoricStresszzEnum,tau_zz,P1DGEnum);
-			element->AddInput2(DeviatoricStressxzEnum,tau_xz,P1DGEnum);
-			element->AddInput2(DeviatoricStressyzEnum,tau_yz,P1DGEnum);
+			element->AddInput(DeviatoricStresszzEnum,tau_zz,P1DGEnum);
+			element->AddInput(DeviatoricStressxzEnum,tau_xz,P1DGEnum);
+			element->AddInput(DeviatoricStressyzEnum,tau_yz,P1DGEnum);
 		}
 
@@ -5779,5 +5779,5 @@
 
 	/*If on water or not FS, skip stiffness: */
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(element->IsFloating() || !element->IsOnBase()) return NULL;
 
@@ -5811,7 +5811,7 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_tria);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input);
 
 	/*build friction object, used later on: */
@@ -5932,7 +5932,7 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -6119,6 +6119,6 @@
 	/* Get node coordinates and dof list: */
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input   =element->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2* vy_input   =element->GetInput2(VyEnum);       _assert_(vy_input);
+	Input* vx_input   =element->GetInput(VxEnum);       _assert_(vx_input);
+	Input* vy_input   =element->GetInput(VyEnum);       _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -6272,11 +6272,11 @@
 	/*Initialize Element matrix*/
 	ElementMatrix* Ke=basaltria->NewElementMatrix(SSAApproximationEnum);
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 
 	/*Retrieve all inputs and parameters*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input   =element->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2* vy_input   =element->GetInput2(VyEnum);       _assert_(vy_input);
-	Input2* vz_input   =element->GetInput2(VzEnum);       _assert_(vz_input);
+	Input* vx_input   =element->GetInput(VxEnum);       _assert_(vx_input);
+	Input* vy_input   =element->GetInput(VyEnum);       _assert_(vy_input);
+	Input* vz_input   =element->GetInput(VzEnum);       _assert_(vz_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -6353,5 +6353,5 @@
 	/*Initialize Element vector and return if necessary*/
 	if(!element->IsOnBase() || element->IsFloating()) return NULL;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=HOFSApproximationEnum) return NULL;
 
@@ -6378,8 +6378,8 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_tria);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=  element->GetInput2(VxEnum);   _assert_(vx_input);
-	Input2* vy_input=  element->GetInput2(VyEnum);   _assert_(vy_input);
-	Input2* vz_input=  element->GetInput2(VzEnum);   _assert_(vz_input);
-	Input2* vzHO_input=element->GetInput2(VzHOEnum); _assert_(vzHO_input);
+	Input* vx_input=  element->GetInput(VxEnum);   _assert_(vx_input);
+	Input* vy_input=  element->GetInput(VyEnum);   _assert_(vy_input);
+	Input* vz_input=  element->GetInput(VzEnum);   _assert_(vz_input);
+	Input* vzHO_input=element->GetInput(VzHOEnum); _assert_(vzHO_input);
 
 	/*build friction object, used later on: */
@@ -6436,5 +6436,5 @@
 
 	/*Initialize Element vector and return if necessary*/
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=HOFSApproximationEnum) return NULL;
 	int   vnumnodes = element->NumberofNodesVelocity();
@@ -6457,8 +6457,8 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input   =element->GetInput2(VxEnum);   _assert_(vx_input);
-	Input2* vy_input   =element->GetInput2(VyEnum);   _assert_(vy_input);
-	Input2* vz_input   =element->GetInput2(VzEnum);   _assert_(vz_input);
-	Input2* vzHO_input=element->GetInput2(VzHOEnum);  _assert_(vzHO_input);
+	Input* vx_input   =element->GetInput(VxEnum);   _assert_(vx_input);
+	Input* vy_input   =element->GetInput(VyEnum);   _assert_(vy_input);
+	Input* vz_input   =element->GetInput(VzEnum);   _assert_(vz_input);
+	Input* vzHO_input=element->GetInput(VzHOEnum);  _assert_(vzHO_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -6523,5 +6523,5 @@
 	/*Initialize Element vector and return if necessary*/
 	if(!element->IsOnBase() || element->IsFloating()) return NULL;
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=SSAFSApproximationEnum) return NULL;
 	int vnumnodes = element->NumberofNodesVelocity();
@@ -6545,8 +6545,8 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_tria);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input=   element->GetInput2(VxEnum);    _assert_(vx_input);
-	Input2* vy_input=   element->GetInput2(VyEnum);    _assert_(vy_input);
-	Input2* vz_input=   element->GetInput2(VzEnum);    _assert_(vz_input);
-	Input2* vzSSA_input=element->GetInput2(VzSSAEnum); _assert_(vzSSA_input);
+	Input* vx_input=   element->GetInput(VxEnum);    _assert_(vx_input);
+	Input* vy_input=   element->GetInput(VyEnum);    _assert_(vy_input);
+	Input* vz_input=   element->GetInput(VzEnum);    _assert_(vz_input);
+	Input* vzSSA_input=element->GetInput(VzSSAEnum); _assert_(vzSSA_input);
 
 	/*build friction object, used later on: */
@@ -6602,5 +6602,5 @@
 
 	/*Initialize Element vector and return if necessary*/
-	element->GetInput2Value(&approximation,ApproximationEnum);
+	element->GetInputValue(&approximation,ApproximationEnum);
 	if(approximation!=SSAFSApproximationEnum) return NULL;
 	int vnumnodes = element->NumberofNodesVelocity();
@@ -6623,8 +6623,8 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
-	Input2* vx_input   =element->GetInput2(VxEnum);      _assert_(vx_input);
-	Input2* vy_input   =element->GetInput2(VyEnum);      _assert_(vy_input);
-	Input2* vz_input   =element->GetInput2(VzEnum);      _assert_(vz_input);
-	Input2* vzSSA_input=element->GetInput2(VzSSAEnum);   _assert_(vzSSA_input);
+	Input* vx_input   =element->GetInput(VxEnum);      _assert_(vx_input);
+	Input* vy_input   =element->GetInput(VyEnum);      _assert_(vy_input);
+	Input* vz_input   =element->GetInput(VzEnum);      _assert_(vz_input);
+	Input* vzSSA_input=element->GetInput(VzSSAEnum);   _assert_(vzSSA_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -7219,10 +7219,10 @@
 
 	/*Add vx and vy as inputs to element: */
-	element->AddInput2(VxEnum,vx,P1Enum);
-	element->AddInput2(VyEnum,vy,P1Enum);
-	element->AddInput2(VzEnum,vz,P1Enum);
-	element->AddInput2(VzFSEnum,vzFS,P1Enum);
-	element->AddInput2(VelEnum,vel,P1Enum);
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(VxEnum,vx,P1Enum);
+	element->AddInput(VyEnum,vy,P1Enum);
+	element->AddInput(VzEnum,vz,P1Enum);
+	element->AddInput(VzFSEnum,vzFS,P1Enum);
+	element->AddInput(VelEnum,vel,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 
 	/*Free ressources:*/
@@ -7322,10 +7322,10 @@
 
 	/*Add vx and vy as inputs to element: */
-	element->AddInput2(VxEnum,vx,P1Enum);
-	element->AddInput2(VyEnum,vy,P1Enum);
-	element->AddInput2(VzEnum,vz,P1Enum);
-	element->AddInput2(VzFSEnum,vzFS,P1Enum);
-	element->AddInput2(VelEnum,vel,P1Enum);
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(VxEnum,vx,P1Enum);
+	element->AddInput(VyEnum,vy,P1Enum);
+	element->AddInput(VzEnum,vz,P1Enum);
+	element->AddInput(VzFSEnum,vzFS,P1Enum);
+	element->AddInput(VelEnum,vel,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 
 	/*Free ressources:*/
@@ -7415,8 +7415,8 @@
 
 	/*Add vx and vy as inputs to element: */
-	element->AddInput2(VxEnum,vx,P1Enum);
-	element->AddInput2(VyEnum,vy,P1Enum);
-	element->AddInput2(VelEnum,vel,P1Enum);
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(VxEnum,vx,P1Enum);
+	element->AddInput(VyEnum,vy,P1Enum);
+	element->AddInput(VelEnum,vel,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp	(revision 25379)
@@ -107,5 +107,5 @@
 	return 2;
 }/*}}}*/
-void StressbalanceSIAAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void StressbalanceSIAAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Fetch data needed: */
@@ -127,8 +127,8 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			/*Need to know the type of approximation for this element*/
 			if(iomodel->Data("md.flowequation.element_equation")){
-				inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
+				inputs->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i])));
 			}
 			counter++;
@@ -142,17 +142,17 @@
 	switch(frictionlaw){
 		case 1:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			break;
 		case 2:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		default:
@@ -160,9 +160,9 @@
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
 	if(ismovingfront){
 		if(iomodel->domaintype!=Domain2DhorizontalEnum)
-			iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
+			iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
 	}
 
@@ -326,13 +326,13 @@
 	IssmDouble  gravity    = element->FindParam(ConstantsGEnum);
 	IssmDouble  B,n;
-	Input2* B_input         = element->GetInput2(MaterialsRheologyBbarEnum);_assert_(B_input);
-	Input2* n_input         = element->GetInput2(MaterialsRheologyNEnum);   _assert_(n_input);
-	Input2* slopex_input    = element->GetInput2(SurfaceSlopeXEnum);        _assert_(slopex_input);
-	Input2* slopey_input    = element->GetInput2(SurfaceSlopeYEnum);        _assert_(slopey_input);
-	Input2* thickness_input = element->GetInput2(ThicknessEnum);            _assert_(thickness_input);
-	Input2* surface_input   = element->GetInput2(SurfaceEnum);              _assert_(surface_input);
-	Input2* drag_input      = NULL;
+	Input* B_input         = element->GetInput(MaterialsRheologyBbarEnum);_assert_(B_input);
+	Input* n_input         = element->GetInput(MaterialsRheologyNEnum);   _assert_(n_input);
+	Input* slopex_input    = element->GetInput(SurfaceSlopeXEnum);        _assert_(slopex_input);
+	Input* slopey_input    = element->GetInput(SurfaceSlopeYEnum);        _assert_(slopey_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum);            _assert_(thickness_input);
+	Input* surface_input   = element->GetInput(SurfaceEnum);              _assert_(surface_input);
+	Input* drag_input      = NULL;
 	if(frictionlaw!=5 && frictionlaw!=1){
-		drag_input = element->GetInput2(FrictionCoefficientEnum);  _assert_(drag_input);
+		drag_input = element->GetInput(FrictionCoefficientEnum);  _assert_(drag_input);
 	}
 
@@ -416,14 +416,14 @@
 	IssmDouble  gravity    = element->FindParam(ConstantsGEnum);
 	IssmDouble B,n;
-	Input2* B_input         = element->GetInput2(MaterialsRheologyBEnum);   _assert_(B_input);
-	Input2* n_input         = element->GetInput2(MaterialsRheologyNEnum);   _assert_(n_input);
-	Input2* surface_input   = element->GetInput2(SurfaceEnum);              _assert_(surface_input);
-	Input2* slopex_input    = element->GetInput2(SurfaceSlopeXEnum);        _assert_(slopex_input);
-	Input2* slopey_input    = element->GetInput2(SurfaceSlopeYEnum);        _assert_(slopey_input);
-	Input2* thickness_input = element->GetInput2(ThicknessEnum);            _assert_(thickness_input);
-	Input2* drag_input      = NULL;
+	Input* B_input         = element->GetInput(MaterialsRheologyBEnum);   _assert_(B_input);
+	Input* n_input         = element->GetInput(MaterialsRheologyNEnum);   _assert_(n_input);
+	Input* surface_input   = element->GetInput(SurfaceEnum);              _assert_(surface_input);
+	Input* slopex_input    = element->GetInput(SurfaceSlopeXEnum);        _assert_(slopex_input);
+	Input* slopey_input    = element->GetInput(SurfaceSlopeYEnum);        _assert_(slopey_input);
+	Input* thickness_input = element->GetInput(ThicknessEnum);            _assert_(thickness_input);
+	Input* drag_input      = NULL;
 	Friction* friction     = NULL;
 	if(frictionlaw!=5 && frictionlaw!=1){
-		drag_input = element->GetInput2(FrictionCoefficientEnum);  _assert_(drag_input);
+		drag_input = element->GetInput(FrictionCoefficientEnum);  _assert_(drag_input);
 	}
 	else if(frictionlaw==5){
@@ -535,6 +535,6 @@
 	/*Get dof list and inputs */
 	element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
 
 	/*Ok, we have the velocities in inputs, fill in solution */
@@ -622,8 +622,8 @@
 
 	/*Add vx and vy as inputs to the tria element: */
-	element->AddInput2(VxEnum,vx,P1Enum);
-	element->AddInput2(VyEnum,vy,P1Enum);
-	element->AddInput2(VelEnum,vel,P1Enum);
-	element->AddInput2(PressureEnum,pressure,P1Enum);
+	element->AddInput(VxEnum,vx,P1Enum);
+	element->AddInput(VyEnum,vy,P1Enum);
+	element->AddInput(VelEnum,vel,P1Enum);
+	element->AddInput(PressureEnum,pressure,P1Enum);
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp	(revision 25379)
@@ -86,5 +86,5 @@
 	return 1;
 }/*}}}*/
-void StressbalanceVerticalAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void StressbalanceVerticalAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*return if not 3d mesh*/
@@ -96,20 +96,20 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,P1Enum);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
-	//iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
+	//iomodel->FetchDataToInput(inputs,elements,"md.smb.mass_balance",SmbMassBalanceEnum);
 
 
@@ -119,5 +119,5 @@
 	switch(basalforcing_model){
 		case FloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);
 			break;
 		case LinearFloatingMeltRateEnum:
@@ -128,23 +128,23 @@
 			break;
 		case SpatialLinearFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);
 			break;
 		case BasalforcingsPicoEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);
 			break;
 		case BasalforcingsIsmip6Enum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
 			break;
 		case BeckmannGoosseFloatingMeltRateEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
 			break;
 		default:
 			_error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
 	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum,0.);
 }/*}}}*/
 void StressbalanceVerticalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -347,13 +347,13 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->GetInputValue(&approximation,ApproximationEnum);
-	Input2* base_input=element->GetInput2(BaseEnum);                                               _assert_(base_input);
-	Input2* groundedice_input=element->GetInput2(MaskOceanLevelsetEnum);                     _assert_(groundedice_input);
-	Input2* groundedice_melting_input=element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input);
-	Input2* floatingice_melting_input=element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingice_melting_input);
-	Input2* vx_input=element->GetInput2(VxEnum);                                                   _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum);                                                   _assert_(vy_input);
-	Input2* vzFS_input=NULL;
+	Input* base_input=element->GetInput(BaseEnum);                                               _assert_(base_input);
+	Input* groundedice_input=element->GetInput(MaskOceanLevelsetEnum);                     _assert_(groundedice_input);
+	Input* groundedice_melting_input=element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input);
+	Input* floatingice_melting_input=element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingice_melting_input);
+	Input* vx_input=element->GetInput(VxEnum);                                                   _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum);                                                   _assert_(vy_input);
+	Input* vzFS_input=NULL;
 	if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
-		vzFS_input=element->GetInput2(VzFSEnum);       _assert_(vzFS_input);
+		vzFS_input=element->GetInput(VzFSEnum);       _assert_(vzFS_input);
 	}
 
@@ -413,11 +413,11 @@
 	element->GetVerticesCoordinatesTop(&xyz_list_surface);
 	element->GetInputValue(&approximation,ApproximationEnum);
-	Input2* surface_input    =element->GetInput2(SurfaceEnum);   _assert_(surface_input);
-	Input2* smb_input=element->GetInput2(SmbMassBalanceEnum);    _assert_(smb_input);
-	Input2* vx_input=element->GetInput2(VxEnum);                 _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum);                 _assert_(vy_input);
-	Input2* vzFS_input=NULL;
+	Input* surface_input    =element->GetInput(SurfaceEnum);   _assert_(surface_input);
+	Input* smb_input=element->GetInput(SmbMassBalanceEnum);    _assert_(smb_input);
+	Input* vx_input=element->GetInput(VxEnum);                 _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum);                 _assert_(vy_input);
+	Input* vzFS_input=NULL;
 	if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
-		vzFS_input=element->GetInput2(VzFSEnum); _assert_(vzFS_input);
+		vzFS_input=element->GetInput(VzFSEnum); _assert_(vzFS_input);
 	}
 
@@ -468,9 +468,9 @@
 	element->GetVerticesCoordinates(&xyz_list);
 	element->GetInputValue(&approximation,ApproximationEnum);
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vzFS_input=NULL;
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vzFS_input=NULL;
 	if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
-		vzFS_input=element->GetInput2(VzFSEnum); _assert_(vzFS_input);
+		vzFS_input=element->GetInput(VzFSEnum); _assert_(vzFS_input);
 	}
 
@@ -555,7 +555,7 @@
 	/*Do some modifications if we actually have a HOFS or SSAFS element*/
 	if(approximation==HOFSApproximationEnum){
-		Input2* vzFS_input=element->GetInput2(VzFSEnum);
+		Input* vzFS_input=element->GetInput(VzFSEnum);
 		if (vzFS_input){
-			if (vzFS_input->ObjectEnum()!=PentaInput2Enum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
+			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
 			element->GetInputListOnNodes(&vzFS[0],VzFSEnum,0.);
 		}
@@ -567,7 +567,7 @@
 	}
 	else if(approximation==SSAFSApproximationEnum){
-		Input2* vzFS_input=element->GetInput2(VzFSEnum);
+		Input* vzFS_input=element->GetInput(VzFSEnum);
 		if (vzFS_input){
-			if (vzFS_input->ObjectEnum()!=PentaInput2Enum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
+			if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));
 			element->GetInputListOnNodes(&vzFS[0],VzFSEnum,0.);
 		}
@@ -591,14 +591,14 @@
 	}
 	if(approximation!=HOFSApproximationEnum && approximation!=SSAFSApproximationEnum){
-		element->AddInput2(PressureEnum,pressure,element->GetElementType());
+		element->AddInput(PressureEnum,pressure,element->GetElementType());
 	}
 	else if(approximation==HOFSApproximationEnum){
-		element->AddInput2(VzHOEnum,vzHO,P1Enum);
+		element->AddInput(VzHOEnum,vzHO,P1Enum);
 	}
 	else if(approximation==SSAFSApproximationEnum){
-		element->AddInput2(VzSSAEnum,vzSSA,P1Enum);
-	}
-	element->AddInput2(VzEnum,vz,P1Enum);
-	element->AddInput2(VelEnum,vel,P1Enum);
+		element->AddInput(VzSSAEnum,vzSSA,P1Enum);
+	}
+	element->AddInput(VzEnum,vz,P1Enum);
+	element->AddInput(VelEnum,vel,P1Enum);
 
 	/*Free ressources:*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp	(revision 25379)
@@ -104,5 +104,5 @@
 	return 1;
 }/*}}}*/
-void ThermalAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void ThermalAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	int frictionlaw,basalforcing_model,materialstype;
@@ -119,5 +119,5 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
@@ -130,41 +130,41 @@
 	iomodel->FindConstant(&materialstype,"md.materials.type");
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.solidearth.sealevel",SealevelEnum,0);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.thickness",ThicknessEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.surface",SurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.geometry.base",BaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.solidearth.sealevel",SealevelEnum,0);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);
 	if(iomodel->domaintype!=Domain2DhorizontalEnum){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	}
-	iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,VxMeshEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,VyMeshEnum);
-	InputUpdateFromConstantx(inputs2,elements,0.,VzMeshEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	}
+	iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,VxMeshEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,VyMeshEnum);
+	InputUpdateFromConstantx(inputs,elements,0.,VzMeshEnum);
 
 	/*Rheology type*/
-	iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
 	switch(materialstype){
 		case MatenhancediceEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
 			break;
 		case MatdamageiceEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 			break;
 		case MatestarEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
 			break;
 		case MaticeEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 			break;
 		default:
@@ -172,5 +172,5 @@
 	}
 	if(ismovingfront){
-		iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
+		iomodel->FetchDataToInput(inputs,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes
 	}
 	/*Basal forcings variables*/
@@ -180,5 +180,5 @@
 			break;
 		default:
-			iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
 			break;
 	}
@@ -187,65 +187,65 @@
 		case 1:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 2:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
 			break;
 		case 3:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.As",FrictionAsEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 4:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
 			break;
 		case 5:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.water_layer",FrictionWaterLayerEnum);
 			break;
 		case 6:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.C",FrictionCEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.m",FrictionMEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.initialization.temperature",TemperatureEnum);
 			break;
 		case 7:
 			iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling");
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.p",FrictionPEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.q",FrictionQEnum);
 			if (FrictionCoupling==3){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}
 			else if(FrictionCoupling==4){
-				iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum);
+				iomodel->FetchDataToInput(inputs,elements,"md.friction.effective_pressure",EffectivePressureEnum);
 			}
 			break;
 		case 9:
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
-			InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum);
-			InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.coefficient",FrictionCoefficientEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);
+			InputUpdateFromConstantx(inputs,elements,1.,FrictionPEnum);
+			InputUpdateFromConstantx(inputs,elements,1.,FrictionQEnum);
 			break;
 		default:
@@ -403,10 +403,10 @@
 	IssmDouble  thermalconductivity = element->FindParam(MaterialsThermalconductivityEnum);
 	IssmDouble  kappa = thermalconductivity/(rho_ice*heatcapacity);
-	Input2* vx_input  = element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input  = element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input  = element->GetInput2(VzEnum);     _assert_(vz_input);
-	Input2* vxm_input = element->GetInput2(VxMeshEnum); _assert_(vxm_input);
-	Input2* vym_input = element->GetInput2(VyMeshEnum); _assert_(vym_input);
-	Input2* vzm_input = element->GetInput2(VzMeshEnum); _assert_(vzm_input);
+	Input* vx_input  = element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input  = element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input  = element->GetInput(VzEnum);     _assert_(vz_input);
+	Input* vxm_input = element->GetInput(VxMeshEnum); _assert_(vxm_input);
+	Input* vym_input = element->GetInput(VyMeshEnum); _assert_(vym_input);
+	Input* vzm_input = element->GetInput(VzMeshEnum); _assert_(vzm_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -552,8 +552,8 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2* vx_input             = element->GetInput2(VxEnum);                          _assert_(vx_input);
-	Input2* vy_input             = element->GetInput2(VyEnum);                          _assert_(vy_input);
-	Input2* vz_input             = element->GetInput2(VzEnum);                          _assert_(vz_input);
-	Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
+	Input* vx_input             = element->GetInput(VxEnum);                          _assert_(vx_input);
+	Input* vy_input             = element->GetInput(VyEnum);                          _assert_(vy_input);
+	Input* vz_input             = element->GetInput(VzEnum);                          _assert_(vz_input);
+	Input* geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);
 	IssmDouble  rho_ice             = element->FindParam(MaterialsRhoIceEnum);
 	IssmDouble  heatcapacity        = element->FindParam(MaterialsHeatcapacityEnum);
@@ -613,5 +613,5 @@
 	element->GetVerticesCoordinatesBase(&xyz_list_base);
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
-	Input2*      pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input);
+	Input*      pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);
 	IssmDouble  gravity             = element->FindParam(ConstantsGEnum);
 	IssmDouble  rho_water           = element->FindParam(MaterialsRhoSeawaterEnum);
@@ -675,9 +675,9 @@
 	element->FindParam(&dt,TimesteppingTimeStepEnum);
 	element->FindParam(&stabilization,ThermalStabilizationEnum);
-	Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input);
-	Input2* temperature_input = NULL;
-	if(reCast<bool,IssmDouble>(dt)){temperature_input = element->GetInput2(TemperatureEnum); _assert_(temperature_input);}
+	Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input);
+	Input* temperature_input = NULL;
+	if(reCast<bool,IssmDouble>(dt)){temperature_input = element->GetInput(TemperatureEnum); _assert_(temperature_input);}
 
 	/* Start  looping on the number of gaussian points: */
@@ -787,5 +787,5 @@
 	element->GetInputValue(&converged,ConvergedEnum);
 	if(converged){
-		element->AddInput2(TemperatureEnum,values,element->GetElementType());
+		element->AddInput(TemperatureEnum,values,element->GetElementType());
 
 		IssmDouble* n = xNew<IssmDouble>(numnodes);
@@ -808,26 +808,26 @@
 			case BuddJackaEnum:
 				for(i=0;i<numnodes;i++) B[i]=BuddJacka(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType());
+				element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
 				break;
 			case CuffeyEnum:
 				for(i=0;i<numnodes;i++) B[i]=Cuffey(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType());
+				element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
 				break;
 			case PatersonEnum:
 				for(i=0;i<numnodes;i++) B[i]=Paterson(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType());
+				element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
 				break;
 			case NyeH2OEnum:
 				for(i=0;i<numnodes;i++) B[i]=NyeH2O(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType());
+				element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
 				break; 
 			case NyeCO2Enum:
 				for(i=0;i<numnodes;i++) B[i]=NyeCO2(values[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType());
+				element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
 				break;
 			case ArrheniusEnum:{
 				element->GetVerticesCoordinates(&xyz_list);
 				for(i=0;i<numnodes;i++) B[i]=Arrhenius(values[i],surface[i]-xyz_list[i*3+2],n[i]);
-				element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType());
+				element->AddInput(MaterialsRheologyBEnum,&B[0],element->GetElementType());
 				break;
 				}
@@ -838,5 +838,5 @@
 	}
 	else{
-		element->AddInput2(TemperaturePicardEnum,values,element->GetElementType());
+		element->AddInput(TemperaturePicardEnum,values,element->GetElementType());
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp	(revision 25379)
@@ -27,5 +27,5 @@
 	return 1;
 }/*}}}*/
-void UzawaPressureAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
+void UzawaPressureAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
 
 	/*Update elements: */
@@ -42,14 +42,14 @@
 		if(iomodel->my_elements[i]){
 			Element* element=(Element*)elements->GetObjectByOffset(counter);
-			element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement);
+			element->Update(inputs,i,iomodel,analysis_counter,analysis_type,finiteelement);
 			counter++;
 		}
 	}
 
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.);
-	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum,0.);
-	iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum,0.);
-	InputUpdateFromConstantx(inputs2,elements,0.,SigmaNNEnum);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vx",VxEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.vy",VyEnum,0.);
+	if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(inputs,elements,"md.initialization.vz",VzEnum,0.);
+	iomodel->FetchDataToInput(inputs,elements,"md.initialization.pressure",PressureEnum,0.);
+	InputUpdateFromConstantx(inputs,elements,0.,SigmaNNEnum);
 }/*}}}*/
 void UzawaPressureAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
@@ -130,8 +130,8 @@
 	IssmDouble     dvz[3];
 
-	Input2* vx_input=element->GetInput2(VxEnum);     _assert_(vx_input);
-	Input2* vy_input=element->GetInput2(VyEnum);     _assert_(vy_input);
-	Input2* vz_input = NULL;
-	if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input=element->GetInput(VxEnum);     _assert_(vx_input);
+	Input* vy_input=element->GetInput(VyEnum);     _assert_(vy_input);
+	Input* vz_input = NULL;
+	if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);}
 
 	Gauss* gauss = element->NewGauss(5);
@@ -206,8 +206,8 @@
 	IssmDouble* valueslambda  = xNewZeroInit<IssmDouble>(numnodessigma);
 	IssmDouble* pressure      = xNew<IssmDouble>(numnodes);
-	Input2* vx_input           = element->GetInput2(VxEnum);      _assert_(vx_input);
-	Input2* vy_input           = element->GetInput2(VyEnum);      _assert_(vy_input);
-	Input2* vz_input           = NULL;
-	if(dim==3){vz_input       = element->GetInput2(VzEnum);      _assert_(vz_input);}
+	Input* vx_input           = element->GetInput(VxEnum);      _assert_(vx_input);
+	Input* vy_input           = element->GetInput(VyEnum);      _assert_(vy_input);
+	Input* vz_input           = NULL;
+	if(dim==3){vz_input       = element->GetInput(VzEnum);      _assert_(vz_input);}
 	element->GetInputListOnNodes(&pressure[0],PressureEnum);
 
@@ -216,9 +216,9 @@
 		values[i]  = pressure[i] + solution[doflist[i]];
 	}
-	element->AddInput2(PressureEnum,values,element->GetElementType());
+	element->AddInput(PressureEnum,values,element->GetElementType());
 
 	/*Now compute sigmann if on base*/
 	if(element->IsOnBase() && 0){ 
-		Input2* sigmann_input      = element->GetInput2(SigmaNNEnum); _assert_(sigmann_input);
+		Input* sigmann_input      = element->GetInput(SigmaNNEnum); _assert_(sigmann_input);
 		if(dim==3) _error_("not implemented yet");
 
@@ -231,5 +231,5 @@
 		IssmDouble  deltalambda[3] = {0.0};
 		IssmDouble* vertexonbase  = xNew<IssmDouble>(numnodessigma);
-		Input2* vertexonbase_input = element->GetInput2(MeshVertexonbaseEnum); _assert_(vertexonbase_input);
+		Input* vertexonbase_input = element->GetInput(MeshVertexonbaseEnum); _assert_(vertexonbase_input);
 		Gauss* gauss = element->NewGauss();
 
@@ -285,5 +285,5 @@
 		xDelete<IssmDouble>(basis);
 
-		element->AddInput2(SigmaNNEnum,valueslambda,P2Enum);
+		element->AddInput(SigmaNNEnum,valueslambda,P2Enum);
 	}
 
Index: /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h
===================================================================
--- /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h	(revision 25379)
@@ -17,5 +17,5 @@
 		void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false);
 		int  DofsPerNode(int** doflist,int domaintype,int approximation);
-		void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type);
+		void UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type);
 		void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum);
 
Index: /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 25379)
@@ -21,5 +21,5 @@
 #include "../classes/Params/Parameters.h"
 #include "../classes/gauss/Gauss.h"
-#include "./Inputs2/DatasetInput2.h"
+#include "./Inputs/DatasetInput.h"
 /*}}}*/
 
@@ -151,6 +151,6 @@
 
 	/*Get input if it already exists*/
-	DatasetInput2 *datasetinput = basalelement->GetDatasetInput2(definitionenum);  _assert_(datasetinput);
-	Input2        *drag_input   = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(drag_input);
+	DatasetInput *datasetinput = basalelement->GetDatasetInput(definitionenum);  _assert_(datasetinput);
+	Input        *drag_input   = basalelement->GetInput(FrictionCoefficientEnum); _assert_(drag_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 25379)
@@ -21,5 +21,5 @@
 #include "../classes/Params/Parameters.h"
 #include "../classes/gauss/Gauss.h"
-#include "./Inputs2/DatasetInput2.h"
+#include "./Inputs/DatasetInput.h"
 /*}}}*/
 
@@ -162,12 +162,12 @@
 
 	/*Get model values*/
-	Input2 *vx_input = topelement->GetInput2(VxEnum); _assert_(vx_input);
-	Input2 *vy_input = NULL;
+	Input *vx_input = topelement->GetInput(VxEnum); _assert_(vx_input);
+	Input *vy_input = NULL;
 	if(numcomponents==2){
-	      vy_input = topelement->GetInput2(VyEnum); _assert_(vy_input);
+	      vy_input = topelement->GetInput(VyEnum); _assert_(vy_input);
 	}
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2 *datasetinput = topelement->GetDatasetInput2(definitionenum); _assert_(datasetinput);
+	DatasetInput *datasetinput = topelement->GetDatasetInput(definitionenum); _assert_(datasetinput);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 25379)
@@ -21,5 +21,5 @@
 #include "../classes/Params/Parameters.h"
 #include "../classes/gauss/Gauss.h"
-#include "./Inputs2/DatasetInput2.h"
+#include "./Inputs/DatasetInput.h"
 /*}}}*/
 
@@ -167,6 +167,6 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2 *datasetinput = topelement->GetDatasetInput2(definitionenum); _assert_(datasetinput);
-	Input2        *model_input  = topelement->GetInput2(model_enum);            _assert_(model_input);
+	DatasetInput *datasetinput = topelement->GetDatasetInput(definitionenum); _assert_(datasetinput);
+	Input        *model_input  = topelement->GetInput(model_enum);            _assert_(model_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 25379)
@@ -15,10 +15,10 @@
 #include "../../shared/shared.h"
 #include "../../modules/SurfaceMassBalancex/SurfaceMassBalancex.h"
-#include "../Inputs2/BoolInput2.h"
-#include "../Inputs2/TransientInput2.h"
-#include "../Inputs2/ElementInput2.h"
-#include "../Inputs2/PentaInput2.h"
-#include "../Inputs2/DatasetInput2.h"
-#include "../Inputs2/ArrayInput2.h"
+#include "../Inputs/BoolInput.h"
+#include "../Inputs/TransientInput.h"
+#include "../Inputs/ElementInput.h"
+#include "../Inputs/PentaInput.h"
+#include "../Inputs/DatasetInput.h"
+#include "../Inputs/ArrayInput.h"
 /*}}}*/
 #define MAXVERTICES 6 /*Maximum number of vertices per element, currently Penta, to avoid dynamic mem allocation*/
@@ -36,5 +36,5 @@
 	this->sid = -1;
 	this->lid = -1;
-	this->inputs2    = NULL;
+	this->inputs    = NULL;
 	this->nodes      = NULL;
 	this->vertices   = NULL;
@@ -72,8 +72,8 @@
 	this->GetVerticesCoordinates(&xyz_list);
 	parameters->FindParam(&dim,DomainDimensionEnum);
-	Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input=NULL;
-	if(dim==3){vz_input=this->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=NULL;
+	if(dim==3){vz_input=this->GetInput(VzEnum); _assert_(vz_input);}
 
 	/*Allocate arrays*/
@@ -132,5 +132,5 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(LambdaSEnum,&lambdas[0],P1Enum);
+	this->AddInput(LambdaSEnum,&lambdas[0],P1Enum);
 
 	/*Clean up and return*/
@@ -155,14 +155,14 @@
 
 	/* Retrieve inputs */
-	Input2* eps_xx_input=this->GetInput2(StrainRatexxEnum); _assert_(eps_xx_input);
-	Input2* eps_yy_input=this->GetInput2(StrainRateyyEnum); _assert_(eps_yy_input);
-	Input2* eps_xy_input=this->GetInput2(StrainRatexyEnum); _assert_(eps_xy_input);
-	Input2* eps_xz_input=NULL;
-	Input2* eps_yz_input=NULL;
-	Input2* eps_zz_input=NULL;
+	Input* eps_xx_input=this->GetInput(StrainRatexxEnum); _assert_(eps_xx_input);
+	Input* eps_yy_input=this->GetInput(StrainRateyyEnum); _assert_(eps_yy_input);
+	Input* eps_xy_input=this->GetInput(StrainRatexyEnum); _assert_(eps_xy_input);
+	Input* eps_xz_input=NULL;
+	Input* eps_yz_input=NULL;
+	Input* eps_zz_input=NULL;
 	if(dim==3){
-		eps_xz_input=this->GetInput2(StrainRatexzEnum); _assert_(eps_xz_input);
-		eps_yz_input=this->GetInput2(StrainRateyzEnum); _assert_(eps_yz_input);
-		eps_zz_input=this->GetInput2(StrainRatezzEnum); _assert_(eps_zz_input);
+		eps_xz_input=this->GetInput(StrainRatexzEnum); _assert_(eps_xz_input);
+		eps_yz_input=this->GetInput(StrainRateyzEnum); _assert_(eps_yz_input);
+		eps_zz_input=this->GetInput(StrainRatezzEnum); _assert_(eps_zz_input);
 	}
 
@@ -172,16 +172,16 @@
 
 	/* Retrieve domain-dependent inputs */
-	Input2* n_input=this->GetInput2(MaterialsRheologyNEnum); _assert_(n_input);
-	Input2* damage_input = NULL;
-	Input2* B_input = NULL;
+	Input* n_input=this->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
+	Input* damage_input = NULL;
+	Input* B_input = NULL;
 	int domaintype;
 	parameters->FindParam(&domaintype,DomainTypeEnum);
 	if(domaintype==Domain2DhorizontalEnum){
-		damage_input = this->GetInput2(DamageDbarOldEnum);  _assert_(damage_input);
-		B_input=this->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input);
+		damage_input = this->GetInput(DamageDbarOldEnum);  _assert_(damage_input);
+		B_input=this->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);
 	}
 	else{
-		damage_input = this->GetInput2(DamageDOldEnum);   _assert_(damage_input);
-		B_input=this->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
+		damage_input = this->GetInput(DamageDOldEnum);   _assert_(damage_input);
+		B_input=this->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
 	}
 
@@ -224,10 +224,10 @@
 
 	/* Add new damage input to DamageEnum and NewDamageEnum */
-	this->AddInput2(NewDamageEnum,newD,P1DGEnum);
+	this->AddInput(NewDamageEnum,newD,P1DGEnum);
 	if(domaintype==Domain2DhorizontalEnum){
-		this->AddInput2(DamageDbarEnum,newD,this->GetElementType());
+		this->AddInput(DamageDbarEnum,newD,this->GetElementType());
 	}
 	else{
-		this->AddInput2(DamageDEnum,newD,this->GetElementType());
+		this->AddInput(DamageDEnum,newD,this->GetElementType());
 	}
 
@@ -247,8 +247,8 @@
 	this->GetVerticesCoordinates(&xyz_list);
 	parameters->FindParam(&dim,DomainDimensionEnum);
-	Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input=NULL;
-	if(dim==3){vz_input=this->GetInput2(VzEnum); _assert_(vz_input);}
+	Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input=NULL;
+	if(dim==3){vz_input=this->GetInput(VzEnum); _assert_(vz_input);}
 
 	/*Allocate arrays*/
@@ -296,11 +296,11 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(StrainRatexxEnum,eps_xx,P1Enum);
-	this->AddInput2(StrainRatexyEnum,eps_xy,P1Enum);
-	this->AddInput2(StrainRatexzEnum,eps_xz,P1Enum);
-	this->AddInput2(StrainRateyyEnum,eps_yy,P1Enum);
-	this->AddInput2(StrainRateyzEnum,eps_yz,P1Enum);
-	this->AddInput2(StrainRatezzEnum,eps_zz,P1Enum);
-	this->AddInput2(StrainRateeffectiveEnum,eps_ef,P1Enum);
+	this->AddInput(StrainRatexxEnum,eps_xx,P1Enum);
+	this->AddInput(StrainRatexyEnum,eps_xy,P1Enum);
+	this->AddInput(StrainRatexzEnum,eps_xz,P1Enum);
+	this->AddInput(StrainRateyyEnum,eps_yy,P1Enum);
+	this->AddInput(StrainRateyzEnum,eps_yz,P1Enum);
+	this->AddInput(StrainRatezzEnum,eps_zz,P1Enum);
+	this->AddInput(StrainRateeffectiveEnum,eps_ef,P1Enum);
 
 	/*Clean up and return*/
@@ -417,6 +417,6 @@
 
 	_printf_("   inputs\n");
-	if(inputs2) inputs2->DeepEcho();
-	else _printf_("inputs2=NULL\n");
+	if(inputs) inputs->DeepEcho();
+	else _printf_("inputs=NULL\n");
 
 	return;
@@ -452,7 +452,7 @@
 
 	/*Recover present day temperature and precipitation*/
-	DatasetInput2* dinput1=this->GetDatasetInput2(SmbTemperaturesPresentdayEnum);   _assert_(dinput1);
-	DatasetInput2* dinput2=this->GetDatasetInput2(SmbTemperaturesLgmEnum);          _assert_(dinput2);
-	DatasetInput2* dinput3=this->GetDatasetInput2(SmbPrecipitationsPresentdayEnum); _assert_(dinput3);
+	DatasetInput* dinput1=this->GetDatasetInput(SmbTemperaturesPresentdayEnum);   _assert_(dinput1);
+	DatasetInput* dinput2=this->GetDatasetInput(SmbTemperaturesLgmEnum);          _assert_(dinput2);
+	DatasetInput* dinput3=this->GetDatasetInput(SmbPrecipitationsPresentdayEnum); _assert_(dinput3);
 
 	/*loop over vertices: */
@@ -492,12 +492,12 @@
 		for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlytemperatures[i*12+imonth];
 		switch(this->ObjectEnum()){
-			case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
-			case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case TriaEnum: this->inputs->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case PentaEnum: this->inputs->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
 			default: _error_("Not implemented yet");
 		}
 		for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlyprec[i*12+imonth]/yts;
 		switch(this->ObjectEnum()){
-			case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
-			case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case TriaEnum: this->inputs->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case PentaEnum: this->inputs->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
 			default: _error_("Not implemented yet");
 		}
@@ -559,6 +559,6 @@
 
 	/*Recover present day temperature and precipitation*/
-	DatasetInput2 *dinput3 = NULL;
-	DatasetInput2 *dinput4 = NULL;
+	DatasetInput *dinput3 = NULL;
+	DatasetInput *dinput4 = NULL;
 	int            offset_t,offset_p,N;
 	if(!isTemperatureScaled){
@@ -568,5 +568,5 @@
 		if(offset_t<0) offset_t=0;
 		xDelete<IssmDouble>(time_temp_scaled);
-		dinput3=this->GetDatasetInput2(SmbTemperaturesReconstructedEnum); _assert_(dinput3);
+		dinput3=this->GetDatasetInput(SmbTemperaturesReconstructedEnum); _assert_(dinput3);
 	}
 	if(!isPrecipScaled){
@@ -576,10 +576,10 @@
 		if(offset_p<0) offset_p=0;
 		xDelete<IssmDouble>(time_precip_scaled);
-		dinput4=this->GetDatasetInput2(SmbPrecipitationsReconstructedEnum); _assert_(dinput4);
+		dinput4=this->GetDatasetInput(SmbPrecipitationsReconstructedEnum); _assert_(dinput4);
 	}
 
 	/*Get present day temp and precip (monthly)*/
-	DatasetInput2 *dinput1 = this->GetDatasetInput2(SmbTemperaturesPresentdayEnum);   _assert_(dinput1);
-	DatasetInput2 *dinput2 = this->GetDatasetInput2(SmbPrecipitationsPresentdayEnum); _assert_(dinput2);
+	DatasetInput *dinput1 = this->GetDatasetInput(SmbTemperaturesPresentdayEnum);   _assert_(dinput1);
+	DatasetInput *dinput2 = this->GetDatasetInput(SmbPrecipitationsPresentdayEnum); _assert_(dinput2);
 
 	/*loop over vertices: */
@@ -617,12 +617,12 @@
 		for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlytemperatures[i*12+imonth];
 		switch(this->ObjectEnum()){
-			case TriaEnum:  this->inputs2->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
-			case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case TriaEnum:  this->inputs->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case PentaEnum: this->inputs->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
 			default: _error_("Not implemented yet");
 		}
 		for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlyprec[i*12+imonth]/yts;
 		switch(this->ObjectEnum()){
-			case TriaEnum:  this->inputs2->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
-			case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case TriaEnum:  this->inputs->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case PentaEnum: this->inputs->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
 			default: _error_("Not implemented yet");
 		}
@@ -696,10 +696,10 @@
 	switch(this->ObjectEnum()){
 	case TriaEnum:
-		this->AddInput2(SmbMassBalanceSubstepEnum,&smb[0],P1Enum);
-		this->AddInput2(SmbRunoffSubstepEnum,&runoff[0],P1Enum);
+		this->AddInput(SmbMassBalanceSubstepEnum,&smb[0],P1Enum);
+		this->AddInput(SmbRunoffSubstepEnum,&runoff[0],P1Enum);
 		break;
 	case PentaEnum:
-		this->AddInput2(SmbMassBalanceSubstepEnum,&smb[0],P1Enum);
-		this->AddInput2(SmbRunoffSubstepEnum,&runoff[0],P1Enum);
+		this->AddInput(SmbMassBalanceSubstepEnum,&smb[0],P1Enum);
+		this->AddInput(SmbRunoffSubstepEnum,&runoff[0],P1Enum);
 		this->InputExtrude(SmbMassBalanceSubstepEnum,-1);
 		this->InputExtrude(SmbRunoffSubstepEnum,-1);
@@ -726,9 +726,9 @@
 	/*Get inputs and parameters*/
 	this->FindParam(&dim,DomainDimensionEnum);
-	Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input = NULL;
+	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input = NULL;
 	if(dim==3){
-		vz_input = this->GetInput2(VzEnum); _assert_(vz_input);
+		vz_input = this->GetInput(VzEnum); _assert_(vz_input);
 	}
 	this->GetVerticesCoordinates(&xyz_list);
@@ -757,5 +757,5 @@
 	return divergence;
 }/*}}}*/
-void       Element::dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
+void       Element::dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -794,5 +794,5 @@
 }
 /*}}}*/
-void       Element::dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -831,5 +831,5 @@
 }
 /*}}}*/
-void       Element::dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -868,5 +868,5 @@
 }
 /*}}}*/
-void       Element::dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -923,6 +923,6 @@
 
 	_printf_("   inputs\n");
-	if (inputs2) inputs2->Echo();
-	else _printf_("inputs2=NULL\n");
+	if (inputs) inputs->Echo();
+	else _printf_("inputs=NULL\n");
 }
 /*}}}*/
@@ -1096,5 +1096,5 @@
 /*}}}*/
 void       Element::GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){/*{{{*/
-	Input2 *input    = this->GetInput2(enumtype);
+	Input *input    = this->GetInput(enumtype);
 	this->GetInputListOnNodes(pvalue,input,defaultvalue);
 }
@@ -1102,5 +1102,5 @@
 void       Element::GetInputListOnNodes(IssmDouble* pvalue,int enumtype){/*{{{*/
 
-	Input2 *input    = this->GetInput2(enumtype);
+	Input *input    = this->GetInput(enumtype);
 	if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
 	this->GetInputListOnNodes(pvalue,input,0.);
@@ -1113,5 +1113,5 @@
 
 	int     numnodes = this->NumberofNodesVelocity();
-	Input2 *input    = this->GetInput2(enumtype);
+	Input *input    = this->GetInput(enumtype);
 	if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
 
@@ -1128,5 +1128,5 @@
 
 	/*Recover input*/
-	Input2* input2=this->GetInput2(enumtype);
+	Input* input2=this->GetInput(enumtype);
 	if(!input2) _error_("input "<<EnumToStringx(enumtype)<<" not found in element");
 	this->GetInputListOnVertices(pvalue,input2,0.);
@@ -1136,5 +1136,5 @@
 
 	/*Recover input*/
-	Input2* input=this->GetInput2(enumtype,time);
+	Input* input=this->GetInput(enumtype,time);
 	if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element");
 	this->GetInputListOnVertices(pvalue,input,0.);
@@ -1142,5 +1142,5 @@
 /*}}}*/
 void       Element::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){/*{{{*/
-	Input2* input=this->GetInput2(enumtype);
+	Input* input=this->GetInput(enumtype);
 	this->GetInputListOnVertices(pvalue,input,defaultvalue);
 }
@@ -1173,28 +1173,20 @@
 void       Element::GetInputValue(bool* pvalue,int inputenum){/*{{{*/
 
-	this->inputs2->GetInputValue(pvalue,inputenum,this->lid);
+	this->inputs->GetInputValue(pvalue,inputenum,this->lid);
 
 }/*}}}*/
 void       Element::GetInputValue(int* pvalue,int inputenum){/*{{{*/
-	this->inputs2->GetInputValue(pvalue,inputenum,this->lid);
-}/*}}}*/
-void       Element::GetInput2Value(bool* pvalue,int inputenum){/*{{{*/
-
-	this->inputs2->GetInputValue(pvalue,inputenum,this->lid);
-
-}/*}}}*/
-void       Element::GetInput2Value(int* pvalue,int inputenum){/*{{{*/
-
-	this->inputs2->GetInputValue(pvalue,inputenum,this->lid);
-
-}/*}}}*/
-void       Element::GetInput2Value(IssmDouble* pvalue,int inputenum){/*{{{*/
-
-	this->inputs2->GetInputValue(pvalue,inputenum,this->lid);
+
+	this->inputs->GetInputValue(pvalue,inputenum,this->lid);
+
+}/*}}}*/
+void       Element::GetInputValue(IssmDouble* pvalue,int inputenum){/*{{{*/
+
+	this->inputs->GetInputValue(pvalue,inputenum,this->lid);
 
 }/*}}}*/
 void       Element::GetInputValue(IssmDouble* pvalue,Gauss* gauss,int inputenum){/*{{{*/
 
-	Input2* input=this->GetInput2(inputenum);
+	Input* input=this->GetInput(inputenum);
 	if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element");
 	input->GetInputValue(pvalue,gauss);
@@ -1288,5 +1280,5 @@
 
 	/*Get inputs*/
-	Input2* enum_input=this->GetInput2(enum_type); _assert_(enum_input);
+	Input* enum_input=this->GetInput(enum_type); _assert_(enum_input);
 
 	/*Ok, we have the values, fill in the array: */
@@ -1334,9 +1326,9 @@
 	IssmDouble  value;
 	IssmDouble* values      = NULL;
-	Input2*     input       = NULL;
+	Input*     input       = NULL;
 
 	switch(type){
 		case ElementSIdEnum:
-			input=this->GetInput2(input_enum); _assert_(input);
+			input=this->GetInput(input_enum); _assert_(input);
 			input->GetInputAverage(&value);
 			vector->SetValue(this->sid,value,INS_VAL);
@@ -1560,9 +1552,9 @@
 /*}}}*/
 bool       Element::HasNodeOnBase(){/*{{{*/
-	Input2* input=this->GetInput2(MeshVertexonbaseEnum); _assert_(input);
+	Input* input=this->GetInput(MeshVertexonbaseEnum); _assert_(input);
 	return (input->GetInputMax()>0.);
 }/*}}}*/
 bool       Element::HasNodeOnSurface(){/*{{{*/
-	Input2* input=this->GetInput2(MeshVertexonsurfaceEnum); _assert_(input);
+	Input* input=this->GetInput(MeshVertexonsurfaceEnum); _assert_(input);
 	return (input->GetInputMax()>0.);
 }/*}}}*/
@@ -1624,5 +1616,5 @@
 }
 /*}}}*/
-void       Element::InputCreate(IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){/*{{{*/
+void       Element::InputCreate(IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){/*{{{*/
 
 	/*Intermediaries*/
@@ -1648,9 +1640,9 @@
 		if(M==1){
 			values[0]=vector[0];
-			this->SetElementInput(inputs2,vector_enum,vector[0]);
+			this->SetElementInput(inputs,vector_enum,vector[0]);
 		}
 		else if(M==iomodel->numberofvertices){
 			for(i=0;i<NUM_VERTICES;i++) values[i]=vector[vertexids[i]-1];
-			this->SetElementInput(inputs2,NUM_VERTICES,vertexlids,values,vector_enum);
+			this->SetElementInput(inputs,NUM_VERTICES,vertexlids,values,vector_enum);
 		}
 		else if(M==iomodel->numberofvertices+1){
@@ -1658,6 +1650,6 @@
 			IssmDouble* times = xNew<IssmDouble>(N);
 			for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
-			inputs2->SetTransientInput(vector_enum,times,N);
-			TransientInput2* transientinput = inputs2->GetTransientInput(vector_enum);
+			inputs->SetTransientInput(vector_enum,times,N);
+			TransientInput* transientinput = inputs->GetTransientInput(vector_enum);
 			for(t=0;t<N;t++){
 				for(i=0;i<NUM_VERTICES;i++) values[i]=vector[N*(vertexids[i]-1)+t];
@@ -1678,14 +1670,14 @@
 
 			if (N==this->GetNumberOfNodes(P1Enum)){
-				this->SetElementInput(inputs2,NUM_VERTICES,vertexlids,values,vector_enum);
+				this->SetElementInput(inputs,NUM_VERTICES,vertexlids,values,vector_enum);
 			}
 			else if(N==this->GetNumberOfNodes(P0Enum)){
-				this->SetElementInput(inputs2,vector_enum,values[0]);
+				this->SetElementInput(inputs,vector_enum,values[0]);
 			}
 			else if(N==this->GetNumberOfNodes(P1xP2Enum)){ _assert_(this->ObjectEnum()==PentaEnum);
-				inputs2->SetPentaInput(vector_enum,P1xP2Enum,this->lid,N,values);
+				inputs->SetPentaInput(vector_enum,P1xP2Enum,this->lid,N,values);
 			}
 			else if(N==this->GetNumberOfNodes(P1xP3Enum)){ _assert_(this->ObjectEnum()==PentaEnum);
-				inputs2->SetPentaInput(vector_enum,P1xP3Enum,this->lid,N,values);
+				inputs->SetPentaInput(vector_enum,P1xP3Enum,this->lid,N,values);
 			}
 			else{
@@ -1709,11 +1701,11 @@
 		if(M==iomodel->numberofelements){
 			if (code==5){ //boolean
-				this->SetBoolInput(inputs2,vector_enum,reCast<bool>(vector[this->Sid()]));
+				this->SetBoolInput(inputs,vector_enum,reCast<bool>(vector[this->Sid()]));
 			}
 			else if (code==6){ //integer
-				this->SetIntInput(inputs2,vector_enum,reCast<int>(vector[this->Sid()]));
+				this->SetIntInput(inputs,vector_enum,reCast<int>(vector[this->Sid()]));
 			}
 			else if (code==7){ //IssmDouble
-				this->SetElementInput(inputs2,vector_enum,vector[this->Sid()]);
+				this->SetElementInput(inputs,vector_enum,vector[this->Sid()]);
 			}
 			else _error_("could not recognize nature of vector from code " << code);
@@ -1723,6 +1715,6 @@
 			IssmDouble* times = xNew<IssmDouble>(N);
 			for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
-			inputs2->SetTransientInput(vector_enum,times,N);
-			TransientInput2* transientinput = inputs2->GetTransientInput(vector_enum);
+			inputs->SetTransientInput(vector_enum,times,N);
+			TransientInput* transientinput = inputs->GetTransientInput(vector_enum);
 			for(t=0;t<N;t++){
 				value=vector[N*this->Sid()+t];
@@ -1743,5 +1735,5 @@
 			IssmDouble* layers = xNewZeroInit<IssmDouble>(N);
 			for(t=0;t<N;t++) layers[t] = vector[N*this->Sid()+t];
-			inputs2->SetArrayInput(vector_enum,this->lid,layers,N);
+			inputs->SetArrayInput(vector_enum,this->lid,layers,N);
 			xDelete<IssmDouble>(layers);
 		}
@@ -1751,5 +1743,5 @@
 }
 /*}}}*/
-void       Element::ControlInputCreate(IssmDouble* vector,IssmDouble* min_vector,IssmDouble* max_vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id){/*{{{*/
+void       Element::ControlInputCreate(IssmDouble* vector,IssmDouble* min_vector,IssmDouble* max_vector,Inputs* inputs,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id){/*{{{*/
 
 	/*Intermediaries*/
@@ -1779,5 +1771,5 @@
 			values_max[i] = scale*max_vector[vertexids[i]-1];
 		}
-		this->AddControlInput(input_enum,inputs2,iomodel,values,values_min,values_max,P1Enum,id);
+		this->AddControlInput(input_enum,inputs,iomodel,values,values_min,values_max,P1Enum,id);
 	}
 	else if(M==iomodel->numberofelements && N==1){
@@ -1785,5 +1777,5 @@
 		values_min[0] = scale*min_vector[this->Sid()];
 		values_max[0] = scale*max_vector[this->Sid()];
-		this->AddControlInput(input_enum,inputs2,iomodel,values,values_min,values_max,P0Enum,id);
+		this->AddControlInput(input_enum,inputs,iomodel,values,values_min,values_max,P0Enum,id);
 	}
 
@@ -1835,5 +1827,5 @@
 }
 /*}}}*/
-void       Element::DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int input_enum,int code,int input_id){/*{{{*/
+void       Element::DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int input_enum,int code,int input_id){/*{{{*/
 	/*enum_type: the name of the DatasetInput (eg Outputdefinition1)
 	 * vector: information being stored (eg observations)
@@ -1865,5 +1857,5 @@
 		if(M==1){
 			values[0]=vector[0];
-			//this->AddInput2(vector_enum,values,P0Enum);
+			//this->AddInput(vector_enum,values,P0Enum);
 			_error_("not implemented yet");
 		}
@@ -1871,6 +1863,6 @@
 			for(i=0;i<NUM_VERTICES;i++) values[i]=vector[vertexids[i]-1];
 			switch(this->ObjectEnum()){
-				case TriaEnum:  inputs2->SetTriaDatasetInput(enum_type,input_id,P1Enum,NUM_VERTICES,vertexlids,values); break;
-				case PentaEnum: inputs2->SetPentaDatasetInput(enum_type,input_id,P1Enum,NUM_VERTICES,vertexlids,values); break;
+				case TriaEnum:  inputs->SetTriaDatasetInput(enum_type,input_id,P1Enum,NUM_VERTICES,vertexlids,values); break;
+				case PentaEnum: inputs->SetPentaDatasetInput(enum_type,input_id,P1Enum,NUM_VERTICES,vertexlids,values); break;
 				default: _error_("Not implemented yet for "<<this->ObjectEnum());
 			}
@@ -1880,5 +1872,5 @@
 			IssmDouble* times = xNew<IssmDouble>(N);
 			for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t];
-			TransientInput2* transientinput = inputs2->SetDatasetTransientInput(enum_type,input_id,times,N);
+			TransientInput* transientinput = inputs->SetDatasetTransientInput(enum_type,input_id,times,N);
 			for(t=0;t<N;t++){
 				for(i=0;i<NUM_VERTICES;i++) values[i]=vector[N*(vertexids[i]-1)+t];
@@ -1964,5 +1956,5 @@
 
 	/*update input*/
-	this->SetIntInput(this->inputs2,name,constant);
+	this->SetIntInput(this->inputs,name,constant);
 }
 /*}}}*/
@@ -1982,5 +1974,5 @@
 
 	/*update input*/
-	this->SetBoolInput(this->inputs2,name,constant);
+	this->SetBoolInput(this->inputs,name,constant);
 }
 /*}}}*/
@@ -1997,5 +1989,5 @@
 	parameters->FindParam(&migration_style,GroundinglineMigrationEnum);
 
-	Input2* input = this->GetInput2(MaskOceanLevelsetEnum); _assert_(input);
+	Input* input = this->GetInput(MaskOceanLevelsetEnum); _assert_(input);
 
 	if(migration_style==SubelementMigrationEnum){ //Floating if all nodes are floating
@@ -2017,5 +2009,5 @@
 bool       Element::IsGrounded(){/*{{{*/
 
-	Input2* input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(input);
+	Input* input=this->GetInput(MaskOceanLevelsetEnum); _assert_(input);
 	if(input->GetInputMax() > 0.){
 		return true;
@@ -2026,20 +2018,20 @@
 }/*}}}*/
 bool       Element::IsIceInElement(){/*{{{*/
-	Input2* input=this->GetInput2(MaskIceLevelsetEnum); _assert_(input);
+	Input* input=this->GetInput(MaskIceLevelsetEnum); _assert_(input);
 	return (input->GetInputMin()<0.);
 }
 /*}}}*/
 bool       Element::IsIceOnlyInElement(){/*{{{*/
-	Input2* input=this->GetInput2(MaskIceLevelsetEnum); _assert_(input);
+	Input* input=this->GetInput(MaskIceLevelsetEnum); _assert_(input);
 	return (input->GetInputMax()<0.);
 }
 /*}}}*/
 bool       Element::IsLandInElement(){/*{{{*/
-	Input2* input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(input);
+	Input* input=this->GetInput(MaskOceanLevelsetEnum); _assert_(input);
 	return (input->GetInputMax()>0.);
 }
 /*}}}*/
 bool       Element::IsOceanInElement(){/*{{{*/
-	Input2* input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(input);
+	Input* input=this->GetInput(MaskOceanLevelsetEnum); _assert_(input);
 	return (input->GetInputMin()<0.);
 }
@@ -2078,6 +2070,6 @@
 		this->parameters->FindParam(&mean_tf,&N,BasalforcingsIsmip6AverageTfEnum); _assert_(N==num_basins);
 	}
-	Input2* tf_input = this->GetInput2(BasalforcingsIsmip6TfShelfEnum);              _assert_(tf_input);
-	Input2* meltanomaly_input = this->GetInput2(BasalforcingsIsmip6MeltAnomalyEnum); _assert_(meltanomaly_input);
+	Input* tf_input = this->GetInput(BasalforcingsIsmip6TfShelfEnum);              _assert_(tf_input);
+	Input* meltanomaly_input = this->GetInput(BasalforcingsIsmip6MeltAnomalyEnum); _assert_(meltanomaly_input);
 	delta_t_basin = delta_t[basinid];
 	if(!islocal) mean_tf_basin = mean_tf[basinid];
@@ -2100,5 +2092,5 @@
 
 	/*Return basal melt rate*/
-	this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrate,P1DGEnum);
+	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrate,P1DGEnum);
 
 	/*Cleanup and return*/
@@ -2144,5 +2136,5 @@
 	}
 
-	this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
 	xDelete<IssmDouble>(base);
    xDelete<IssmDouble>(perturbation);
@@ -2171,5 +2163,5 @@
 	}
 
-	this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
 	xDelete<IssmDouble>(base);
 	xDelete<IssmDouble>(deepwaterel);
@@ -2221,5 +2213,5 @@
 	}
 
-	this->AddInput2(BasalforcingsGeothermalfluxEnum,values,P1Enum);
+	this->AddInput(BasalforcingsGeothermalfluxEnum,values,P1Enum);
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<IssmDouble>(values);
@@ -2318,9 +2310,9 @@
 		}
 	}
-	this->AddInput2(MaskOceanLevelsetEnum,&phi[0],P1Enum);
+	this->AddInput(MaskOceanLevelsetEnum,&phi[0],P1Enum);
 
 	/*Update inputs*/
-	this->AddInput2(SurfaceEnum,&s[0],P1Enum);
-	this->AddInput2(BaseEnum,&b[0],P1Enum);
+	this->AddInput(SurfaceEnum,&s[0],P1Enum);
+	this->AddInput(BaseEnum,&b[0],P1Enum);
 
 	/*Delete*/
@@ -2358,5 +2350,5 @@
 	}
 
-	this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
 	xDelete<IssmDouble>(base);
 	xDelete<IssmDouble>(bed);
@@ -2397,5 +2389,5 @@
 	}
 
-	this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
 	xDelete<IssmDouble>(base);
 	xDelete<IssmDouble>(values);
@@ -2430,8 +2422,8 @@
 
 	/*Recover present day temperature and precipitation*/
-	DatasetInput2* dinput1=this->GetDatasetInput2(SmbTemperaturesPresentdayEnum);   _assert_(dinput1);
-	DatasetInput2* dinput2=this->GetDatasetInput2(SmbTemperaturesLgmEnum);          _assert_(dinput2);
-	DatasetInput2* dinput3=this->GetDatasetInput2(SmbPrecipitationsPresentdayEnum); _assert_(dinput3);
-	DatasetInput2* dinput4=this->GetDatasetInput2(SmbPrecipitationsLgmEnum);        _assert_(dinput4);
+	DatasetInput* dinput1=this->GetDatasetInput(SmbTemperaturesPresentdayEnum);   _assert_(dinput1);
+	DatasetInput* dinput2=this->GetDatasetInput(SmbTemperaturesLgmEnum);          _assert_(dinput2);
+	DatasetInput* dinput3=this->GetDatasetInput(SmbPrecipitationsPresentdayEnum); _assert_(dinput3);
+	DatasetInput* dinput4=this->GetDatasetInput(SmbPrecipitationsLgmEnum);        _assert_(dinput4);
 
 	/*loop over vertices: */
@@ -2466,12 +2458,12 @@
 		for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlytemperatures[i*12+imonth];
 		switch(this->ObjectEnum()){
-			case TriaEnum:  this->inputs2->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
-			case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case TriaEnum:  this->inputs->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case PentaEnum: this->inputs->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
 			default: _error_("Not implemented yet");
 		}
 		for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlyprec[i*12+imonth]/yts;
 		switch(this->ObjectEnum()){
-			case TriaEnum:  this->inputs2->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
-			case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case TriaEnum:  this->inputs->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
+			case PentaEnum: this->inputs->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break;
 			default: _error_("Not implemented yet");
 		}
@@ -2523,6 +2515,6 @@
 	IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id])+1.;
 
-	Input2* dist_gl_input=this->GetInput2(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
-	Input2* dist_cf_input=this->GetInput2(DistanceToCalvingfrontEnum);  _assert_(dist_cf_input);
+	Input* dist_gl_input=this->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);
+	Input* dist_cf_input=this->GetInput(DistanceToCalvingfrontEnum);  _assert_(dist_cf_input);
 
 	/*Get dist_gl and dist_cf at center of element*/
@@ -2551,5 +2543,5 @@
 	if(boxid==-1) _error_("No boxid found for element " << this->Sid() << "!");
 
-	this->SetIntInput(this->inputs2,BasalforcingsPicoBoxIdEnum, boxid);
+	this->SetIntInput(this->inputs,BasalforcingsPicoBoxIdEnum, boxid);
 
 }/*}}}*/
@@ -2590,5 +2582,5 @@
 	this->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
 	this->parameters->FindParam(&isplume, BasalforcingsPicoIsplumeEnum);
-	Input2 *thickness_input    = this->GetInput2(ThicknessEnum);                         _assert_(thickness_input);
+	Input *thickness_input    = this->GetInput(ThicknessEnum);                         _assert_(thickness_input);
 	_assert_(basinid<=num_basins);
 
@@ -2614,5 +2606,5 @@
 		IssmDouble 	s1 				= soc_farocean/(nu*lambda);
 		IssmDouble* overturnings 	= xNew<IssmDouble>(NUM_VERTICES);
-		Input2 *overturningC_input = this->GetInput2(BasalforcingsPicoOverturningCoeffEnum); _assert_(overturningC_input);
+		Input *overturningC_input = this->GetInput(BasalforcingsPicoOverturningCoeffEnum); _assert_(overturningC_input);
 
 		/* Start looping on the number of verticies and calculate ocean vars */
@@ -2637,8 +2629,8 @@
 		}
 
-		if(!isplume) this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum);
-		this->AddInput2(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1DGEnum);
-		this->AddInput2(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1DGEnum);
-		this->AddInput2(BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1DGEnum);
+		if(!isplume) this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum);
+		this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1DGEnum);
+		this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1DGEnum);
+		this->AddInput(BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1DGEnum);
 
 		/*Cleanup and return*/
@@ -2673,7 +2665,7 @@
 		}
 
-		if(!isplume) this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum);
-		this->AddInput2(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1DGEnum);
-		this->AddInput2(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1DGEnum);
+		if(!isplume) this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum);
+		this->AddInput(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1DGEnum);
+		this->AddInput(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1DGEnum);
 
 		/*Cleanup and return*/
@@ -2731,10 +2723,10 @@
 
 	/*Get inputs*/
-	Input2* zgl_input         = this->GetInput2(GroundinglineHeightEnum);                     _assert_(zgl_input);
-	Input2* toc_input         = this->GetInput2(BasalforcingsPicoSubShelfOceanTempEnum);      _assert_(toc_input);
-	Input2* soc_input         = this->GetInput2(BasalforcingsPicoSubShelfOceanSalinityEnum);  _assert_(soc_input);
-	Input2* base_input        = this->GetInput2(BaseEnum);                                    _assert_(base_input);
-	Input2* baseslopex_input  = this->GetInput2(BaseSlopeXEnum);                              _assert_(baseslopex_input);
-	Input2* baseslopey_input  = this->GetInput2(BaseSlopeYEnum);                              _assert_(baseslopey_input);
+	Input* zgl_input         = this->GetInput(GroundinglineHeightEnum);                     _assert_(zgl_input);
+	Input* toc_input         = this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum);      _assert_(toc_input);
+	Input* soc_input         = this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum);  _assert_(soc_input);
+	Input* base_input        = this->GetInput(BaseEnum);                                    _assert_(base_input);
+	Input* baseslopex_input  = this->GetInput(BaseSlopeXEnum);                              _assert_(baseslopex_input);
+	Input* baseslopey_input  = this->GetInput(BaseSlopeYEnum);                              _assert_(baseslopey_input);
 	this->FindParam(&yts, ConstantsYtsEnum);
 
@@ -2786,5 +2778,5 @@
 
 	/*Save computed melt-rate*/
-	this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum);
+	this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum);
 
 	/*Cleanup and return*/
@@ -2833,6 +2825,6 @@
 
 	/*Get inputs*/
-	DatasetInput2* dinput =this->GetDatasetInput2(SmbMonthlytemperaturesEnum); _assert_(dinput);
-	DatasetInput2* dinput2=this->GetDatasetInput2(SmbPrecipitationEnum);       _assert_(dinput2);
+	DatasetInput* dinput =this->GetDatasetInput(SmbMonthlytemperaturesEnum); _assert_(dinput);
+	DatasetInput* dinput2=this->GetDatasetInput(SmbPrecipitationEnum);       _assert_(dinput2);
 
 	/*loop over vertices: */
@@ -2866,9 +2858,9 @@
 	 *     This parameter is set, if the user wants to define the
 	 *     pdd factors regionally, if issetpddfac==1 in the d18opdd method */
-	Input2* input  = NULL;
-	Input2* input2 = NULL;
+	Input* input  = NULL;
+	Input* input2 = NULL;
 	if(issetpddfac==1){
-		input  = this->GetInput2(SmbPddfacSnowEnum); _assert_(input);
-		input2 = this->GetInput2(SmbPddfacIceEnum); _assert_(input2);
+		input  = this->GetInput(SmbPddfacSnowEnum); _assert_(input);
+		input2 = this->GetInput(SmbPddfacIceEnum); _assert_(input2);
 	}
 
@@ -2901,8 +2893,8 @@
 	switch(this->ObjectEnum()){
 		case TriaEnum:
-			this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
-			this->AddInput2(SmbMassBalanceEnum,&agd[0],P1Enum);
-			this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum);
-			this->AddInput2(SmbMeltEnum,&melt[0],P1Enum);
+			this->AddInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
+			this->AddInput(SmbMassBalanceEnum,&agd[0],P1Enum);
+			this->AddInput(SmbAccumulationEnum,&accu[0],P1Enum);
+			this->AddInput(SmbMeltEnum,&melt[0],P1Enum);
 			break;
 		case PentaEnum:
@@ -2911,5 +2903,5 @@
 				 * the temperatures as they are for the base of the penta and
 				 * yse yearlytemperatures for the top*/
-				PentaInput2* temp_input = xDynamicCast<PentaInput2*>(this->GetInput2(TemperatureEnum)); _assert_(temp_input);
+				PentaInput* temp_input = xDynamicCast<PentaInput*>(this->GetInput(TemperatureEnum)); _assert_(temp_input);
 				switch(temp_input->GetInputInterpolationType()){
 					case P1Enum:
@@ -2935,5 +2927,5 @@
 				if(isenthalpy){
 					/*Convert that to enthalpy for the enthalpy model*/
-					PentaInput2* enth_input = xDynamicCast<PentaInput2*>(this->GetInput2(EnthalpyEnum)); _assert_(enth_input);
+					PentaInput* enth_input = xDynamicCast<PentaInput*>(this->GetInput(EnthalpyEnum)); _assert_(enth_input);
 					switch(enth_input->GetInputInterpolationType()){
 						case P1Enum:
@@ -2956,8 +2948,8 @@
 				}
 			}
-			this->AddInput2(SmbMassBalanceEnum,&agd[0],P1Enum);
-			this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
-			this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum);
-			this->AddInput2(SmbMeltEnum,&melt[0],P1Enum);
+			this->AddInput(SmbMassBalanceEnum,&agd[0],P1Enum);
+			this->AddInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
+			this->AddInput(SmbAccumulationEnum,&accu[0],P1Enum);
+			this->AddInput(SmbMeltEnum,&melt[0],P1Enum);
 			this->InputExtrude(TemperaturePDDEnum,-1);
 			this->InputExtrude(SmbMassBalanceEnum,-1);
@@ -3029,6 +3021,6 @@
 
 	/*Get inputs*/
-	DatasetInput2* dinput =this->GetDatasetInput2(SmbMonthlytemperaturesEnum); _assert_(dinput);
-	DatasetInput2* dinput2=this->GetDatasetInput2(SmbPrecipitationEnum);       _assert_(dinput2);
+	DatasetInput* dinput =this->GetDatasetInput(SmbMonthlytemperaturesEnum); _assert_(dinput);
+	DatasetInput* dinput2=this->GetDatasetInput(SmbPrecipitationEnum);       _assert_(dinput2);
 
 	/*loop over vertices: */
@@ -3077,9 +3069,9 @@
 	switch(this->ObjectEnum()){
 		case TriaEnum:
-			//this->AddInput2(TemperatureEnum,&yearlytemperatures[0],P1Enum);
-			this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
-			this->AddInput2(SmbMassBalanceEnum,&smb[0],P1Enum);
-			this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum);
-			this->AddInput2(SmbMeltEnum,&melt[0],P1Enum);
+			//this->AddInput(TemperatureEnum,&yearlytemperatures[0],P1Enum);
+			this->AddInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
+			this->AddInput(SmbMassBalanceEnum,&smb[0],P1Enum);
+			this->AddInput(SmbAccumulationEnum,&accu[0],P1Enum);
+			this->AddInput(SmbMeltEnum,&melt[0],P1Enum);
 			break;
 		case PentaEnum:
@@ -3095,5 +3087,5 @@
 
 					/*FIXME: look at other function Element::PositiveDegreeDay and propagate change! Just assert for now*/
-					PentaInput2* temp_input = xDynamicCast<PentaInput2*>(this->GetInput2(TemperatureEnum)); _assert_(temp_input);
+					PentaInput* temp_input = xDynamicCast<PentaInput*>(this->GetInput(TemperatureEnum)); _assert_(temp_input);
 					switch(temp_input->GetInputInterpolationType()){
 						case P1Enum:
@@ -3118,5 +3110,5 @@
 					if(isenthalpy){
 						/*Convert that to enthalpy for the enthalpy model*/
-						PentaInput2* enth_input = xDynamicCast<PentaInput2*>(this->GetInput2(EnthalpyEnum)); _assert_(enth_input);
+						PentaInput* enth_input = xDynamicCast<PentaInput*>(this->GetInput(EnthalpyEnum)); _assert_(enth_input);
 						switch(enth_input->GetInputInterpolationType()){
 							case P1Enum:
@@ -3141,8 +3133,8 @@
 				}
 			}
-			this->AddInput2(SmbMassBalanceEnum,&smb[0],P1Enum);
-			this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
-			this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum);
-			this->AddInput2(SmbMeltEnum,&melt[0],P1Enum);
+			this->AddInput(SmbMassBalanceEnum,&smb[0],P1Enum);
+			this->AddInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum);
+			this->AddInput(SmbAccumulationEnum,&accu[0],P1Enum);
+			this->AddInput(SmbMeltEnum,&melt[0],P1Enum);
 			this->InputExtrude(TemperaturePDDEnum,-1);
 			this->InputExtrude(SmbMassBalanceEnum,-1);
@@ -3236,13 +3228,13 @@
 		case SurfaceCrevasseEnum: this->CalvingCrevasseDepth(); break;
 		case SigmaVMEnum: this->CalvingRateVonmises(); break;
-		case PartitioningEnum: this->inputs2->SetInput(PartitioningEnum,this->lid,IssmComm::GetRank()); break;
+		case PartitioningEnum: this->inputs->SetInput(PartitioningEnum,this->lid,IssmComm::GetRank()); break;
 	}
 
 	/*If this input is not already in Inputs, maybe it needs to be computed?*/
-	switch(this->inputs2->GetInputObjectEnum(output_enum)){
-		case TriaInput2Enum:
-		case PentaInput2Enum:
-		case TransientInput2Enum:{
-			Input2* input2 = this->GetInput2(output_enum);
+	switch(this->inputs->GetInputObjectEnum(output_enum)){
+		case TriaInputEnum:
+		case PentaInputEnum:
+		case TransientInputEnum:{
+			Input* input2 = this->GetInput(output_enum);
 			if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
 			*pinterpolation   = input2->GetResultInterpolation();
@@ -3251,17 +3243,17 @@
 			}
 			break;
-		case BoolInput2Enum:
+		case BoolInputEnum:
 			*pinterpolation   = P0Enum;
 			*pnodesperelement = 1;
 			*parray_size      = 1;
 			break;
-		case IntInput2Enum:
+		case IntInputEnum:
 			*pinterpolation   = P0Enum;
 			*pnodesperelement = 1;
 			*parray_size      = 1;
 			break;
-		case ArrayInput2Enum:{
+		case ArrayInputEnum:{
 			int M;
-			this->inputs2->GetArray(output_enum,this->lid,NULL,&M);
+			this->inputs->GetArray(output_enum,this->lid,NULL,&M);
 			*pinterpolation   = P0ArrayEnum;
 			*pnodesperelement = 1;
@@ -3270,5 +3262,5 @@
 			break;
 		default:
-			_error_("Input type \""<<EnumToStringx(this->inputs2->GetInputObjectEnum(output_enum))<<"\" not supported yet (While trying to return "<<EnumToStringx(output_enum)<<")");
+			_error_("Input type \""<<EnumToStringx(this->inputs->GetInputObjectEnum(output_enum))<<"\" not supported yet (While trying to return "<<EnumToStringx(output_enum)<<")");
 	}
 
@@ -3281,12 +3273,12 @@
 
 	/*Find input*/
-	Input2* input=this->GetInput2(output_enum);
+	Input* input=this->GetInput(output_enum);
 	if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
 
 	/*Cast to ElementInput*/
-	if(input->ObjectEnum()!=TriaInput2Enum && input->ObjectEnum()!=PentaInput2Enum){
-		_error_("Input "<<EnumToStringx(output_enum)<<" is not an ElementInput2");
-	}
-	ElementInput2* element_input = xDynamicCast<ElementInput2*>(input);
+	if(input->ObjectEnum()!=TriaInputEnum && input->ObjectEnum()!=PentaInputEnum){
+		_error_("Input "<<EnumToStringx(output_enum)<<" is not an ElementInput");
+	}
+	ElementInput* element_input = xDynamicCast<ElementInput*>(input);
 
 	/*Get Number of nodes and make sure that it is the same as the one provided*/
@@ -3302,5 +3294,5 @@
 	IssmDouble* array = NULL;
 	int         m;
-	this->inputs2->GetArray(output_enum,this->lid,&array,&m);
+	this->inputs->GetArray(output_enum,this->lid,&array,&m);
 	for(int i=0;i<m;i++) values[this->Sid()*ncols + i] = array[i];
 	xDelete<IssmDouble>(array);
@@ -3313,10 +3305,10 @@
 	int        sidlist[MAXVERTICES];
 
-	switch(this->inputs2->GetInputObjectEnum(output_enum)){
-		case TriaInput2Enum:
-		case PentaInput2Enum:
-		case TransientInput2Enum:{
-
-			Input2* input2 = this->GetInput2(output_enum);
+	switch(this->inputs->GetInputObjectEnum(output_enum)){
+		case TriaInputEnum:
+		case PentaInputEnum:
+		case TransientInputEnum:{
+
+			Input* input2 = this->GetInput(output_enum);
 			if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");
 
@@ -3348,30 +3340,30 @@
 			}
 			break;
-		case BoolInput2Enum:
+		case BoolInputEnum:
 			bool bvalue;
-			this->GetInput2Value(&bvalue,output_enum);
+			this->GetInputValue(&bvalue,output_enum);
 			vector->SetValue(this->Sid(),reCast<IssmDouble>(bvalue),INS_VAL);
 			break;
-		case IntInput2Enum:
+		case IntInputEnum:
 			int ivalue;
-			this->GetInput2Value(&ivalue,output_enum);
+			this->GetInputValue(&ivalue,output_enum);
 			vector->SetValue(this->Sid(),reCast<IssmDouble>(ivalue),INS_VAL);
 			break;
 		default:
-			_error_("Input type \""<<EnumToStringx(this->inputs2->GetInputObjectEnum(output_enum))<<"\" not supported yet");
+			_error_("Input type \""<<EnumToStringx(this->inputs->GetInputObjectEnum(output_enum))<<"\" not supported yet");
 	}
 
 } /*}}}*/
-void       Element::SetBoolInput(Inputs2* inputs2,int enum_in,bool value){/*{{{*/
-
-	_assert_(inputs2);
-	inputs2->SetInput(enum_in,this->lid,value);
-
-}
-/*}}}*/
-void       Element::SetIntInput(Inputs2* inputs2,int enum_in,int value){/*{{{*/
-
-	_assert_(inputs2);
-	inputs2->SetInput(enum_in,this->lid,value);
+void       Element::SetBoolInput(Inputs* inputs,int enum_in,bool value){/*{{{*/
+
+	_assert_(inputs);
+	inputs->SetInput(enum_in,this->lid,value);
+
+}
+/*}}}*/
+void       Element::SetIntInput(Inputs* inputs,int enum_in,int value){/*{{{*/
+
+	_assert_(inputs);
+	inputs->SetInput(enum_in,this->lid,value);
 
 }
@@ -3434,5 +3426,5 @@
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
 	if(analysis_type==StressbalanceAnalysisEnum){
-		this->GetInput2Value(&approximation,ApproximationEnum);
+		this->GetInputValue(&approximation,ApproximationEnum);
 		if(approximation==SSAHOApproximationEnum || approximation==SSAFSApproximationEnum){
 			parameters->FindParam(&numlayers,MeshNumberoflayersEnum);
@@ -3499,13 +3491,13 @@
 	for (int iday = 0; iday < 365; iday++){
 		/* Retrieve inputs: */
-		Input2* dailysnowfall_input    = this->GetInput2(SmbDailysnowfallEnum,time_yr+(iday+1)/365.*yts); _assert_(dailysnowfall_input);
-		Input2* dailyrainfall_input    = this->GetInput2(SmbDailyrainfallEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyrainfall_input);
-		Input2* dailydlradiation_input = this->GetInput2(SmbDailydlradiationEnum,time_yr+(iday+1)/365.*yts); _assert_(dailydlradiation_input);
-		Input2* dailydsradiation_input = this->GetInput2(SmbDailydsradiationEnum,time_yr+(iday+1)/365.*yts); _assert_(dailydsradiation_input);
-		Input2* dailywindspeed_input   = this->GetInput2(SmbDailywindspeedEnum,time_yr+(iday+1)/365.*yts); _assert_(dailywindspeed_input);
-		Input2* dailypressure_input    = this->GetInput2(SmbDailypressureEnum,time_yr+(iday+1)/365.*yts); _assert_(dailypressure_input);
-		Input2* dailyairdensity_input  = this->GetInput2(SmbDailyairdensityEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyairdensity_input);
-		Input2* dailyairhumidity_input = this->GetInput2(SmbDailyairhumidityEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyairhumidity_input);
-		Input2* dailytemperature_input = this->GetInput2(SmbDailytemperatureEnum,time_yr+(iday+1)/365.*yts); _assert_(dailytemperature_input);
+		Input* dailysnowfall_input    = this->GetInput(SmbDailysnowfallEnum,time_yr+(iday+1)/365.*yts); _assert_(dailysnowfall_input);
+		Input* dailyrainfall_input    = this->GetInput(SmbDailyrainfallEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyrainfall_input);
+		Input* dailydlradiation_input = this->GetInput(SmbDailydlradiationEnum,time_yr+(iday+1)/365.*yts); _assert_(dailydlradiation_input);
+		Input* dailydsradiation_input = this->GetInput(SmbDailydsradiationEnum,time_yr+(iday+1)/365.*yts); _assert_(dailydsradiation_input);
+		Input* dailywindspeed_input   = this->GetInput(SmbDailywindspeedEnum,time_yr+(iday+1)/365.*yts); _assert_(dailywindspeed_input);
+		Input* dailypressure_input    = this->GetInput(SmbDailypressureEnum,time_yr+(iday+1)/365.*yts); _assert_(dailypressure_input);
+		Input* dailyairdensity_input  = this->GetInput(SmbDailyairdensityEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyairdensity_input);
+		Input* dailyairhumidity_input = this->GetInput(SmbDailyairhumidityEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyairhumidity_input);
+		Input* dailytemperature_input = this->GetInput(SmbDailytemperatureEnum,time_yr+(iday+1)/365.*yts); _assert_(dailytemperature_input);
 
 		for(int iv=0;iv<NUM_VERTICES;iv++){
@@ -3550,8 +3542,8 @@
 	switch(this->ObjectEnum()){
 		case TriaEnum:
-			this->AddInput2(TemperatureSEMICEnum,&tsurf_out[0],P1Enum); // TODO add TemperatureSEMICEnum to EnumDefinitions
-			this->AddInput2(SmbMassBalanceEnum,&smb_out[0],P1Enum);
-			this->AddInput2(SmbAccumulationEnum,&saccu_out[0],P1Enum);
-			this->AddInput2(SmbMeltEnum,&smelt_out[0],P1Enum);
+			this->AddInput(TemperatureSEMICEnum,&tsurf_out[0],P1Enum); // TODO add TemperatureSEMICEnum to EnumDefinitions
+			this->AddInput(SmbMassBalanceEnum,&smb_out[0],P1Enum);
+			this->AddInput(SmbAccumulationEnum,&saccu_out[0],P1Enum);
+			this->AddInput(SmbMeltEnum,&smelt_out[0],P1Enum);
 			break;
 		case PentaEnum:
@@ -3711,16 +3703,16 @@
 	/*}}}*/
 	/*Retrieve inputs: {{{*/
-	Input2 *zTop_input          = this->GetInput2(SmbZTopEnum);         _assert_(zTop_input);
-	Input2 *dzTop_input         = this->GetInput2(SmbDzTopEnum);        _assert_(dzTop_input);
-	Input2 *dzMin_input         = this->GetInput2(SmbDzMinEnum);        _assert_(dzMin_input);
-	Input2 *zMax_input          = this->GetInput2(SmbZMaxEnum);         _assert_(zMax_input);
-	Input2 *zMin_input          = this->GetInput2(SmbZMinEnum);         _assert_(zMin_input);
-	Input2 *zY_input            = this->GetInput2(SmbZYEnum);           _assert_(zY_input);
-	Input2 *Tmean_input         = this->GetInput2(SmbTmeanEnum);        _assert_(Tmean_input);
-	Input2 *Vmean_input         = this->GetInput2(SmbVmeanEnum);        _assert_(Vmean_input);
-	Input2 *C_input             = this->GetInput2(SmbCEnum);            _assert_(C_input);
-	Input2 *Tz_input            = this->GetInput2(SmbTzEnum);           _assert_(Tz_input);
-	Input2 *Vz_input            = this->GetInput2(SmbVzEnum);           _assert_(Vz_input);
-	Input2 *EC_input            = NULL;
+	Input *zTop_input          = this->GetInput(SmbZTopEnum);         _assert_(zTop_input);
+	Input *dzTop_input         = this->GetInput(SmbDzTopEnum);        _assert_(dzTop_input);
+	Input *dzMin_input         = this->GetInput(SmbDzMinEnum);        _assert_(dzMin_input);
+	Input *zMax_input          = this->GetInput(SmbZMaxEnum);         _assert_(zMax_input);
+	Input *zMin_input          = this->GetInput(SmbZMinEnum);         _assert_(zMin_input);
+	Input *zY_input            = this->GetInput(SmbZYEnum);           _assert_(zY_input);
+	Input *Tmean_input         = this->GetInput(SmbTmeanEnum);        _assert_(Tmean_input);
+	Input *Vmean_input         = this->GetInput(SmbVmeanEnum);        _assert_(Vmean_input);
+	Input *C_input             = this->GetInput(SmbCEnum);            _assert_(C_input);
+	Input *Tz_input            = this->GetInput(SmbTzEnum);           _assert_(Tz_input);
+	Input *Vz_input            = this->GetInput(SmbVzEnum);           _assert_(Vz_input);
+	Input *EC_input            = NULL;
 
 	/*Retrieve input values:*/
@@ -3747,17 +3739,17 @@
 		//dz[i] << "\n");
 
-		this->inputs2->GetArray(SmbDziniEnum,this->lid,&dzini,&m);
-		this->inputs2->GetArray(SmbDiniEnum,this->lid,&dini,&m);
-		this->inputs2->GetArray(SmbReiniEnum,this->lid,&reini,&m);
-		this->inputs2->GetArray(SmbGdniniEnum,this->lid,&gdnini,&m);
-		this->inputs2->GetArray(SmbGspiniEnum,this->lid,&gspini,&m);
-		this->inputs2->GetArray(SmbWiniEnum,this->lid,&Wini,&m);
-		this->inputs2->GetArray(SmbAiniEnum,this->lid,&aini,&m);
-		this->inputs2->GetArray(SmbTiniEnum,this->lid,&Tini,&m);
-		EC_input = this->GetInput2(SmbECiniEnum);  _assert_(EC_input);
+		this->inputs->GetArray(SmbDziniEnum,this->lid,&dzini,&m);
+		this->inputs->GetArray(SmbDiniEnum,this->lid,&dini,&m);
+		this->inputs->GetArray(SmbReiniEnum,this->lid,&reini,&m);
+		this->inputs->GetArray(SmbGdniniEnum,this->lid,&gdnini,&m);
+		this->inputs->GetArray(SmbGspiniEnum,this->lid,&gspini,&m);
+		this->inputs->GetArray(SmbWiniEnum,this->lid,&Wini,&m);
+		this->inputs->GetArray(SmbAiniEnum,this->lid,&aini,&m);
+		this->inputs->GetArray(SmbTiniEnum,this->lid,&Tini,&m);
+		EC_input = this->GetInput(SmbECiniEnum);  _assert_(EC_input);
 		EC_input->GetInputAverage(&EC);
 
 		/*Retrieve the correct value of m (without the zeroes at the end)*/
-		this->GetInput2Value(&m,SmbSizeiniEnum);
+		this->GetInputValue(&m,SmbSizeiniEnum);
 
 		if(m==2){ //Snow properties are initialized with default values. Vertical grid has to be initialized too
@@ -3799,17 +3791,17 @@
 
 		/*Flag the initialization:*/
-		this->SetBoolInput(this->inputs2,SmbIsInitializedEnum,true);
+		this->SetBoolInput(this->inputs,SmbIsInitializedEnum,true);
 	}
 	else{
 		/*Recover inputs: */
-		this->inputs2->GetArray(SmbDzEnum,this->lid,&dz,&m);
-		this->inputs2->GetArray(SmbDEnum,this->lid,&d,&m);
-		this->inputs2->GetArray(SmbReEnum,this->lid,&re,&m);
-		this->inputs2->GetArray(SmbGdnEnum,this->lid,&gdn,&m);
-		this->inputs2->GetArray(SmbGspEnum,this->lid,&gsp,&m);
-		this->inputs2->GetArray(SmbWEnum,this->lid,&W,&m);
-		this->inputs2->GetArray(SmbAEnum,this->lid,&a,&m);
-		this->inputs2->GetArray(SmbTEnum,this->lid,&T,&m);
-		EC_input = this->GetInput2(SmbECDtEnum);  _assert_(EC_input);
+		this->inputs->GetArray(SmbDzEnum,this->lid,&dz,&m);
+		this->inputs->GetArray(SmbDEnum,this->lid,&d,&m);
+		this->inputs->GetArray(SmbReEnum,this->lid,&re,&m);
+		this->inputs->GetArray(SmbGdnEnum,this->lid,&gdn,&m);
+		this->inputs->GetArray(SmbGspEnum,this->lid,&gsp,&m);
+		this->inputs->GetArray(SmbWEnum,this->lid,&W,&m);
+		this->inputs->GetArray(SmbAEnum,this->lid,&a,&m);
+		this->inputs->GetArray(SmbTEnum,this->lid,&T,&m);
+		EC_input = this->GetInput(SmbECDtEnum);  _assert_(EC_input);
 		EC_input->GetInputAverage(&EC);
 
@@ -3833,17 +3825,17 @@
 	/*Get daily accumulated inputs {{{*/
 	if (count>1){
-		Input2 *sumEC_input         = this->GetInput2(SmbECEnum);  _assert_(sumEC_input);
-		Input2 *sumM_input          = this->GetInput2(SmbMeltEnum);  _assert_(sumM_input);
-		Input2 *sumR_input          = this->GetInput2(SmbRunoffEnum);  _assert_(sumR_input);
-		Input2 *sumP_input          = this->GetInput2(SmbPrecipitationEnum);  _assert_(sumP_input);
-		Input2 *ULW_input           = this->GetInput2(SmbMeanULWEnum);  _assert_(ULW_input);
-		Input2 *LW_input            = this->GetInput2(SmbNetLWEnum);  _assert_(LW_input);
-		Input2 *SW_input            = this->GetInput2(SmbNetSWEnum);  _assert_(SW_input);
-		Input2 *LHF_input           = this->GetInput2(SmbMeanLHFEnum);  _assert_(LHF_input);
-		Input2 *SHF_input           = this->GetInput2(SmbMeanSHFEnum);  _assert_(SHF_input);
-		Input2 *DzAdd_input         = this->GetInput2(SmbDzAddEnum);  _assert_(DzAdd_input);
-		Input2 *MassAdd_input       = this->GetInput2(SmbMAddEnum);  _assert_(MassAdd_input);
-		Input2 *InitMass_input      = this->GetInput2(SmbMInitnum);  _assert_(InitMass_input);
-		Input2 *sumMsurf_input         = this->GetInput2(SmbMSurfEnum);  _assert_(sumMsurf_input);
+		Input *sumEC_input         = this->GetInput(SmbECEnum);  _assert_(sumEC_input);
+		Input *sumM_input          = this->GetInput(SmbMeltEnum);  _assert_(sumM_input);
+		Input *sumR_input          = this->GetInput(SmbRunoffEnum);  _assert_(sumR_input);
+		Input *sumP_input          = this->GetInput(SmbPrecipitationEnum);  _assert_(sumP_input);
+		Input *ULW_input           = this->GetInput(SmbMeanULWEnum);  _assert_(ULW_input);
+		Input *LW_input            = this->GetInput(SmbNetLWEnum);  _assert_(LW_input);
+		Input *SW_input            = this->GetInput(SmbNetSWEnum);  _assert_(SW_input);
+		Input *LHF_input           = this->GetInput(SmbMeanLHFEnum);  _assert_(LHF_input);
+		Input *SHF_input           = this->GetInput(SmbMeanSHFEnum);  _assert_(SHF_input);
+		Input *DzAdd_input         = this->GetInput(SmbDzAddEnum);  _assert_(DzAdd_input);
+		Input *MassAdd_input       = this->GetInput(SmbMAddEnum);  _assert_(MassAdd_input);
+		Input *InitMass_input      = this->GetInput(SmbMInitnum);  _assert_(InitMass_input);
+		Input *sumMsurf_input         = this->GetInput(SmbMSurfEnum);  _assert_(sumMsurf_input);
 
 		ULW_input->GetInputAverage(&meanULW);
@@ -3870,13 +3862,13 @@
 
 	// Get time forcing inputs
-	Input2 *Ta_input  = this->GetInput2(SmbTaEnum,timeinputs);    _assert_(Ta_input);
-	Input2 *V_input   = this->GetInput2(SmbVEnum,timeinputs);     _assert_(V_input);
-	Input2 *Dlwr_input= this->GetInput2(SmbDlwrfEnum,timeinputs); _assert_(Dlwr_input);
-	Input2 *Dswr_input= this->GetInput2(SmbDswrfEnum,timeinputs); _assert_(Dswr_input);
-	Input2 *P_input   = this->GetInput2(SmbPEnum,timeinputs);     _assert_(P_input);
-	Input2 *eAir_input= this->GetInput2(SmbEAirEnum,timeinputs);  _assert_(eAir_input);
-	Input2 *pAir_input= this->GetInput2(SmbPAirEnum,timeinputs);  _assert_(pAir_input);
-	Input2 *teValue_input= this->GetInput2(SmbTeValueEnum,timeinputs); _assert_(teValue_input);
-	Input2 *aValue_input= this->GetInput2(SmbAValueEnum,timeinputs); _assert_(aValue_input);
+	Input *Ta_input  = this->GetInput(SmbTaEnum,timeinputs);    _assert_(Ta_input);
+	Input *V_input   = this->GetInput(SmbVEnum,timeinputs);     _assert_(V_input);
+	Input *Dlwr_input= this->GetInput(SmbDlwrfEnum,timeinputs); _assert_(Dlwr_input);
+	Input *Dswr_input= this->GetInput(SmbDswrfEnum,timeinputs); _assert_(Dswr_input);
+	Input *P_input   = this->GetInput(SmbPEnum,timeinputs);     _assert_(P_input);
+	Input *eAir_input= this->GetInput(SmbEAirEnum,timeinputs);  _assert_(eAir_input);
+	Input *pAir_input= this->GetInput(SmbPAirEnum,timeinputs);  _assert_(pAir_input);
+	Input *teValue_input= this->GetInput(SmbTeValueEnum,timeinputs); _assert_(teValue_input);
+	Input *aValue_input= this->GetInput(SmbAValueEnum,timeinputs); _assert_(aValue_input);
 
 	/*extract daily data:{{{*/
@@ -3994,12 +3986,12 @@
 
 	/*Save generated inputs: */
-	this->inputs2->SetArrayInput(SmbDzEnum,this->lid,dz,m);
-	this->inputs2->SetArrayInput(SmbDEnum,this->lid,d,m);
-	this->inputs2->SetArrayInput(SmbReEnum,this->lid,re,m);
-	this->inputs2->SetArrayInput(SmbGdnEnum,this->lid,gdn,m);
-	this->inputs2->SetArrayInput(SmbGspEnum,this->lid,gsp,m);
-	this->inputs2->SetArrayInput(SmbTEnum,this->lid,T,m);
-	this->inputs2->SetArrayInput(SmbWEnum,this->lid,W,m);
-	this->inputs2->SetArrayInput(SmbAEnum,this->lid,a,m);
+	this->inputs->SetArrayInput(SmbDzEnum,this->lid,dz,m);
+	this->inputs->SetArrayInput(SmbDEnum,this->lid,d,m);
+	this->inputs->SetArrayInput(SmbReEnum,this->lid,re,m);
+	this->inputs->SetArrayInput(SmbGdnEnum,this->lid,gdn,m);
+	this->inputs->SetArrayInput(SmbGspEnum,this->lid,gsp,m);
+	this->inputs->SetArrayInput(SmbTEnum,this->lid,T,m);
+	this->inputs->SetArrayInput(SmbWEnum,this->lid,W,m);
+	this->inputs->SetArrayInput(SmbAEnum,this->lid,a,m);
 	this->SetElementInput(SmbECEnum,sumEC/dt/rho_ice);
 	this->SetElementInput(SmbMassBalanceEnum,(sumP + sumEC -sumR)/dt/rho_ice);
@@ -4043,5 +4035,5 @@
 }
 /*}}}*/
-void       Element::StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -4063,5 +4055,5 @@
 
 }/*}}}*/
-void       Element::StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
+void       Element::StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 	/*Compute the 3d Strain Rate (6 components):
 	 *
@@ -4092,5 +4084,5 @@
 
 }/*}}}*/
-void       Element::StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 	/*Compute the 3d Blatter/HOStrain Rate (5 components):
 	 *
@@ -4122,5 +4114,5 @@
 
 }/*}}}*/
-void       Element::StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 	/*Compute the 2d Blatter/HOStrain Rate (2 components):
 	 *
@@ -4146,5 +4138,5 @@
 
 }/*}}}*/
-void       Element::StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void       Element::StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -4165,5 +4157,5 @@
 
 }/*}}}*/
-void       Element::StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input){/*{{{*/
+void       Element::StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -4201,14 +4193,14 @@
 	/*Retrieve all inputs and parameters*/
 	this->GetVerticesCoordinatesBase(&xyz_list);
-	Input2* sigma_xx_input  = this->GetInput2(StressTensorxxEnum); _assert_(sigma_xx_input);
-	Input2* sigma_yy_input  = this->GetInput2(StressTensoryyEnum); _assert_(sigma_yy_input);
-	Input2* sigma_xy_input  = this->GetInput2(StressTensorxyEnum); _assert_(sigma_xy_input);
-	Input2* sigma_xz_input  = NULL;
-	Input2* sigma_yz_input  = NULL;
-	Input2* sigma_zz_input  = NULL;
+	Input* sigma_xx_input  = this->GetInput(StressTensorxxEnum); _assert_(sigma_xx_input);
+	Input* sigma_yy_input  = this->GetInput(StressTensoryyEnum); _assert_(sigma_yy_input);
+	Input* sigma_xy_input  = this->GetInput(StressTensorxyEnum); _assert_(sigma_xy_input);
+	Input* sigma_xz_input  = NULL;
+	Input* sigma_yz_input  = NULL;
+	Input* sigma_zz_input  = NULL;
 	if(dim==3){
-		sigma_xz_input  = this->GetInput2(StressTensorxzEnum); _assert_(sigma_xz_input);
-		sigma_yz_input  = this->GetInput2(StressTensoryzEnum); _assert_(sigma_yz_input);
-		sigma_zz_input  = this->GetInput2(StressTensorzzEnum); _assert_(sigma_zz_input);
+		sigma_xz_input  = this->GetInput(StressTensorxzEnum); _assert_(sigma_xz_input);
+		sigma_yz_input  = this->GetInput(StressTensoryzEnum); _assert_(sigma_yz_input);
+		sigma_zz_input  = this->GetInput(StressTensorzzEnum); _assert_(sigma_zz_input);
 	}
 
@@ -4260,5 +4252,5 @@
 
 	/*Create input*/
-	this->AddInput2(StressMaxPrincipalEnum,maxprincipal,P1Enum);
+	this->AddInput(StressMaxPrincipalEnum,maxprincipal,P1Enum);
 
 	/*Clean up and return*/
@@ -4544,7 +4536,7 @@
 	/*Retrieve all inputs and parameters*/
 	this->GetVerticesCoordinates(&xyz_list);
-	Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input = this->GetInput2(VzEnum); _assert_(vz_input);
+	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input = this->GetInput(VzEnum); _assert_(vz_input);
 
 	/*loop over vertices: */
@@ -4559,5 +4551,5 @@
 
 	/*Create PentaVertex input, which will hold the basal friction:*/
-	this->AddInput2(ViscousHeatingEnum,viscousheating,P1Enum);
+	this->AddInput(ViscousHeatingEnum,viscousheating,P1Enum);
 
 	/*Clean up and return*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 25379)
@@ -23,10 +23,10 @@
 class Materials;
 class Material;
-class Inputs2;
 class Inputs;
-class Input2;
+class Inputs;
 class Input;
-class ElementInput2;
-class DatasetInput2;
+class Input;
+class ElementInput;
+class DatasetInput;
 class IoModel;
 class SealevelMasks;
@@ -45,5 +45,5 @@
 		int          sid;
 		int          lid;
-		Inputs2     *inputs2;
+		Inputs     *inputs;
 		Node       **nodes;
 		Vertex     **vertices;
@@ -75,8 +75,8 @@
 		void               SmbGradCompParameterization(void);
 		IssmDouble         Divergence(void);
-		void               dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
-		void               dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void               dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void               dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
+		void               dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+		void               dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void               dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void               dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
 		void               Echo();
 		void               FindParam(bool* pvalue,int paramenum);
@@ -101,7 +101,5 @@
 		void               GetInputValue(bool* pvalue,int enum_type);
 		void               GetInputValue(int* pvalue,int enum_type);
-		void               GetInput2Value(bool* pvalue,int enum_type);
-		void               GetInput2Value(int* pvalue,int enum_type);
-		void               GetInput2Value(IssmDouble* pvalue,int enum_type);
+		void               GetInputValue(IssmDouble* pvalue,int enum_type);
 		void               GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type);
 		Node*              GetNode(int nodeindex);
@@ -130,7 +128,7 @@
 		IssmDouble         IceVolumeAboveFloatation(IssmDouble* mask, bool scaled);
 		int                Id();
-		void               InputCreate(IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
-		void               ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,Inputs2*inputs2,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id);
-		void					 DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum);
+		void               InputCreate(IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code);
+		void               ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,Inputs*inputs,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id);
+		void					 DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs* inputs,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum);
 		void               InputUpdateFromConstant(IssmDouble constant, int name);
 		void               InputUpdateFromConstant(int constant, int name);
@@ -167,16 +165,16 @@
 		void               ResultToVector(Vector<IssmDouble>* vector,int output_enum);
 		void               SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum);
-		void               SetBoolInput(Inputs2* inputs2,int enum_in,bool value);
-
-		void               SetIntInput(Inputs2* inputs2,int enum_in,int value);
+		void               SetBoolInput(Inputs* inputs,int enum_in,bool value);
+
+		void               SetIntInput(Inputs* inputs,int enum_in,int value);
 		void               SmbSemic();
 		int                Sid();
 		void               SmbGemb(IssmDouble timeinputs, int count);
-		void               StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void               StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
-		void               StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void               StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void               StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void               StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input);
+		void               StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void               StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+		void               StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void               StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void               StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void               StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input);
 		void               StressMaxPrincipalCreateInput(void);
 		IssmDouble         TotalFloatingBmb(IssmDouble* mask, bool scaled);
@@ -213,8 +211,8 @@
 
 		/*Virtual functions*/
-		virtual void       AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
-		virtual void       AddInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
-		virtual void       AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){_error_("not supported yet");};
-		virtual void       DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){_error_("not supported");};
+		virtual void       AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
+		virtual void       AddInput(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");};
+		virtual void       AddControlInput(int input_enum,Inputs* inputs,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){_error_("not supported yet");};
+		virtual void       DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs* inputs,IoModel* iomodel,int input_enum){_error_("not supported");};
 		virtual void       AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
 		virtual void		 BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");};
@@ -230,5 +228,5 @@
 		virtual void       ComputeStressTensor(void)=0;
 		virtual void       ComputeEsaStrainAndVorticity(void)=0;
-		virtual void       Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs2* inputs2in)=0;
+		virtual void       Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs* inputsin)=0;
 		virtual void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int M,int N,int interp)=0;
 		virtual void       ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum,int control_interp)=0;
@@ -247,12 +245,12 @@
 		virtual IssmDouble GetIcefrontArea(){_error_("not implemented");};
 		virtual void       GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
-		virtual DatasetInput2* GetDatasetInput2(int inputenum){_error_("not implemented");};
-		virtual Input2*    GetInput2(int inputenum)=0;
-		virtual Input2*    GetInput2(int inputenum,IssmDouble time)=0;
-		virtual Input2*    GetInput2(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method)=0;
+		virtual DatasetInput* GetDatasetInput(int inputenum){_error_("not implemented");};
+		virtual Input*    GetInput(int inputenum)=0;
+		virtual Input*    GetInput(int inputenum,IssmDouble time)=0;
+		virtual Input*    GetInput(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method)=0;
 		virtual void       GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");};
 		virtual void       GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");};
-		virtual void       GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0;
-		virtual void       GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0;
+		virtual void       GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value)=0;
+		virtual void       GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value)=0;
 		virtual void       GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level)=0;
 		virtual void       GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues)=0;
@@ -332,6 +330,6 @@
 		virtual void       RignotMeltParameterization(void){_error_("not implemented yet");};
 		virtual void       SetElementInput(int enum_in,IssmDouble values){_error_("not implemented yet");};
-		virtual void       SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values){_error_("not implemented yet");};
-		virtual void       SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){_error_("not implemented yet");};
+		virtual void       SetElementInput(Inputs* inputs,int enum_in,IssmDouble values){_error_("not implemented yet");};
+		virtual void       SetElementInput(Inputs* inputs,int numindices,int* indices,IssmDouble* values,int enum_in){_error_("not implemented yet");};
 		virtual void       SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int M,int N)=0;
 		virtual void       SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
@@ -352,5 +350,5 @@
 		virtual IssmDouble TotalGroundedBmb(bool scaled)=0;
 		virtual IssmDouble TotalSmb(bool scaled)=0;
-		virtual void       Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
+		virtual void       Update(Inputs* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;
 		virtual void       UpdateConstraintsExtrudeFromBase(void)=0;
 		virtual void       UpdateConstraintsExtrudeFromTop(void)=0;
@@ -362,5 +360,5 @@
 		virtual void       VerticalSegmentIndices(int** pindices,int* pnumseg)=0;
 		virtual void       VerticalSegmentIndicesBase(int** pindices,int* pnumseg)=0;
-		virtual void       ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){_error_("not implemented yet");};
+		virtual void       ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};
 		virtual void       WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");};
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Elements.cpp	(revision 25379)
@@ -34,5 +34,5 @@
 
 /*Object management*/
-void Elements::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs2* inputs2){/*{{{*/
+void Elements::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs* inputs){/*{{{*/
 
 	vector<Object*>::iterator object;
@@ -40,5 +40,5 @@
 	for(object=objects.begin() ; object < objects.end(); object++ ){
 		Element* element=xDynamicCast<Element*>((*object));
-		element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs2);
+		element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs);
 	}
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Elements.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Elements.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Elements.h	(revision 25379)
@@ -24,5 +24,5 @@
 
 		/*numerics*/
-		void   Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs2* inputs2);
+		void   Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs* inputs);
 		int    MaxNumNodes(void);
 		int    NumberOfElements(void);
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 25379)
@@ -12,8 +12,8 @@
 
 #include "../classes.h"
-#include "../Inputs2/PentaInput2.h"
-#include "../Inputs2/ControlInput2.h"
-#include "../Inputs2/TransientInput2.h"
-#include "../Inputs2/DatasetInput2.h"
+#include "../Inputs/PentaInput.h"
+#include "../Inputs/ControlInput.h"
+#include "../Inputs/TransientInput.h"
+#include "../Inputs/DatasetInput.h"
 #include "../../shared/shared.h"
 /*}}}*/
@@ -160,7 +160,7 @@
 
 /*Other*/
-void       Penta::AddBasalInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
-
-	_assert_(this->inputs2);
+void       Penta::AddBasalInput(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
+
+	_assert_(this->inputs);
 	if(!IsOnBase()) return;
 	else{
@@ -173,5 +173,5 @@
 			Penta* penta=this;
 			for(;;){
-				penta->AddInput2(input_enum,&extrudedvalues[0],interpolation_enum);
+				penta->AddInput(input_enum,&extrudedvalues[0],interpolation_enum);
 				if (penta->IsOnSurface()) break;
 				penta=penta->GetUpperPenta(); _assert_(penta->Id()!=this->id);
@@ -183,5 +183,5 @@
 }
 /*}}}*/
-void       Penta::AddInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
+void       Penta::AddInput(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
 
 	/**/
@@ -189,20 +189,20 @@
 
 	/*Call inputs method*/
-	_assert_(this->inputs2);
+	_assert_(this->inputs);
 	switch(interpolation_enum){
 		case P1Enum:
 			for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid;
-			inputs2->SetPentaInput(input_enum,interpolation_enum,NUMVERTICES,vertexlids,values);
+			inputs->SetPentaInput(input_enum,interpolation_enum,NUMVERTICES,vertexlids,values);
 			break;
 		case P1DGEnum:
-			inputs2->SetPentaInput(input_enum,interpolation_enum,this->lid,NUMVERTICES,values);
+			inputs->SetPentaInput(input_enum,interpolation_enum,this->lid,NUMVERTICES,values);
 			break;
 		default:
-			inputs2->SetPentaInput(input_enum,interpolation_enum,this->lid,this->GetNumberOfNodes(interpolation_enum),values);
-	}
-
-}
-/*}}}*/
-void       Penta::AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/
+			inputs->SetPentaInput(input_enum,interpolation_enum,this->lid,this->GetNumberOfNodes(interpolation_enum),values);
+	}
+
+}
+/*}}}*/
+void       Penta::AddControlInput(int input_enum,Inputs* inputs,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/
 
 	/*Intermediaries*/
@@ -218,5 +218,5 @@
 	switch(interpolation_enum){
 		case P1Enum:
-			inputs2->SetPentaControlInput(input_enum,PentaInput2Enum,interpolation_enum,id,NUMVERTICES,vertexlids,values,values_min,values_max);
+			inputs->SetPentaControlInput(input_enum,PentaInputEnum,interpolation_enum,id,NUMVERTICES,vertexlids,values,values_min,values_max);
 			break;
 		default:
@@ -226,5 +226,5 @@
 }
 /*}}}*/
-void       Penta::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){/*{{{*/
+void       Penta::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs* inputs,IoModel* iomodel,int input_enum){/*{{{*/
 
 	/*Intermediaries*/
@@ -248,5 +248,5 @@
 	for(int i=0;i<num_inputs;i++){
 		for(int j=0;j<NUMVERTICES;j++) nodeinputs[j]=array[vertexsids[j]*N+i];
-		inputs2->SetPentaDatasetInput(input_enum,individual_enums[i],P1Enum,NUMVERTICES,vertexlids,nodeinputs);
+		inputs->SetPentaDatasetInput(input_enum,individual_enums[i],P1Enum,NUMVERTICES,vertexlids,nodeinputs);
 	}
 }
@@ -285,13 +285,13 @@
 
 	/*Retrieve all inputs and parameters we will need*/
-	Input2* vx_input = this->GetInput2(VxAverageEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyAverageEnum); _assert_(vy_input);
-	Input2* gr_input = this->GetInput2(MaskOceanLevelsetEnum); _assert_(gr_input);
-	Input2* bs_input = this->GetInput2(BaseEnum);                    _assert_(bs_input);
-	Input2* B_input  = this->GetInput2(MaterialsRheologyBbarEnum);   _assert_(B_input);
-	Input2* n_input  = this->GetInput2(MaterialsRheologyNEnum);   _assert_(n_input);
-	Input2* smax_fl_input = this->GetInput2(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
-	Input2* smax_gr_input = this->GetInput2(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
-	Input2* sl_input  = this->GetInput2(SealevelEnum); _assert_(sl_input);
+	Input* vx_input = this->GetInput(VxAverageEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyAverageEnum); _assert_(vy_input);
+	Input* gr_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
+	Input* bs_input = this->GetInput(BaseEnum);                    _assert_(bs_input);
+	Input* B_input  = this->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+	Input* n_input  = this->GetInput(MaterialsRheologyNEnum);   _assert_(n_input);
+	Input* smax_fl_input = this->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+	Input* smax_gr_input = this->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+	Input* sl_input  = this->GetInput(SealevelEnum); _assert_(sl_input);
 
 	/* Start looping on the number of vertices: */
@@ -347,8 +347,8 @@
 
 	/*Add input*/
-	this->AddBasalInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum);
-	this->AddBasalInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
-	this->AddBasalInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
-	this->AddBasalInput2(SigmaVMEnum,&sigma_vm[0],P1DGEnum);
+	this->AddBasalInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
+	this->AddBasalInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
+	this->AddBasalInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
+	this->AddBasalInput(SigmaVMEnum,&sigma_vm[0],P1DGEnum);
 
 	this->InputExtrude(CalvingratexEnum,-1);
@@ -377,9 +377,9 @@
 
 	/*Retrieve all inputs and parameters we will need*/
-	Input2* vx_input=this->GetInput2(VxEnum);																		_assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);																		_assert_(vy_input);
-	Input2* strainparallel_input=this->GetInput2(StrainRateparallelEnum);								_assert_(strainparallel_input);
-	Input2* strainperpendicular_input=this->GetInput2(StrainRateperpendicularEnum);              _assert_(strainperpendicular_input);
-	Input2* levermanncoeff_input=this->GetInput2(CalvinglevermannCoeffEnum);                     _assert_(levermanncoeff_input);
+	Input* vx_input=this->GetInput(VxEnum);																		_assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);																		_assert_(vy_input);
+	Input* strainparallel_input=this->GetInput(StrainRateparallelEnum);								_assert_(strainparallel_input);
+	Input* strainperpendicular_input=this->GetInput(StrainRateperpendicularEnum);              _assert_(strainperpendicular_input);
+	Input* levermanncoeff_input=this->GetInput(CalvinglevermannCoeffEnum);                     _assert_(levermanncoeff_input);
 
 	/* Start looping on the number of vertices: */
@@ -406,7 +406,7 @@
 
 	/*Add input*/
-	this->AddBasalInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum);
-	this->AddBasalInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
-	this->AddBasalInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
+	this->AddBasalInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
+	this->AddBasalInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
+	this->AddBasalInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -420,5 +420,5 @@
 	if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){
 		IssmDouble flux_per_area=0;
-		this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
 	}
 	else{
@@ -508,9 +508,9 @@
 		IssmDouble calvingratex,calvingratey,thickness,Jdet,flux_per_area;
 		IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-		Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-		Input2* calvingratex_input=NULL;
-		Input2* calvingratey_input=NULL;
-		calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-		calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
+		Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+		Input* calvingratex_input=NULL;
+		Input* calvingratey_input=NULL;
+		calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+		calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
 
 		/*Start looping on Gaussian points*/
@@ -530,5 +530,5 @@
 		}
 
-		this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
 
 		/*Clean up and return*/
@@ -542,5 +542,5 @@
 	if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){
 		IssmDouble flux_per_area=0;
-		this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
 	}
 	else{
@@ -630,15 +630,15 @@
 		IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet,flux_per_area;
 		IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-		Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-		Input2* calvingratex_input=NULL;
-		Input2* calvingratey_input=NULL;
-		Input2* vx_input=NULL;
-		Input2* vy_input=NULL;
-		Input2* meltingrate_input=NULL;
-		calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-		calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
-		vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
-		meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input);
+		Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+		Input* calvingratex_input=NULL;
+		Input* calvingratey_input=NULL;
+		Input* vx_input=NULL;
+		Input* vy_input=NULL;
+		Input* meltingrate_input=NULL;
+		calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+		calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
+		vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyEnum); _assert_(vy_input);
+		meltingrate_input=this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);
 
 		/*Start looping on Gaussian points*/
@@ -664,5 +664,5 @@
 		}
 
-		this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
 
 		/*Clean up and return*/
@@ -693,5 +693,5 @@
 	/*retrive parameters: */
 	parameters->FindParam(&analysis_type,AnalysisTypeEnum);
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 
 	/*Check analysis_types*/
@@ -717,8 +717,8 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input);
-	Input2* vx_input=this->GetInput2(VxEnum);             _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);             _assert_(vy_input);
-	Input2* vz_input=this->GetInput2(VzEnum);             _assert_(vz_input);
+	Input* pressure_input=this->GetInput(PressureEnum); _assert_(pressure_input);
+	Input* vx_input=this->GetInput(VxEnum);             _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);             _assert_(vy_input);
+	Input* vz_input=this->GetInput(VzEnum);             _assert_(vz_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -777,7 +777,7 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input2* vx_input=this->GetInput2(VxEnum);             _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);             _assert_(vy_input);
-	Input2* vz_input=this->GetInput2(VzEnum);             _assert_(vz_input);
+	Input* vx_input=this->GetInput(VxEnum);             _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);             _assert_(vy_input);
+	Input* vz_input=this->GetInput(VzEnum);             _assert_(vz_input);
 
 	/* Start looping on the number of vertices: */
@@ -805,11 +805,11 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(DeviatoricStressxxEnum,&tau_xx[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressxyEnum,&tau_xy[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressxzEnum,&tau_xz[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressyyEnum,&tau_yy[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressyzEnum,&tau_yz[0],P1DGEnum);
-	this->AddInput2(DeviatoricStresszzEnum,&tau_zz[0],P1DGEnum);
-	this->AddInput2(DeviatoricStresseffectiveEnum,&tau_eff[0],P1DGEnum);
+	this->AddInput(DeviatoricStressxxEnum,&tau_xx[0],P1DGEnum);
+	this->AddInput(DeviatoricStressxyEnum,&tau_xy[0],P1DGEnum);
+	this->AddInput(DeviatoricStressxzEnum,&tau_xz[0],P1DGEnum);
+	this->AddInput(DeviatoricStressyyEnum,&tau_yy[0],P1DGEnum);
+	this->AddInput(DeviatoricStressyzEnum,&tau_yz[0],P1DGEnum);
+	this->AddInput(DeviatoricStresszzEnum,&tau_zz[0],P1DGEnum);
+	this->AddInput(DeviatoricStresseffectiveEnum,&tau_eff[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -834,8 +834,8 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input);
-	Input2* vx_input=this->GetInput2(VxEnum);             _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);             _assert_(vy_input);
-	Input2* vz_input=this->GetInput2(VzEnum);             _assert_(vz_input);
+	Input* pressure_input=this->GetInput(PressureEnum); _assert_(pressure_input);
+	Input* vx_input=this->GetInput(VxEnum);             _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);             _assert_(vy_input);
+	Input* vz_input=this->GetInput(VzEnum);             _assert_(vz_input);
 
 	/* Start looping on the number of vertices: */
@@ -859,10 +859,10 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(StressTensorxxEnum,&sigma_xx[0],P1DGEnum);
-	this->AddInput2(StressTensorxyEnum,&sigma_xy[0],P1DGEnum);
-	this->AddInput2(StressTensorxzEnum,&sigma_xz[0],P1DGEnum);
-	this->AddInput2(StressTensoryyEnum,&sigma_yy[0],P1DGEnum);
-	this->AddInput2(StressTensoryzEnum,&sigma_yz[0],P1DGEnum);
-	this->AddInput2(StressTensorzzEnum,&sigma_zz[0],P1DGEnum);
+	this->AddInput(StressTensorxxEnum,&sigma_xx[0],P1DGEnum);
+	this->AddInput(StressTensorxyEnum,&sigma_xy[0],P1DGEnum);
+	this->AddInput(StressTensorxzEnum,&sigma_xz[0],P1DGEnum);
+	this->AddInput(StressTensoryyEnum,&sigma_yy[0],P1DGEnum);
+	this->AddInput(StressTensoryzEnum,&sigma_yz[0],P1DGEnum);
+	this->AddInput(StressTensorzzEnum,&sigma_zz[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -870,5 +870,5 @@
 }
 /*}}}*/
-void       Penta::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin,Inputs2* inputs2in){/*{{{*/
+void       Penta::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin,Inputs* inputsin){/*{{{*/
 
 	int analysis_counter;
@@ -896,5 +896,5 @@
 	/*point parameters to real dataset: */
 	this->parameters=parametersin;
-	this->inputs2=inputs2in;
+	this->inputs=inputsin;
 }
 /*}}}*/
@@ -908,10 +908,10 @@
 	if(control_enum==DamageDbarEnum)            control_enum = DamageDEnum;
 
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"gradient");   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,"gradient");   _assert_(input);
 	this->GetVerticesLidList(&lidlist[0]);
 	GradientIndexing(&idlist[0],control_index);
 
 	/*Get values on vertices*/
-	if(input->ObjectEnum()==PentaInput2Enum && input->GetInputInterpolationType()==P1Enum){
+	if(input->ObjectEnum()==PentaInputEnum && input->GetInputInterpolationType()==P1Enum){
 		_assert_(N==1);
 		for(int i=0;i<NUMVERTICES;i++){
@@ -920,9 +920,9 @@
 		input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]);
 	}
-	else if(input->ObjectEnum()==PentaInput2Enum && input->GetInputInterpolationType()==P0Enum){
+	else if(input->ObjectEnum()==PentaInputEnum && input->GetInputInterpolationType()==P0Enum){
 		_assert_(N==1);
 		input->SetInput(P0Enum,this->lid,gradient[idlist[0]]);
 	}
-	else if(input->ObjectEnum()==TransientInput2Enum){
+	else if(input->ObjectEnum()==TransientInputEnum){
 		for(int n=0;n<N;n++){
 			_error_("not implemented");
@@ -948,6 +948,6 @@
 	if(control_enum==MaterialsRheologyBbarEnum) control_enum = MaterialsRheologyBEnum;
 	if(control_enum==DamageDbarEnum)            control_enum = DamageDEnum;
-	ElementInput2* control_value    = this->inputs2->GetControlInput2Data(control_enum,"value");    _assert_(control_value);
-	ElementInput2* control_gradient = this->inputs2->GetControlInput2Data(control_enum,"gradient"); _assert_(control_gradient);
+	ElementInput* control_value    = this->inputs->GetControlInputData(control_enum,"value");    _assert_(control_value);
+	ElementInput* control_gradient = this->inputs->GetControlInputData(control_enum,"gradient"); _assert_(control_gradient);
 
 	if(control_interp==P1Enum){
@@ -1015,5 +1015,5 @@
 
 	/*Update Levelset*/
-	this->AddInput2(distanceenum,&ls[0],P1Enum);
+	this->AddInput(distanceenum,&ls[0],P1Enum);
 }
 /*}}}*/
@@ -1022,10 +1022,10 @@
 
 	/*Get transient input time steps*/
-	TransientInput2* transient_input  = this->inputs2->GetTransientInput(transientinput_enum);
-	PentaInput2* averaged_input = transient_input->GetPentaInput(start_time,end_time,averaging_method);
-	Input2* averaged_copy = averaged_input->copy();
+	TransientInput* transient_input  = this->inputs->GetTransientInput(transientinput_enum);
+	PentaInput* averaged_input = transient_input->GetPentaInput(start_time,end_time,averaging_method);
+	Input* averaged_copy = averaged_input->copy();
 
 	averaged_copy->ChangeEnum(averagedinput_enum);
-	this->inputs2->AddInput(averaged_copy);
+	this->inputs->AddInput(averaged_copy);
 }
 /*}}}*/
@@ -1044,5 +1044,5 @@
 				/*Get input:*/
 				IssmDouble vel;
-				Input2* vel_input=this->GetInput2(VelEnum); _assert_(vel_input);
+				Input* vel_input=this->GetInput(VelEnum); _assert_(vel_input);
 				vel_input->GetInputAverage(&vel);
 
@@ -1107,5 +1107,5 @@
 
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		floatingarea=floatingarea*scalefactor;
@@ -1121,5 +1121,5 @@
 
 	int approximation;
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 	if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum || approximation==SSAHOApproximationEnum || approximation==HOFSApproximationEnum){
 		_error_("Cannot compute contact condition for non FS elements");
@@ -1146,7 +1146,7 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input = this->GetInput2(VzEnum); _assert_(vz_input);
+	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input = this->GetInput(VzEnum); _assert_(vz_input);
 
 	/*1. Recover stresses at the base*/
@@ -1565,8 +1565,8 @@
 	xDelete<int>(indicesfront);
 }/*}}}*/
-Input2*    Penta::GetInput2(int inputenum){/*{{{*/
+Input*    Penta::GetInput(int inputenum){/*{{{*/
 
 	/*Get Input from dataset*/
-	PentaInput2* input = this->inputs2->GetPentaInput(inputenum);
+	PentaInput* input = this->inputs->GetPentaInput(inputenum);
 	if(!input) return input;
 
@@ -1592,8 +1592,8 @@
 	return input;
 }/*}}}*/
-Input2*    Penta::GetInput2(int inputenum,IssmDouble time){/*{{{*/
+Input*    Penta::GetInput(int inputenum,IssmDouble time){/*{{{*/
 
 	/*Get Input from dataset*/
-	PentaInput2* input = this->inputs2->GetPentaInput(inputenum,time);
+	PentaInput* input = this->inputs->GetPentaInput(inputenum,time);
 	if(!input) return input;
 
@@ -1619,5 +1619,5 @@
 	return input;
 }/*}}}*/
-void       Penta::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Penta::GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -1637,5 +1637,5 @@
 }
 /*}}}*/
-void       Penta::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Penta::GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -1659,12 +1659,12 @@
 }
 /*}}}*/
-DatasetInput2* Penta::GetDatasetInput2(int inputenum){/*{{{*/
-
-	DatasetInput2* datasetinput = this->inputs2->GetDatasetInput2(inputenum);
+DatasetInput* Penta::GetDatasetInput(int inputenum){/*{{{*/
+
+	DatasetInput* datasetinput = this->inputs->GetDatasetInput(inputenum);
 	if(!datasetinput) return NULL;
 
 	for(int i=0;i<datasetinput->GetNumIds();i++){
 
-		PentaInput2* input = datasetinput->GetPentaInputByOffset(i); _assert_(input);
+		PentaInput* input = datasetinput->GetPentaInputByOffset(i); _assert_(input);
 
 		/*Intermediaries*/
@@ -1689,5 +1689,5 @@
 void       Penta::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/
 
-	Input2* input=this->GetInput2(enumtype);
+	Input* input=this->GetInput(enumtype);
 	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
 
@@ -1703,5 +1703,5 @@
 void       Penta::GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){/*{{{*/
 
-	Input2* input=this->GetInput2(enumtype);
+	Input* input=this->GetInput(enumtype);
 	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
 
@@ -1835,5 +1835,5 @@
 	/*Get input*/
 	if(control_enum==MaterialsRheologyBbarEnum) control_enum=MaterialsRheologyBEnum;
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data);   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,data);   _assert_(input);
 
 	/*Lid list once for all*/
@@ -1843,10 +1843,10 @@
 	/*Check what input we are dealing with*/
 	switch(input->ObjectEnum()){
-		case PentaInput2Enum:
+		case PentaInputEnum:
 			  {
 				IssmDouble values[NUMVERTICES];
 				int        idlist[NUMVERTICES];
 
-				PentaInput2* triainput = xDynamicCast<PentaInput2*>(input);
+				PentaInput* triainput = xDynamicCast<PentaInput*>(input);
 
 				/*Create list of indices and values for global vector*/
@@ -1870,5 +1870,5 @@
 		case TransientInputEnum:
 				{
-					TransientInput2* transientinput = xDynamicCast<TransientInput2*>(input);
+					TransientInput* transientinput = xDynamicCast<TransientInput*>(input);
 					int  N = transientinput->numtimesteps;
 					int* M = NULL;
@@ -1902,5 +1902,5 @@
 	/*Get input*/
 	if(control_enum==MaterialsRheologyBbarEnum) control_enum=MaterialsRheologyBEnum;
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data);   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,data);   _assert_(input);
 
 	/*Lid list once for all*/
@@ -1910,10 +1910,10 @@
 	/*Check what input we are dealing with*/
 	switch(input->ObjectEnum()){
-		case PentaInput2Enum:
+		case PentaInputEnum:
 			  {
 				IssmDouble values[NUMVERTICES];
 				int        idlist[NUMVERTICES];
 
-				PentaInput2* triainput = xDynamicCast<PentaInput2*>(input);
+				PentaInput* triainput = xDynamicCast<PentaInput*>(input);
 
 				/*Create list of indices and values for global vector*/
@@ -1937,5 +1937,5 @@
 		case TransientInputEnum:
 				{
-					TransientInput2* transientinput = xDynamicCast<TransientInput2*>(input);
+					TransientInput* transientinput = xDynamicCast<TransientInput*>(input);
 					int  N = transientinput->numtimesteps;
 					int* M = NULL;
@@ -2002,5 +2002,5 @@
 
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		groundedarea=groundedarea*scalefactor;
@@ -2108,7 +2108,7 @@
 	IssmDouble vx,vy,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2 *thickness_input = this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2 *vx_input        = this->GetInput2(VxAverageEnum); _assert_(vx_input);
-	Input2 *vy_input        = this->GetInput2(VyAverageEnum); _assert_(vy_input);
+	Input *thickness_input = this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input *vx_input        = this->GetInput(VxAverageEnum); _assert_(vx_input);
+	Input *vy_input        = this->GetInput(VyAverageEnum); _assert_(vy_input);
 
 	/*Start looping on Gaussian points*/
@@ -2228,9 +2228,9 @@
 	IssmDouble vx,vy,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
-	vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input);
-	vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input);
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
+	vx_input=this->GetInput(VxAverageEnum); _assert_(vx_input);
+	vy_input=this->GetInput(VyAverageEnum); _assert_(vy_input);
 
 	/*Start looping on Gaussian points*/
@@ -2270,5 +2270,5 @@
 
 	if(scaled==true){ //scale for area projection correction
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		base=base*scalefactor;
@@ -2300,5 +2300,5 @@
 	base = 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		base=base*scalefactor;
@@ -2306,7 +2306,7 @@
 
 	/*Now get the average height above floatation*/
-	Input2* surface_input    = this->GetInput2(SurfaceEnum);    _assert_(surface_input);
-	Input2* base_input        = this->GetInput2(BaseEnum);        _assert_(base_input);
-	Input2* bed_input = this->GetInput2(BedEnum); _assert_(bed_input);
+	Input* surface_input    = this->GetInput(SurfaceEnum);    _assert_(surface_input);
+	Input* base_input        = this->GetInput(BaseEnum);        _assert_(base_input);
+	Input* bed_input = this->GetInput(BedEnum); _assert_(bed_input);
 	if(!bed_input) _error_("Could not find bed");
 	surface_input->GetInputAverage(&surface);
@@ -2326,6 +2326,6 @@
 	int         lidlist[NUMVERTICES];
 	IssmDouble  intz[NUMVERTICES]        = {0.};
-	Input2     *original_input           = NULL;
-	Input2     *depth_averaged_input     = NULL;
+	Input     *original_input           = NULL;
+	Input     *depth_averaged_input     = NULL;
 
 	/*Are we on the base? If not, return*/
@@ -2341,5 +2341,5 @@
 
 		/*Step1: Get original input (to be depth-avegaged): */
-		original_input=penta->GetInput2(original_enum);
+		original_input=penta->GetInput(original_enum);
 		if(!original_input) _error_("could not find input with enum " << EnumToStringx(original_enum));
 
@@ -2379,7 +2379,6 @@
 	switch(original_input->ObjectEnum()){
 		case PentaInputEnum:
-		case PentaInput2Enum:
 		case ControlInputEnum:
-			this->inputs2->SetPentaInput(average_enum,P1Enum,NUMVERTICES,lidlist,&total[0]);
+			this->inputs->SetPentaInput(average_enum,P1Enum,NUMVERTICES,lidlist,&total[0]);
 			break;
 		default:
@@ -2391,5 +2390,5 @@
 
 	_assert_(start==-1 || start==+1);
-	_assert_(this->inputs2);
+	_assert_(this->inputs);
 
 	/*Are we on the the boundary we want to be?*/
@@ -2398,5 +2397,5 @@
 
 	/*Get original input*/
-	DatasetInput2* dinput = this->inputs2->GetDatasetInput2(enum_type);
+	DatasetInput* dinput = this->inputs->GetDatasetInput(enum_type);
 
 	int lidlist[NUMVERTICES];
@@ -2405,5 +2404,5 @@
 	for(int id=0;id<dinput->GetNumIds();id++){
 
-		PentaInput2* pentainput = dinput->GetPentaInputByOffset(id);
+		PentaInput* pentainput = dinput->GetPentaInputByOffset(id);
 		pentainput->Serve(NUMVERTICES,&lidlist[0]);
 
@@ -2449,5 +2448,5 @@
 
 	_assert_(start==-1 || start==+1);
-	_assert_(this->inputs2);
+	_assert_(this->inputs);
 
 	/*Are we on the the boundary we want to be?*/
@@ -2456,14 +2455,14 @@
 
 	/*Get original input*/
-	ElementInput2* input  = this->inputs2->GetControlInput2Data(enum_type,"value");
-	if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet");
-	PentaInput2* pentainput = xDynamicCast<PentaInput2*>(input);
-	ElementInput2* input2 = this->inputs2->GetControlInput2Data(enum_type,"savedvalues");
-	if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet");
-	PentaInput2* pentainput2= xDynamicCast<PentaInput2*>(input2);
+	ElementInput* input  = this->inputs->GetControlInputData(enum_type,"value");
+	if(input->ObjectEnum()!=PentaInputEnum) _error_("not supported yet");
+	PentaInput* pentainput = xDynamicCast<PentaInput*>(input);
+	ElementInput* input2 = this->inputs->GetControlInputData(enum_type,"savedvalues");
+	if(input->ObjectEnum()!=PentaInputEnum) _error_("not supported yet");
+	PentaInput* pentainput2= xDynamicCast<PentaInput*>(input2);
 	/*FIXME: this should not be necessary*/
-	ElementInput2* input3 = this->inputs2->GetControlInput2Data(enum_type,"gradient");
-	if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet");
-	PentaInput2* pentainput3= xDynamicCast<PentaInput2*>(input3);
+	ElementInput* input3 = this->inputs->GetControlInputData(enum_type,"gradient");
+	if(input->ObjectEnum()!=PentaInputEnum) _error_("not supported yet");
+	PentaInput* pentainput3= xDynamicCast<PentaInput*>(input3);
 
 	int lidlist[NUMVERTICES];
@@ -2530,5 +2529,5 @@
 
 	_assert_(start==-1 || start==+1);
-	_assert_(this->inputs2);
+	_assert_(this->inputs);
 
 	/*Are we on the the boundary we want to be?*/
@@ -2538,7 +2537,7 @@
 
 	/*Get original input*/
-	Input2* input = this->GetInput2(enum_type);
-	if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet");
-	PentaInput2* pentainput = xDynamicCast<PentaInput2*>(input);
+	Input* input = this->GetInput(enum_type);
+	if(input->ObjectEnum()!=PentaInputEnum) _error_("not supported yet");
+	PentaInput* pentainput = xDynamicCast<PentaInput*>(input);
 
 	if(pentainput->GetInterpolation()==P1Enum || pentainput->GetInterpolation()==P1DGEnum){
@@ -2559,5 +2558,5 @@
 
 			/*Add input of the basal element to penta->inputs*/
-			penta->AddInput2(enum_type,&extrudedvalues[0],pentainput->GetInterpolation());
+			penta->AddInput(enum_type,&extrudedvalues[0],pentainput->GetInterpolation());
 
 			/*Stop if we have reached the surface/base*/
@@ -2623,5 +2622,5 @@
 
 	/*Add input to the element: */
-	this->AddInput2(enum_type,values,this->element_type);
+	this->AddInput(enum_type,values,this->element_type);
 
 	/*Free ressources:*/
@@ -2657,5 +2656,5 @@
 	for(;;){
 		/*Add input to the element: */
-		penta->AddInput2(enum_type,values,P1Enum);
+		penta->AddInput(enum_type,values,P1Enum);
 
 		/*Stop if we have reached the surface*/
@@ -2688,5 +2687,5 @@
 			}
 			/*update input*/
-			inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			return;
 
@@ -2696,5 +2695,5 @@
 			}
 			/*update input*/
-			inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			return;
 
@@ -2704,5 +2703,5 @@
 			}
 			/*update input*/
-			inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			return;
 
@@ -2718,5 +2717,5 @@
 			}
 			/*Add input to the element: */
-			inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 
 			/*Free ressources:*/
@@ -2731,5 +2730,5 @@
 			}
 			/*Add input to the element: */
-			inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 
 			/*Free ressources:*/
@@ -3007,5 +3006,5 @@
 
 	/*First, serarch the input: */
-	Input2* data=this->GetInput2(natureofdataenum);
+	Input* data=this->GetInput(natureofdataenum);
 
 	/*figure out if we have the vertex id: */
@@ -3162,5 +3161,5 @@
 			if(this->element_type==MINIcondensedEnum){
 				int approximation;
-				this->GetInput2Value(&approximation,ApproximationEnum);
+				this->Element::GetInputValue(&approximation,ApproximationEnum);
 				if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
 					//Do nothing, condensation already done in PVectorCoupling
@@ -3186,5 +3185,5 @@
 		if(analysis_type==StressbalanceAnalysisEnum){
 			int approximation;
-			this->GetInput2Value(&approximation,ApproximationEnum);
+			this->Element::GetInputValue(&approximation,ApproximationEnum);
 			if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){
 				//Do nothing condensatino already done for Stokes part
@@ -3219,5 +3218,5 @@
 
 	/*For FS only: we want the CS to be tangential to the bedrock*/
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 	if(!IsOnBase() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum &&  approximation!=HOFSApproximationEnum)) return;
 
@@ -3226,7 +3225,7 @@
 
 	/*Get inputs*/
-	Input2* slopex_input=this->GetInput2(BedSlopeXEnum); _assert_(slopex_input);
-	Input2* slopey_input=this->GetInput2(BedSlopeYEnum); _assert_(slopey_input);
-	Input2* groundedicelevelset_input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
+	Input* slopex_input=this->GetInput(BedSlopeXEnum); _assert_(slopex_input);
+	Input* slopey_input=this->GetInput(BedSlopeYEnum); _assert_(slopey_input);
+	Input* groundedicelevelset_input=this->GetInput(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
 
 	/*Loop over basal nodes and update their CS*/
@@ -3305,7 +3304,7 @@
 
 	/*Get inputs*/
-	Input2* bed_input = this->GetInput2(BedEnum);                     _assert_(bed_input);
-	Input2* qsg_input = this->GetInput2(FrontalForcingsSubglacialDischargeEnum);		 _assert_(qsg_input);
-	Input2* TF_input  = this->GetInput2(FrontalForcingsThermalForcingEnum);          _assert_(TF_input);
+	Input* bed_input = this->GetInput(BedEnum);                     _assert_(bed_input);
+	Input* qsg_input = this->GetInput(FrontalForcingsSubglacialDischargeEnum);		 _assert_(qsg_input);
+	Input* TF_input  = this->GetInput(FrontalForcingsThermalForcingEnum);          _assert_(TF_input);
 	Element::GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum);
 
@@ -3340,5 +3339,5 @@
 
 	/*Add input*/
-	this->AddInput2(CalvingMeltingrateEnum,&meltrates[0],P1Enum);
+	this->AddInput(CalvingMeltingrateEnum,&meltrates[0],P1Enum);
 
 	this->InputExtrude(CalvingMeltingrateEnum,-1);
@@ -3351,19 +3350,19 @@
 void       Penta::SetElementInput(int enum_in,IssmDouble value){/*{{{*/
 
-	this->SetElementInput(this->inputs2,enum_in,value);
-
-}
-/*}}}*/
-void       Penta::SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble value){/*{{{*/
-
-	_assert_(inputs2);
-	inputs2->SetPentaInput(enum_in,P0Enum,this->lid,value);
-
-}
-/*}}}*/
-void       Penta::SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){/*{{{*/
-
-	_assert_(inputs2);
-	inputs2->SetPentaInput(enum_in,P1Enum,numindices,indices,values);
+	this->SetElementInput(this->inputs,enum_in,value);
+
+}
+/*}}}*/
+void       Penta::SetElementInput(Inputs* inputs,int enum_in,IssmDouble value){/*{{{*/
+
+	_assert_(inputs);
+	inputs->SetPentaInput(enum_in,P0Enum,this->lid,value);
+
+}
+/*}}}*/
+void       Penta::SetElementInput(Inputs* inputs,int numindices,int* indices,IssmDouble* values,int enum_in){/*{{{*/
+
+	_assert_(inputs);
+	inputs->SetPentaInput(enum_in,P1Enum,numindices,indices,values);
 
 }
@@ -3390,10 +3389,10 @@
 
 	/*Prepare index list*/
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"value");   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,"value");   _assert_(input);
 	this->GetVerticesLidList(&lidlist[0]);
 	GradientIndexing(&idlist[0],control_index);
 
 	/*Get values on vertices*/
-	if(input->ObjectEnum()==PentaInput2Enum && input->GetInputInterpolationType()==P1Enum){
+	if(input->ObjectEnum()==PentaInputEnum && input->GetInputInterpolationType()==P1Enum){
 		_assert_(N==1);
 		for(int i=0;i<NUMVERTICES;i++){
@@ -3402,9 +3401,9 @@
 		input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]);
 	}
-	else if(input->ObjectEnum()==PentaInput2Enum && input->GetInputInterpolationType()==P0Enum){
+	else if(input->ObjectEnum()==PentaInputEnum && input->GetInputInterpolationType()==P0Enum){
 		_assert_(N==1);
 		input->SetInput(P0Enum,this->lid,vector[idlist[0]]);
 	}
-	else if(input->ObjectEnum()==TransientInput2Enum){
+	else if(input->ObjectEnum()==TransientInputEnum){
 		for(int n=0;n<N;n++){
 			_error_("not implemented");
@@ -3487,5 +3486,5 @@
 	tria->lid=this->lid;
 	tria->parameters=this->parameters;
-	tria->inputs2=this->inputs2;
+	tria->inputs=this->inputs;
 	tria->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED)
 	this->SpawnTriaHook(xDynamicCast<ElementHook*>(tria),index1,index2,index3);
@@ -3567,7 +3566,7 @@
 
 	/*Retrieve all inputs we will need*/
-	Input2* vx_input=this->GetInput2(VxEnum);                                  _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);                                  _assert_(vy_input);
-	Input2* vz_input=this->GetInput2(VzEnum);												_assert_(vz_input);
+	Input* vx_input=this->GetInput(VxEnum);                                  _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);                                  _assert_(vy_input);
+	Input* vz_input=this->GetInput(VzEnum);												_assert_(vz_input);
 
 	/* Start looping on the number of vertices: */
@@ -3592,5 +3591,5 @@
 
 	/*Add input*/
-	this->AddInput2(StrainRateparallelEnum,&strainparallel[0],P1DGEnum);
+	this->AddInput(StrainRateparallelEnum,&strainparallel[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -3614,7 +3613,7 @@
 
 	/*Retrieve all inputs we will need*/
-	Input2* vx_input=this->GetInput2(VxEnum);                                  _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);                                  _assert_(vy_input);
-	Input2* vz_input=this->GetInput2(VzEnum);												_assert_(vz_input);
+	Input* vx_input=this->GetInput(VxEnum);                                  _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);                                  _assert_(vy_input);
+	Input* vz_input=this->GetInput(VzEnum);												_assert_(vz_input);
 
 	/* Start looping on the number of vertices: */
@@ -3639,5 +3638,5 @@
 
 	/*Add input*/
-	this->AddInput2(StrainRateperpendicularEnum,&strainperpendicular[0],P1DGEnum);
+	this->AddInput(StrainRateperpendicularEnum,&strainperpendicular[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -3671,13 +3670,13 @@
 
 		/*Retrieve all inputs we will need*/
-		Input2* vx_input=this->GetInput2(VxEnum);                                  _assert_(vx_input);
-		Input2* vy_input=this->GetInput2(VyEnum);                                  _assert_(vy_input);
-		Input2* vel_input=this->GetInput2(VelEnum);                                _assert_(vel_input);
-		Input2* pressure_input=this->GetInput2(PressureEnum);                      _assert_(pressure_input);
-		Input2* deviaxx_input=this->GetInput2(DeviatoricStressxxEnum);             _assert_(deviaxx_input);
-		Input2* deviaxy_input=this->GetInput2(DeviatoricStressxyEnum);             _assert_(deviaxy_input);
-		Input2* deviayy_input=this->GetInput2(DeviatoricStressyyEnum);             _assert_(deviayy_input);
-		Input2* surface_input=this->GetInput2(SurfaceEnum);								_assert_(surface_input);
-		Input2* thickness_input=this->GetInput2(ThicknessEnum);							_assert_(thickness_input);
+		Input* vx_input=this->GetInput(VxEnum);                                  _assert_(vx_input);
+		Input* vy_input=this->GetInput(VyEnum);                                  _assert_(vy_input);
+		Input* vel_input=this->GetInput(VelEnum);                                _assert_(vel_input);
+		Input* pressure_input=this->GetInput(PressureEnum);                      _assert_(pressure_input);
+		Input* deviaxx_input=this->GetInput(DeviatoricStressxxEnum);             _assert_(deviaxx_input);
+		Input* deviaxy_input=this->GetInput(DeviatoricStressxyEnum);             _assert_(deviaxy_input);
+		Input* deviayy_input=this->GetInput(DeviatoricStressyyEnum);             _assert_(deviayy_input);
+		Input* surface_input=this->GetInput(SurfaceEnum);								_assert_(surface_input);
+		Input* thickness_input=this->GetInput(ThicknessEnum);							_assert_(thickness_input);
 
 		/* Start looping on the number of 2D vertices: */
@@ -3719,5 +3718,5 @@
 
 	/*Add input*/
-	this->AddInput2(StressIntensityFactorEnum,&ki[0],P1Enum);
+	this->AddInput(StressIntensityFactorEnum,&ki[0],P1Enum);
 	this->InputExtrude(StressIntensityFactorEnum,-1);
 }
@@ -3730,5 +3729,5 @@
 
 	/*retrieve inputs :*/
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 
 	/*If on water, return 0: */
@@ -3769,7 +3768,7 @@
 
 	/*Get for Vx and Vy, the max of abs value: */
-	Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* vz_input = this->GetInput2(VzEnum); _assert_(vz_input);
+	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* vz_input = this->GetInput(VzEnum); _assert_(vz_input);
 	IssmDouble maxabsvx = vx_input->GetInputMaxAbs();
 	IssmDouble maxabsvy = vy_input->GetInputMaxAbs();
@@ -3896,9 +3895,9 @@
 	IssmDouble calvingratex,calvingratey,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* calvingratex_input=NULL;
-	Input2* calvingratey_input=NULL;
-	calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-	calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* calvingratex_input=NULL;
+	Input* calvingratey_input=NULL;
+	calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+	calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
 
 	/*Start looping on Gaussian points*/
@@ -4017,15 +4016,15 @@
 	IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* calvingratex_input=NULL;
-	Input2* calvingratey_input=NULL;
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
-	Input2* meltingrate_input=NULL;
-	calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-	calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
-	vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input);
-	vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input);
-	meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input);
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* calvingratex_input=NULL;
+	Input* calvingratey_input=NULL;
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
+	Input* meltingrate_input=NULL;
+	calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+	calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
+	vx_input=this->GetInput(VxAverageEnum); _assert_(vx_input);
+	vy_input=this->GetInput(VyAverageEnum); _assert_(vy_input);
+	meltingrate_input=this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);
 
 	/*Start looping on Gaussian points*/
@@ -4069,9 +4068,9 @@
 	/*Get material parameters :*/
 	rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* floatingmelt_input = this->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input);
-	Input2* gllevelset_input = this->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
-	Input2* scalefactor_input = NULL;
+	Input* floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input);
+	Input* gllevelset_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+	Input* scalefactor_input = NULL;
 	if(scaled==true){
-		scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 	}
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
@@ -4114,9 +4113,9 @@
 	/*Get material parameters :*/
 	rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* groundedmelt_input = this->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input);
-	Input2* gllevelset_input   = this->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
-	Input2* scalefactor_input  = NULL;
+	Input* groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input);
+	Input* gllevelset_input   = this->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+	Input* scalefactor_input  = NULL;
 	if(scaled==true){
-		scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 	}
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
@@ -4164,9 +4163,9 @@
 
 	/*Now get the average SMB over the element*/
-	Input2* smb_input = this->GetInput2(SmbMassBalanceEnum); _assert_(smb_input);
+	Input* smb_input = this->GetInput(SmbMassBalanceEnum); _assert_(smb_input);
 
 	smb_input->GetInputAverage(&smb);
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);// average scalefactor on element
 	}
@@ -4180,5 +4179,5 @@
 }
 /*}}}*/
-void       Penta::Update(Inputs2* inputs2,int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/
+void       Penta::Update(Inputs* inputs,int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/
 
 	/*Intermediaries*/
@@ -4571,12 +4570,12 @@
 				if(iomodel->Data("md.initialization.vz") && iomodel->Data("md.flowequation.borderFS")){
 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1];
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*(1-iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]);
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzHOEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzHOEnum);
 				}
 				else{
 					for(i=0;i<6;i++)nodeinputs[i]=0;
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzHOEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzHOEnum);
 				}
 			}
@@ -4587,12 +4586,12 @@
 				if(iomodel->Data("md.initialization.vz") && iomodel->Data("md.flowequation.borderFS")){
 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1];
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
 					for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*(1-iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]);
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzSSAEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzSSAEnum);
 				}
 				else{
 					for(i=0;i<6;i++)nodeinputs[i]=0;
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
-					this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzSSAEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum);
+					this->SetElementInput(inputs,NUMVERTICES,vertexlids,nodeinputs,VzSSAEnum);
 				}
 			}
@@ -4612,6 +4611,6 @@
 
 	this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
-	Input2* input = this->GetInput2(extrusioninput);      _assert_(extrusioninput);
-	Input2* onbase = this->GetInput2(MeshVertexonbaseEnum); _assert_(onbase);
+	Input* input = this->GetInput(extrusioninput);      _assert_(extrusioninput);
+	Input* onbase = this->GetInput(MeshVertexonbaseEnum); _assert_(onbase);
 
 	GaussPenta* gauss=new GaussPenta();
@@ -4637,5 +4636,5 @@
 
 	this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
-	Input2* input = this->GetInput2(extrusioninput); _assert_(extrusioninput);
+	Input* input = this->GetInput(extrusioninput); _assert_(extrusioninput);
 
 	GaussPenta* gauss=new GaussPenta();
@@ -4705,5 +4704,5 @@
 }
 /*}}}*/
-void       Penta::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
+void       Penta::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -4736,9 +4735,9 @@
 	
 	/*Branch according to whether we have a transient or not input: */
-	type=this->inputs2->GetInputObjectEnum(name);
-	if(type==PentaInput2Enum){
+	type=this->inputs->GetInputObjectEnum(name);
+	if(type==PentaInputEnum){
 		/*Figure out if we are P0 or P1 interpolation: */
-		PentaInput2* pentainput = this->inputs2->GetPentaInput(name);
-		PentaInput2* pentainput2 = this->inputs2->GetPentaInput(DummyEnum);
+		PentaInput* pentainput = this->inputs->GetPentaInput(name);
+		PentaInput* pentainput2 = this->inputs->GetPentaInput(DummyEnum);
 		interp=pentainput->GetInterpolation();
 		
@@ -4766,15 +4765,15 @@
 		else _error_("Penta::InputScaleFromDakota error message: input interpolation " << EnumToStringx(interp) << " not supported yet!");
 	}
-	else if(type==TransientInput2Enum){
+	else if(type==TransientInputEnum){
 
 
 		IssmDouble* steps=NULL;
 		int nsteps;
-		TransientInput2* transientinput = NULL;
-		TransientInput2* transientinput2 = NULL;
+		TransientInput* transientinput = NULL;
+		TransientInput* transientinput2 = NULL;
 
 		/*retrieve transient input:*/
-		transientinput= this->inputs2->GetTransientInput(name);
-		transientinput2= this->inputs2->GetTransientInput(DummyEnum);
+		transientinput= this->inputs->GetTransientInput(name);
+		transientinput2= this->inputs->GetTransientInput(DummyEnum);
 
 		/*retrieve time steps: */
@@ -4791,6 +4790,6 @@
 		/*go through the transient inputs, and update:*/
 		for (int i=0;i<nsteps;i++){
-			PentaInput2* pentainput=transientinput->GetPentaInput(i);
-			PentaInput2* pentainput2=transientinput2->GetPentaInput(i);
+			PentaInput* pentainput=transientinput->GetPentaInput(i);
+			PentaInput* pentainput2=transientinput2->GetPentaInput(i);
 			interp=pentainput->GetInterpolation();
 
@@ -4829,5 +4828,5 @@
 	/*Check that name is an element input*/
 	if(!IsInputEnum(name)) _error_("Enum "<<EnumToStringx(name)<<" is not in IsInput");
-	TransientInput2* transientinput = inputs2->GetTransientInput(name);
+	TransientInput* transientinput = inputs->GetTransientInput(name);
 
 	switch(type){
@@ -4955,11 +4954,11 @@
 
 					/*Add new inputs: */
-					this->AddInput2(ThicknessEnum,thickness,P1Enum);
-					this->AddInput2(BaseEnum,bed,P1Enum);
-					this->AddInput2(SurfaceEnum,surface,P1Enum);
+					this->AddInput(ThicknessEnum,thickness,P1Enum);
+					this->AddInput(BaseEnum,bed,P1Enum);
+					this->AddInput(SurfaceEnum,surface,P1Enum);
 					break;
 
 				default:
-					this->AddInput2(name,values,P1Enum);
+					this->AddInput(name,values,P1Enum);
 			}
 			break;
@@ -4969,5 +4968,5 @@
 			/*Get value for the element: */
 			value=vector[this->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
-			this->AddInput2(name,&value,P0Enum);
+			this->AddInput(name,&value,P0Enum);
 			break;
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 25379)
@@ -44,10 +44,10 @@
 		/*}}}*/
 		/*Penta routines:{{{*/
-		void           AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum);
-		void           AddInput2(int input_enum, IssmDouble* values, int interpolation_enum);
-		void           AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id);
+		void           AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum);
+		void           AddInput(int input_enum, IssmDouble* values, int interpolation_enum);
+		void           AddControlInput(int input_enum,Inputs* inputs,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id);
 		void           ControlInputExtrude(int enum_type,int start);
 		void           DatasetInputExtrude(int enum_type,int start);
-		void           DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum);
+		void           DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs* inputs,IoModel* iomodel,int input_enum);
 		void           AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part);
 		void           BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement);
@@ -62,5 +62,5 @@
 		void           ComputeSigmaNN(){_error_("not implemented yet");};
 		void           ComputeStressTensor();
-		void           Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs2* inputs2in);
+		void           Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs* inputsin);
 		void           ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int M,int N,int interp);
 		void           ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum,int control_interp);
@@ -83,10 +83,10 @@
 		IssmDouble		GetIcefrontArea();
 		void           GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
-		Input2*        GetInput2(int enumtype);
-		Input2*        GetInput2(int enumtype,IssmDouble time);
-		Input2*        GetInput2(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet!");};
-		void        GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
-		void        GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
-		DatasetInput2* GetDatasetInput2(int inputenum);
+		Input*        GetInput(int enumtype);
+		Input*        GetInput(int enumtype,IssmDouble time);
+		Input*        GetInput(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet!");};
+		void        GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value);
+		void        GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value);
+		DatasetInput* GetDatasetInput(int inputenum);
 		void           GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype);
 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
@@ -164,6 +164,6 @@
 		void				RignotMeltParameterization();
 		void           SetElementInput(int enum_in,IssmDouble values);
-		void           SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values);
-		void           SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in);
+		void           SetElementInput(Inputs* inputs,int enum_in,IssmDouble values);
+		void           SetElementInput(Inputs* inputs,int numindices,int* indices,IssmDouble* values,int enum_in);
 		void           SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset, int M,int N);
 		void           SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
@@ -185,5 +185,5 @@
 		IssmDouble     TotalGroundedBmb(bool scaled);
 		IssmDouble     TotalSmb(bool scaled);
-		void           Update(Inputs2* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+		void           Update(Inputs* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
 		void           UpdateConstraintsExtrudeFromBase(void);
 		void           UpdateConstraintsExtrudeFromTop(void);
@@ -195,5 +195,5 @@
 		void           VerticalSegmentIndices(int** pindices,int* pnumseg);
 		void           VerticalSegmentIndicesBase(int** pindices,int* pnumseg);
-		void           ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
+		void           ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
 
 		#ifdef _HAVE_DAKOTA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 25379)
@@ -13,6 +13,6 @@
 #include <string.h>
 #include "../classes.h"
-#include "../Inputs2/SegInput2.h"
-#include "../Inputs2/TriaInput2.h"
+#include "../Inputs/SegInput.h"
+#include "../Inputs/TriaInput.h"
 #include "../../shared/shared.h"
 /*}}}*/
@@ -186,8 +186,8 @@
 	*pxyz_front=xyz_front;
 }/*}}}*/
-Input2*    Seg::GetInput2(int inputenum){/*{{{*/
+Input*    Seg::GetInput(int inputenum){/*{{{*/
 
 	if(this->iscollapsed){
-		TriaInput2* input = this->inputs2->GetTriaInput(inputenum);
+		TriaInput* input = this->inputs->GetTriaInput(inputenum);
 		if(!input) return input;
 
@@ -221,5 +221,5 @@
 	}
 	else{
-		SegInput2* input = this->inputs2->GetSegInput(inputenum);
+		SegInput* input = this->inputs->GetSegInput(inputenum);
 		if(!input) return input;
 
@@ -252,5 +252,5 @@
 	}
 }/*}}}*/
-Input2*    Seg::GetInput2(int inputenum,IssmDouble time){/*{{{*/
+Input*    Seg::GetInput(int inputenum,IssmDouble time){/*{{{*/
 	_error_("not implemented yet");
 }/*}}}*/
@@ -301,5 +301,5 @@
 
 }/*}}}*/
-void       Seg::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Seg::GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -319,5 +319,5 @@
 }
 /*}}}*/
-void       Seg::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Seg::GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 25379)
@@ -49,5 +49,5 @@
 		void        ComputeSigmaNN(){_error_("not implemented yet");};
 		void        ComputeStressTensor(){_error_("not implemented yet");};
-		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs2* inputs2in){_error_("not implemented yet");};
+		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs* inputsin){_error_("not implemented yet");};
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int M,int N,int interp){_error_("not implemented yet");};
 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum,int control_interp){_error_("not implemented yet");};
@@ -62,9 +62,9 @@
 		IssmDouble  GetGroundedPortion(IssmDouble* xyz_list);
 		void		   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
-		Input2*     GetInput2(int enumtype);
-		Input2*     GetInput2(int enumtype,IssmDouble time);
-		Input2*     GetInput2(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet!");};
-		void        GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
-		void        GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
+		Input*     GetInput(int enumtype);
+		Input*     GetInput(int enumtype,IssmDouble time);
+		Input*     GetInput(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet!");};
+		void        GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value);
+		void        GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value);
 		void        GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");};
 		void		   GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented");};
@@ -149,5 +149,5 @@
 		IssmDouble  TotalGroundedBmb(bool scaled){_error_("not implemented yet");};
 		IssmDouble  TotalSmb(bool scaled){_error_("not implemented yet");};
-		void        Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};
+		void        Update(Inputs* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};
 		void        UpdateConstraintsExtrudeFromBase(){_error_("not implemented");};
 		void        UpdateConstraintsExtrudeFromTop(){_error_("not implemented");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 25379)
@@ -13,5 +13,5 @@
 #include <string.h>
 #include "../classes.h"
-#include "../Inputs2/ElementInput2.h"
+#include "../Inputs/ElementInput.h"
 #include "../../shared/shared.h"
 /*}}}*/
@@ -135,5 +135,5 @@
 /*}}}*/
 
-void     Tetra::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin,Inputs2* inputs2in){/*{{{*/
+void     Tetra::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin,Inputs* inputsin){/*{{{*/
 
 	int analysis_counter;
@@ -159,5 +159,5 @@
 	/*point parameters to real dataset: */
 	this->parameters=parametersin;
-	this->inputs2=inputs2in;
+	this->inputs=inputsin;
 }
 /*}}}*/
@@ -257,11 +257,11 @@
 }
 /*}}}*/
-Input2*    Tetra::GetInput2(int inputenum){/*{{{*/
+Input*    Tetra::GetInput(int inputenum){/*{{{*/
 	_error_("not implemented yet");
 }/*}}}*/
-Input2*    Tetra::GetInput2(int inputenum,IssmDouble time){/*{{{*/
+Input*    Tetra::GetInput(int inputenum,IssmDouble time){/*{{{*/
 	_error_("not implemented yet");
 }/*}}}*/
-void       Tetra::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Tetra::GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -281,5 +281,5 @@
 }
 /*}}}*/
-void       Tetra::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Tetra::GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -305,5 +305,5 @@
 void     Tetra::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/
 
-	Input2* input=this->GetInput2(enumtype);
+	Input* input=this->GetInput(enumtype);
 	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
 
@@ -442,5 +442,5 @@
 
 	/*Add input to the element: */
-	this->AddInput2(enum_type,values,this->element_type);
+	this->AddInput(enum_type,values,this->element_type);
 
 	/*Free ressources:*/
@@ -690,12 +690,12 @@
 
 	/*For FS only: we want the CS to be tangential to the bedrock*/
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 	if(!HasNodeOnBase() ||  approximation!=FSApproximationEnum) return;
 
 	//printf("element number %i \n",this->id);
 	/*Get inputs*/
-	Input2* slopex_input=this->GetInput2(BedSlopeXEnum); _assert_(slopex_input);
-	Input2* slopey_input=this->GetInput2(BedSlopeYEnum); _assert_(slopey_input);
-	Input2* groundedicelevelset_input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
+	Input* slopex_input=this->GetInput(BedSlopeXEnum); _assert_(slopex_input);
+	Input* slopey_input=this->GetInput(BedSlopeYEnum); _assert_(slopey_input);
+	Input* groundedicelevelset_input=this->GetInput(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
 	vertexonbase = xNew<IssmDouble>(numnodes);
 	this->GetInputListOnNodesVelocity(&vertexonbase[0],MeshVertexonbaseEnum);
@@ -814,5 +814,5 @@
 }
 /*}}}*/
-void     Tetra::Update(Inputs2* inputs2,int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/
+void     Tetra::Update(Inputs* inputs,int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/
 
 	/*Intermediaries*/
@@ -942,5 +942,5 @@
 }
 /*}}}*/
-void     Tetra::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
+void     Tetra::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 
 	/*Intermediaries*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 25379)
@@ -47,5 +47,5 @@
 		void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
 		void        ComputeEsaStrainAndVorticity(){_error_("not implemented yet!");};
-		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs2* inputs2in);
+		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs* inputsin);
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int M,int N,int interp){_error_("not implemented yet");};
 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum,int control_interp){_error_("not implemented yet");};
@@ -66,9 +66,9 @@
 		IssmDouble  GetGroundedPortion(IssmDouble* xyz_list){_error_("not implemented yet");};
 		void		   GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
-		Input2*     GetInput2(int enumtype);
-		Input2*     GetInput2(int enumtype,IssmDouble time);
-		Input2*     GetInput2(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet!");};
-		void        GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
-		void        GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
+		Input*     GetInput(int enumtype);
+		Input*     GetInput(int enumtype,IssmDouble time);
+		Input*     GetInput(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method){_error_("not implemented yet!");};
+		void        GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value);
+		void        GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value);
 		void        GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
 		void		   GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented yet");};
@@ -156,5 +156,5 @@
 		IssmDouble  TotalGroundedBmb(bool scaled){_error_("not implemented yet");};
 		IssmDouble  TotalSmb(bool scaled){_error_("not implemented yet");};
-		void        Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+		void        Update(Inputs* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
 		void        UpdateConstraintsExtrudeFromBase(){_error_("not implemented");};
 		void        UpdateConstraintsExtrudeFromTop(){_error_("not implemented");};
@@ -166,5 +166,5 @@
 		void        VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
 		void        VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");};
-		void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
+		void        ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
 
 #ifdef _HAVE_GIA_
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 25379)
@@ -15,9 +15,9 @@
 //#include <gsl_cblas.h>
 #include "../classes.h"
-#include "../Inputs2/TriaInput2.h"
-#include "../Inputs2/PentaInput2.h"
-#include "../Inputs2/ControlInput2.h"
-#include "../Inputs2/DatasetInput2.h"
-#include "../Inputs2/TransientInput2.h"
+#include "../Inputs/TriaInput.h"
+#include "../Inputs/PentaInput.h"
+#include "../Inputs/ControlInput.h"
+#include "../Inputs/DatasetInput.h"
+#include "../Inputs/TransientInput.h"
 #include "../../shared/shared.h"
 #ifdef _HAVE_GIA_
@@ -163,8 +163,8 @@
 
 /*Other*/
-void       Tria::AddBasalInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
+void       Tria::AddBasalInput(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
 
 	/*Call inputs method*/
-	_assert_(this->inputs2);
+	_assert_(this->inputs);
 
 	int domaintype;
@@ -172,5 +172,5 @@
 	switch(domaintype){
 		case Domain2DhorizontalEnum:
-			this->AddInput2(input_enum,values,interpolation_enum);
+			this->AddInput(input_enum,values,interpolation_enum);
 			break;
 		case Domain2DverticalEnum:{
@@ -183,5 +183,5 @@
 }
 /*}}}*/
-void       Tria::AddInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
+void       Tria::AddInput(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/
 
 	/*Intermediaries*/
@@ -189,25 +189,25 @@
 
 	/*Call inputs method*/
-	if(!this->inputs2){
+	if(!this->inputs){
 		int* temp = xNew<int>(3);
-		_error_("inputs2 not set");
-	}
-	_assert_(this->inputs2);
+		_error_("inputs not set");
+	}
+	_assert_(this->inputs);
 	switch(interpolation_enum){
 		case P1Enum:
 			for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid;
-			inputs2->SetTriaInput(input_enum,interpolation_enum,NUMVERTICES,vertexlids,values);
+			inputs->SetTriaInput(input_enum,interpolation_enum,NUMVERTICES,vertexlids,values);
 			break;
 		case P1DGEnum:
 			for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid;
-			inputs2->SetTriaInput(input_enum,interpolation_enum,this->lid,NUMVERTICES,values);
+			inputs->SetTriaInput(input_enum,interpolation_enum,this->lid,NUMVERTICES,values);
 			break;
 		default:
-			inputs2->SetTriaInput(input_enum,interpolation_enum,this->lid,this->GetNumberOfNodes(interpolation_enum),values);
-	}
-
-}
-/*}}}*/
-void       Tria::AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/
+			inputs->SetTriaInput(input_enum,interpolation_enum,this->lid,this->GetNumberOfNodes(interpolation_enum),values);
+	}
+
+}
+/*}}}*/
+void       Tria::AddControlInput(int input_enum,Inputs* inputs,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/
 
 	/*Intermediaries*/
@@ -223,8 +223,8 @@
 	switch(interpolation_enum){
 		case P0Enum:
-			inputs2->SetTriaControlInput(input_enum,TriaInput2Enum,interpolation_enum,id,1,&this->lid,values,values_min,values_max);
+			inputs->SetTriaControlInput(input_enum,TriaInputEnum,interpolation_enum,id,1,&this->lid,values,values_min,values_max);
 			break;
 		case P1Enum:
-			inputs2->SetTriaControlInput(input_enum,TriaInput2Enum,interpolation_enum,id,NUMVERTICES,vertexlids,values,values_min,values_max);
+			inputs->SetTriaControlInput(input_enum,TriaInputEnum,interpolation_enum,id,NUMVERTICES,vertexlids,values,values_min,values_max);
 			break;
 		default:
@@ -234,5 +234,5 @@
 }
 /*}}}*/
-void       Tria::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){/*{{{*/
+void       Tria::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs* inputs,IoModel* iomodel,int input_enum){/*{{{*/
 
 	/*Intermediaries*/
@@ -256,5 +256,5 @@
 	for(int i=0;i<num_inputs;i++){
 		for(int j=0;j<NUMVERTICES;j++) nodeinputs[j]=array[vertexsids[j]*N+i];
-		inputs2->SetTriaDatasetInput(input_enum,individual_enums[i],P1Enum,NUMVERTICES,vertexlids,nodeinputs);
+		inputs->SetTriaDatasetInput(input_enum,individual_enums[i],P1Enum,NUMVERTICES,vertexlids,nodeinputs);
 	}
 }
@@ -315,13 +315,13 @@
 
 	/*Retrieve all inputs and parameters we will need*/
-	Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input);
-	Input2* B_input  = this->GetInput2(MaterialsRheologyBbarEnum);   _assert_(B_input);
-	Input2* gr_input = this->GetInput2(MaskOceanLevelsetEnum); _assert_(gr_input);
-	Input2* bs_input = this->GetInput2(BaseEnum);                    _assert_(bs_input);
-	Input2* smax_fl_input = this->GetInput2(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
-	Input2* smax_gr_input = this->GetInput2(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
-	Input2* n_input  = this->GetInput2(MaterialsRheologyNEnum); _assert_(n_input);
-	Input2* sl_input  = this->GetInput2(SealevelEnum); _assert_(sl_input);
+	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
+	Input* B_input  = this->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+	Input* gr_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
+	Input* bs_input = this->GetInput(BaseEnum);                    _assert_(bs_input);
+	Input* smax_fl_input = this->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);
+	Input* smax_gr_input = this->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);
+	Input* n_input  = this->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
+	Input* sl_input  = this->GetInput(SealevelEnum); _assert_(sl_input);
 
 
@@ -384,8 +384,8 @@
 
 	/*Add input*/
-	this->AddInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum);
-	this->AddInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
-	this->AddInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
-	this->AddInput2(SigmaVMEnum,&sigma_vm[0],P1DGEnum);
+	this->AddInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
+	this->AddInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
+	this->AddInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
+	this->AddInput(SigmaVMEnum,&sigma_vm[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -415,17 +415,17 @@
 	IssmDouble constant_g     = this->FindParam(ConstantsGEnum);
 
-	Input2*   H_input                 = this->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2*   bed_input               = this->GetInput2(BedEnum); _assert_(bed_input);
-	Input2*   surface_input           = this->GetInput2(SurfaceEnum); _assert_(surface_input);
-	Input2*	strainrateparallel_input  = this->GetInput2(StrainRateparallelEnum);  _assert_(strainrateparallel_input);
-	Input2*	strainrateeffective_input = this->GetInput2(StrainRateeffectiveEnum); _assert_(strainrateeffective_input);
-	Input2*	vx_input                  = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2*	vy_input                  = this->GetInput2(VxEnum); _assert_(vy_input);
-	Input2*   waterheight_input       = this->GetInput2(WaterheightEnum); _assert_(waterheight_input);
-	Input2*   s_xx_input              = this->GetInput2(DeviatoricStressxxEnum);     _assert_(s_xx_input);
-	Input2*   s_xy_input              = this->GetInput2(DeviatoricStressxyEnum);     _assert_(s_xy_input);
-	Input2*   s_yy_input              = this->GetInput2(DeviatoricStressyyEnum);     _assert_(s_yy_input);
-	Input2*	B_input  = this->GetInput2(MaterialsRheologyBbarEnum);   _assert_(B_input);
-	Input2*	n_input  = this->GetInput2(MaterialsRheologyNEnum);   _assert_(n_input);
+	Input*   H_input                 = this->GetInput(ThicknessEnum); _assert_(H_input);
+	Input*   bed_input               = this->GetInput(BedEnum); _assert_(bed_input);
+	Input*   surface_input           = this->GetInput(SurfaceEnum); _assert_(surface_input);
+	Input*	strainrateparallel_input  = this->GetInput(StrainRateparallelEnum);  _assert_(strainrateparallel_input);
+	Input*	strainrateeffective_input = this->GetInput(StrainRateeffectiveEnum); _assert_(strainrateeffective_input);
+	Input*	vx_input                  = this->GetInput(VxEnum); _assert_(vx_input);
+	Input*	vy_input                  = this->GetInput(VxEnum); _assert_(vy_input);
+	Input*   waterheight_input       = this->GetInput(WaterheightEnum); _assert_(waterheight_input);
+	Input*   s_xx_input              = this->GetInput(DeviatoricStressxxEnum);     _assert_(s_xx_input);
+	Input*   s_xy_input              = this->GetInput(DeviatoricStressxyEnum);     _assert_(s_xy_input);
+	Input*   s_yy_input              = this->GetInput(DeviatoricStressyyEnum);     _assert_(s_yy_input);
+	Input*	B_input  = this->GetInput(MaterialsRheologyBbarEnum);   _assert_(B_input);
+	Input*	n_input  = this->GetInput(MaterialsRheologyNEnum);   _assert_(n_input);
 
 	/*Loop over all elements of this partition*/
@@ -484,7 +484,7 @@
 	}
 
-	this->AddInput2(SurfaceCrevasseEnum,&surface_crevasse[0],P1DGEnum);
-	this->AddInput2(BasalCrevasseEnum,&basal_crevasse[0],P1DGEnum);
-	this->AddInput2(CrevasseDepthEnum,&crevasse_depth[0],P1DGEnum);
+	this->AddInput(SurfaceCrevasseEnum,&surface_crevasse[0],P1DGEnum);
+	this->AddInput(BasalCrevasseEnum,&basal_crevasse[0],P1DGEnum);
+	this->AddInput(CrevasseDepthEnum,&crevasse_depth[0],P1DGEnum);
 
 	delete gauss;
@@ -506,10 +506,10 @@
 
 	/*Retrieve all inputs and parameters we will need*/
-	Input2* vx_input=this->GetInput2(VxEnum);													_assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);													_assert_(vy_input);
-	Input2* bs_input = this->GetInput2(BaseEnum);                                 _assert_(bs_input);
-	Input2* strainparallel_input=this->GetInput2(StrainRateparallelEnum);			_assert_(strainparallel_input);
-	Input2* strainperpendicular_input=this->GetInput2(StrainRateperpendicularEnum);_assert_(strainperpendicular_input);
-	Input2* levermanncoeff_input=this->GetInput2(CalvinglevermannCoeffEnum);      _assert_(levermanncoeff_input);
+	Input* vx_input=this->GetInput(VxEnum);													_assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);													_assert_(vy_input);
+	Input* bs_input = this->GetInput(BaseEnum);                                 _assert_(bs_input);
+	Input* strainparallel_input=this->GetInput(StrainRateparallelEnum);			_assert_(strainparallel_input);
+	Input* strainperpendicular_input=this->GetInput(StrainRateperpendicularEnum);_assert_(strainperpendicular_input);
+	Input* levermanncoeff_input=this->GetInput(CalvinglevermannCoeffEnum);      _assert_(levermanncoeff_input);
 
 	/* Start looping on the number of vertices: */
@@ -539,7 +539,7 @@
 
 	/*Add input*/
-	this->AddInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum);
-	this->AddInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
-	this->AddInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
+	this->AddInput(CalvingratexEnum,&calvingratex[0],P1DGEnum);
+	this->AddInput(CalvingrateyEnum,&calvingratey[0],P1DGEnum);
+	this->AddInput(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -553,5 +553,5 @@
 	if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){
 		IssmDouble flux_per_area=0;
-		this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
 	}
 	else{
@@ -649,14 +649,14 @@
 		IssmDouble calvingratex,calvingratey,thickness,Jdet,flux_per_area;
 		IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-		Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-		Input2* calvingratex_input=NULL;
-		Input2* calvingratey_input=NULL;
+		Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+		Input* calvingratex_input=NULL;
+		Input* calvingratey_input=NULL;
 		if(domaintype==Domain2DhorizontalEnum){
-			calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-			calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
+			calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+			calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
 		}
 		else{
-			calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input);
-			calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input);
+			calvingratex_input=this->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
+			calvingratey_input=this->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
 		}
 
@@ -677,5 +677,5 @@
 		}
 
-		this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum);
 
 		/*Clean up and return*/
@@ -689,5 +689,5 @@
 	if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){
 		IssmDouble flux_per_area=0;
-		this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
 	}
 	else{
@@ -786,20 +786,20 @@
 		IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet,flux_per_area;
 		IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-		Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-		Input2* calvingratex_input=NULL;
-		Input2* calvingratey_input=NULL;
-		Input2* vx_input=NULL;
-		Input2* vy_input=NULL;
-		Input2* meltingrate_input=NULL;
+		Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+		Input* calvingratex_input=NULL;
+		Input* calvingratey_input=NULL;
+		Input* vx_input=NULL;
+		Input* vy_input=NULL;
+		Input* meltingrate_input=NULL;
 		if(domaintype==Domain2DhorizontalEnum){
-			calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-			calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
-			vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-			vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
-			meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input);
+			calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+			calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
+			vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+			vy_input=this->GetInput(VyEnum); _assert_(vy_input);
+			meltingrate_input=this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);
 		}
 		else{
-			calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input);
-			calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input);
+			calvingratex_input=this->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
+			calvingratey_input=this->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
 		}
 
@@ -826,5 +826,5 @@
 		}
 
-		this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
+		this->AddInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum);
 
 		/*Clean up and return*/
@@ -861,5 +861,5 @@
 	/*Get approximation*/
 	int approximation;
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 
 	/* Get node coordinates and dof list: */
@@ -868,6 +868,6 @@
 	/*Retrieve all inputs we will be needing: */
 	this->FindParam(&domaintype,DomainTypeEnum);
-	Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
+	Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input);
 
 	/* Start looping on the number of vertices: */
@@ -903,13 +903,13 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(DeviatoricStressxxEnum,&tau_xx[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressxyEnum,&tau_xy[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressxzEnum,&tau_xz[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressyyEnum,&tau_yy[0],P1DGEnum);
-	this->AddInput2(DeviatoricStressyzEnum,&tau_yz[0],P1DGEnum);
-	this->AddInput2(DeviatoricStresszzEnum,&tau_zz[0],P1DGEnum);
-	this->AddInput2(DeviatoricStresseffectiveEnum,&tau_e[0],P1DGEnum);
-	this->AddInput2(DeviatoricStress1Enum,&tau_1[0],P1DGEnum);
-	this->AddInput2(DeviatoricStress2Enum,&tau_2[0],P1DGEnum);
+	this->AddInput(DeviatoricStressxxEnum,&tau_xx[0],P1DGEnum);
+	this->AddInput(DeviatoricStressxyEnum,&tau_xy[0],P1DGEnum);
+	this->AddInput(DeviatoricStressxzEnum,&tau_xz[0],P1DGEnum);
+	this->AddInput(DeviatoricStressyyEnum,&tau_yy[0],P1DGEnum);
+	this->AddInput(DeviatoricStressyzEnum,&tau_yz[0],P1DGEnum);
+	this->AddInput(DeviatoricStresszzEnum,&tau_zz[0],P1DGEnum);
+	this->AddInput(DeviatoricStresseffectiveEnum,&tau_e[0],P1DGEnum);
+	this->AddInput(DeviatoricStress1Enum,&tau_1[0],P1DGEnum);
+	this->AddInput(DeviatoricStress2Enum,&tau_2[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -931,6 +931,6 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input2* vx_input=this->GetInput2(EsaXmotionEnum); _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(EsaYmotionEnum); _assert_(vy_input);
+	Input* vx_input=this->GetInput(EsaXmotionEnum); _assert_(vx_input);
+	Input* vy_input=this->GetInput(EsaYmotionEnum); _assert_(vy_input);
 
 	/* Start looping on the number of vertices: */
@@ -950,8 +950,8 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(EsaStrainratexxEnum,&strain_xx[0],P1DGEnum);
-	this->AddInput2(EsaStrainrateyyEnum,&strain_yy[0],P1DGEnum);
-	this->AddInput2(EsaStrainratexyEnum,&strain_xy[0],P1DGEnum);
-	this->AddInput2(EsaRotationrateEnum,&vorticity_xy[0],P1DGEnum);
+	this->AddInput(EsaStrainratexxEnum,&strain_xx[0],P1DGEnum);
+	this->AddInput(EsaStrainrateyyEnum,&strain_yy[0],P1DGEnum);
+	this->AddInput(EsaStrainratexyEnum,&strain_xy[0],P1DGEnum);
+	this->AddInput(EsaRotationrateEnum,&vorticity_xy[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -963,5 +963,5 @@
 	if(!IsOnBase()){
 		IssmDouble sigma_nn[3]={0.};
-		this->AddInput2(SigmaNNEnum,&sigma_nn[0],P1Enum);
+		this->AddInput(SigmaNNEnum,&sigma_nn[0],P1Enum);
 		return;
 	}
@@ -983,7 +983,7 @@
 		this->FindParam(&domaintype,DomainTypeEnum);
 		if(domaintype==Domain2DhorizontalEnum) _error_("stress tensor calculation not supported for mesh of type " <<EnumToStringx(domaintype)<<", extrude mesh or call ComputeDeviatoricStressTensor");
-		Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input);
-		Input2* vx_input=this->GetInput2(VxEnum);             _assert_(vx_input);
-		Input2* vy_input=this->GetInput2(VyEnum);             _assert_(vy_input);
+		Input* pressure_input=this->GetInput(PressureEnum); _assert_(pressure_input);
+		Input* vx_input=this->GetInput(VxEnum);             _assert_(vx_input);
+		Input* vy_input=this->GetInput(VyEnum);             _assert_(vy_input);
 
 		/* Start looping on the number of vertices: */
@@ -1010,5 +1010,5 @@
 
 		/*Add Stress tensor components into inputs*/
-		this->AddInput2(SigmaNNEnum,&sigma_nn[0],P1Enum);
+		this->AddInput(SigmaNNEnum,&sigma_nn[0],P1Enum);
 
 		/*Clean up and return*/
@@ -1039,7 +1039,7 @@
 	this->FindParam(&domaintype,DomainTypeEnum);
 	if(domaintype==Domain2DhorizontalEnum) _error_("stress tensor calculation not supported for mesh of type " <<EnumToStringx(domaintype)<<", extrude mesh or call ComputeDeviatoricStressTensor");
-	Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input);
-	Input2* vx_input=this->GetInput2(VxEnum);             _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);             _assert_(vy_input);
+	Input* pressure_input=this->GetInput(PressureEnum); _assert_(pressure_input);
+	Input* vx_input=this->GetInput(VxEnum);             _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);             _assert_(vy_input);
 
 	/* Start looping on the number of vertices: */
@@ -1060,10 +1060,10 @@
 
 	/*Add Stress tensor components into inputs*/
-	this->AddInput2(StressTensorxxEnum,&sigma_xx[0],P1DGEnum);
-	this->AddInput2(StressTensorxyEnum,&sigma_xy[0],P1DGEnum);
-	this->AddInput2(StressTensorxzEnum,&sigma_xz[0],P1DGEnum);
-	this->AddInput2(StressTensoryyEnum,&sigma_yy[0],P1DGEnum);
-	this->AddInput2(StressTensoryzEnum,&sigma_yz[0],P1DGEnum);
-	this->AddInput2(StressTensorzzEnum,&sigma_zz[0],P1DGEnum);
+	this->AddInput(StressTensorxxEnum,&sigma_xx[0],P1DGEnum);
+	this->AddInput(StressTensorxyEnum,&sigma_xy[0],P1DGEnum);
+	this->AddInput(StressTensorxzEnum,&sigma_xz[0],P1DGEnum);
+	this->AddInput(StressTensoryyEnum,&sigma_yy[0],P1DGEnum);
+	this->AddInput(StressTensoryzEnum,&sigma_yz[0],P1DGEnum);
+	this->AddInput(StressTensorzzEnum,&sigma_zz[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -1071,5 +1071,5 @@
 }
 /*}}}*/
-void       Tria::Configure(Elements* elementsin, Loads* loadsin,Nodes* nodesin,Vertices *verticesin,Materials* materialsin, Parameters* parametersin,Inputs2* inputs2in){/*{{{*/
+void       Tria::Configure(Elements* elementsin, Loads* loadsin,Nodes* nodesin,Vertices *verticesin,Materials* materialsin, Parameters* parametersin,Inputs* inputsin){/*{{{*/
 
 	/*go into parameters and get the analysis_counter: */
@@ -1098,5 +1098,5 @@
 	/*point parameters to real dataset: */
 	this->parameters=parametersin;
-	this->inputs2=inputs2in;
+	this->inputs=inputsin;
 }/*}}}*/
 void       Tria::ControlInputSetGradient(IssmDouble* gradient,int control_enum,int control_index,int offset,int M,int N,int interp){/*{{{*/
@@ -1106,10 +1106,10 @@
 	int         idlist[NUMVERTICES];
 
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"gradient");   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,"gradient");   _assert_(input);
 	this->GetVerticesLidList(&lidlist[0]);
 	GradientIndexing(&idlist[0],control_index);
 
 	/*Get values on vertices*/
-	if(input->ObjectEnum()==TriaInput2Enum && input->GetInputInterpolationType()==P1Enum){
+	if(input->ObjectEnum()==TriaInputEnum && input->GetInputInterpolationType()==P1Enum){
 		_assert_(N==1);
 		for(int i=0;i<NUMVERTICES;i++){
@@ -1118,9 +1118,9 @@
 		input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]);
 	}
-	else if(input->ObjectEnum()==TriaInput2Enum && input->GetInputInterpolationType()==P0Enum){
+	else if(input->ObjectEnum()==TriaInputEnum && input->GetInputInterpolationType()==P0Enum){
 		_assert_(N==1);
 		input->SetInput(P0Enum,this->lid,gradient[idlist[0]]);
 	}
-	else if(input->ObjectEnum()==TransientInput2Enum){
+	else if(input->ObjectEnum()==TransientInputEnum){
 		for(int n=0;n<N;n++){
 			_error_("not implemented");
@@ -1143,6 +1143,6 @@
 
 	/*Get relevant inputs*/
-	ElementInput2* control_value    = this->inputs2->GetControlInput2Data(control_enum,"value");    _assert_(control_value);
-	ElementInput2* control_gradient = this->inputs2->GetControlInput2Data(control_enum,"gradient"); _assert_(control_gradient);
+	ElementInput* control_value    = this->inputs->GetControlInputData(control_enum,"value");    _assert_(control_value);
+	ElementInput* control_gradient = this->inputs->GetControlInputData(control_enum,"gradient"); _assert_(control_gradient);
 
 	if(control_interp==P1Enum){
@@ -1210,5 +1210,5 @@
 
 	/*Update Levelset*/
-	this->AddInput2(distanceenum,&ls[0],P1Enum);
+	this->AddInput(distanceenum,&ls[0],P1Enum);
 }
 /*}}}*/
@@ -1300,5 +1300,5 @@
 			/*Get input:*/
 			IssmDouble vel;
-			Input2* vel_input=this->GetInput2(VelEnum); _assert_(vel_input);
+			Input* vel_input=this->GetInput(VelEnum); _assert_(vel_input);
 			vel_input->GetInputAverage(&vel);
 
@@ -1356,5 +1356,5 @@
 	floatingarea=(1-phi)*this->GetArea();
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		floatingarea=floatingarea*scalefactor;
@@ -1371,5 +1371,5 @@
 
 	int approximation;
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 
 	if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum || approximation==SSAHOApproximationEnum){
@@ -1394,6 +1394,6 @@
 	GetVerticesCoordinates(&xyz_list);
 	/*Retrieve all inputs we will be needing: */
-	Input2* vx_input       = this->GetInput2(VxEnum);       _assert_(vx_input);
-	Input2* vy_input       = this->GetInput2(VyEnum);       _assert_(vy_input);
+	Input* vx_input       = this->GetInput(VxEnum);       _assert_(vx_input);
+	Input* vy_input       = this->GetInput(VyEnum);       _assert_(vy_input);
 
 	/*1. Recover stresses at the base*/
@@ -1897,9 +1897,9 @@
 	*pxyz_front=xyz_front;
 }/*}}}*/
-Input2*    Tria::GetInput2(int inputenum){/*{{{*/
+Input*    Tria::GetInput(int inputenum){/*{{{*/
 
 	/*Get Input from dataset*/
 	if(this->iscollapsed){
-		PentaInput2* input = this->inputs2->GetPentaInput(inputenum);
+		PentaInput* input = this->inputs->GetPentaInput(inputenum);
 		if(!input) return input;
 
@@ -1908,5 +1908,5 @@
 	}
 	else{
-		TriaInput2* input = this->inputs2->GetTriaInput(inputenum);
+		TriaInput* input = this->inputs->GetTriaInput(inputenum);
 		if(!input) return input;
 
@@ -1915,9 +1915,9 @@
 	}
 }/*}}}*/
-Input2*    Tria::GetInput2(int inputenum,IssmDouble time){/*{{{*/
+Input*    Tria::GetInput(int inputenum,IssmDouble time){/*{{{*/
 
 	/*Get Input from dataset*/
 	if(this->iscollapsed){
-		PentaInput2* input = this->inputs2->GetPentaInput(inputenum,time);
+		PentaInput* input = this->inputs->GetPentaInput(inputenum,time);
 		if(!input) return input;
 
@@ -1926,5 +1926,5 @@
 	}
 	else{
-		TriaInput2* input = this->inputs2->GetTriaInput(inputenum,time);
+		TriaInput* input = this->inputs->GetTriaInput(inputenum,time);
 		if(!input) return input;
 
@@ -1933,9 +1933,9 @@
 	}
 }/*}}}*/
-Input2*    Tria::GetInput2(int inputenum,IssmDouble start_time, IssmDouble end_time, int averaging_method){/*{{{*/
+Input*    Tria::GetInput(int inputenum,IssmDouble start_time, IssmDouble end_time, int averaging_method){/*{{{*/
 
 	/*Get Input from dataset*/
 	if(this->iscollapsed){
-		PentaInput2* input = this->inputs2->GetPentaInput(inputenum,start_time,end_time,averaging_method);
+		PentaInput* input = this->inputs->GetPentaInput(inputenum,start_time,end_time,averaging_method);
 		if(!input) return input;
 
@@ -1944,5 +1944,5 @@
 	}
 	else{
-		TriaInput2* input = this->inputs2->GetTriaInput(inputenum,start_time,end_time,averaging_method);
+		TriaInput* input = this->inputs->GetTriaInput(inputenum,start_time,end_time,averaging_method);
 		if(!input) return input;
 
@@ -1951,5 +1951,5 @@
 	}
 }/*}}}*/
-void       Tria::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Tria::GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -1969,5 +1969,5 @@
 }
 /*}}}*/
-void       Tria::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/
+void       Tria::GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value){/*{{{*/
 
 	/*Checks in debugging mode*/
@@ -1991,5 +1991,5 @@
 }
 /*}}}*/
-void       Tria::InputServe(Input2* input_in){/*{{{*/
+void       Tria::InputServe(Input* input_in){/*{{{*/
 
 	/*Return NULL pointer if input is NULL*/
@@ -1998,6 +1998,6 @@
 	/*Get Input from dataset*/
 	if(this->iscollapsed){
-		_assert_(input_in->ObjectEnum()==PentaInput2Enum);
-		PentaInput2* input = xDynamicCast<PentaInput2*>(input_in);
+		_assert_(input_in->ObjectEnum()==PentaInputEnum);
+		PentaInput* input = xDynamicCast<PentaInput*>(input_in);
 
 		/*Intermediaries*/
@@ -2030,6 +2030,6 @@
 	}
 	else{
-		_assert_(input_in->ObjectEnum()==TriaInput2Enum);
-		TriaInput2* input = xDynamicCast<TriaInput2*>(input_in);
+		_assert_(input_in->ObjectEnum()==TriaInputEnum);
+		TriaInput* input = xDynamicCast<TriaInput*>(input_in);
 
 		/*Intermediaries*/
@@ -2061,7 +2061,7 @@
 	}
 }/*}}}*/
-DatasetInput2* Tria::GetDatasetInput2(int inputenum){/*{{{*/
-
-	DatasetInput2* datasetinput = this->inputs2->GetDatasetInput2(inputenum);
+DatasetInput* Tria::GetDatasetInput(int inputenum){/*{{{*/
+
+	DatasetInput* datasetinput = this->inputs->GetDatasetInput(inputenum);
 	if(!datasetinput) return NULL;
 
@@ -2071,5 +2071,5 @@
 		if(this->iscollapsed){
 
-			PentaInput2* input = datasetinput->GetPentaInputByOffset(i); _assert_(input);
+			PentaInput* input = datasetinput->GetPentaInputByOffset(i); _assert_(input);
 
 			/*Intermediaries*/
@@ -2102,5 +2102,5 @@
 		else{
 
-			TriaInput2* input = datasetinput->GetTriaInputByOffset(i); _assert_(input);
+			TriaInput* input = datasetinput->GetTriaInputByOffset(i); _assert_(input);
 
 			/*Intermediaries*/
@@ -2138,10 +2138,10 @@
 
 	/*Get transient input time steps*/
-	TransientInput2* transient_input  = this->inputs2->GetTransientInput(transientinput_enum);
-	TriaInput2* averaged_input = transient_input->GetTriaInput(start_time,end_time,averaging_method);
-	Input2* averaged_copy = averaged_input->copy();
+	TransientInput* transient_input  = this->inputs->GetTransientInput(transientinput_enum);
+	TriaInput* averaged_input = transient_input->GetTriaInput(start_time,end_time,averaging_method);
+	Input* averaged_copy = averaged_input->copy();
 
 	averaged_copy->ChangeEnum(averagedinput_enum);
-	this->inputs2->AddInput(averaged_copy);
+	this->inputs->AddInput(averaged_copy);
 }
 /*}}}*/
@@ -2151,5 +2151,5 @@
 	int         numtimesteps;
 	IssmDouble *timesteps    = NULL;
-	TransientInput2* transient_input  = this->inputs2->GetTransientInput(input_enum);
+	TransientInput* transient_input  = this->inputs->GetTransientInput(input_enum);
 
 	transient_input->GetAllTimes(&timesteps,&numtimesteps);
@@ -2171,10 +2171,10 @@
 	for(int i=0;i<numsteps;i++){
 		if((iscurrenttime_included==false) && (i==(numsteps-1))){
-			Input2* input = this->GetInput2(input_enum,currenttime);
+			Input* input = this->GetInput(input_enum,currenttime);
 			input->GetInputAverage(&values[i]);
 			times[i]=currenttime;
 		}
 		else{
-			TriaInput2* input = transient_input->GetTriaInput(i);
+			TriaInput* input = transient_input->GetTriaInput(i);
 			this->InputServe(input);
 			input->GetInputAverage(&values[i]);
@@ -2191,5 +2191,5 @@
 void       Tria::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/
 
-	Input2* input=this->GetInput2(enumtype);
+	Input* input=this->GetInput(enumtype);
 	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
 
@@ -2205,5 +2205,5 @@
 void       Tria::GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){/*{{{*/
 
-	Input2* input=this->GetInput2(enumtype);
+	Input* input=this->GetInput(enumtype);
 	if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria");
 
@@ -2419,5 +2419,5 @@
 
 	/*Get input (either in element or material)*/
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data);   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,data);   _assert_(input);
 
 	/*Intermediaries*/
@@ -2441,5 +2441,5 @@
 	/*Flag as collapsed for later use*/
 	if(this->iscollapsed){
-		xDynamicCast<PentaInput2*>(input)->SetServeCollapsed(true);
+		xDynamicCast<PentaInput*>(input)->SetServeCollapsed(true);
 	}
 
@@ -2459,5 +2459,5 @@
 
 	/*Get input*/
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data);   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,data);   _assert_(input);
 
 	/*Lid list once for all*/
@@ -2467,10 +2467,10 @@
 	/*Check what input we are dealing with*/
 	switch(input->ObjectEnum()){
-		case TriaInput2Enum:
+		case TriaInputEnum:
 			  {
 				IssmDouble values[NUMVERTICES];
 				int        idlist[NUMVERTICES];
 
-				TriaInput2* triainput = xDynamicCast<TriaInput2*>(input);
+				TriaInput* triainput = xDynamicCast<TriaInput*>(input);
 
 				/*Create list of indices and values for global vector*/
@@ -2494,5 +2494,5 @@
 		case TransientInputEnum:
 				{
-					TransientInput2* transientinput = xDynamicCast<TransientInput2*>(input);
+					TransientInput* transientinput = xDynamicCast<TransientInput*>(input);
 					int  N = transientinput->numtimesteps;
 					int* M = NULL;
@@ -2573,5 +2573,5 @@
 	groundedarea=phi*this->GetArea();
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		groundedarea=groundedarea*scalefactor;
@@ -2653,14 +2653,14 @@
 	IssmDouble vx,vy,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyEnum); _assert_(vy_input);
 	}
 	else{
-		vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxAverageEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyAverageEnum); _assert_(vy_input);
 	}
 
@@ -2782,14 +2782,14 @@
 	IssmDouble vx,vy,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyEnum); _assert_(vy_input);
 	}
 	else{
-		vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxAverageEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyAverageEnum); _assert_(vy_input);
 	}
 
@@ -2909,14 +2909,14 @@
 	IssmDouble vx,vy,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyEnum); _assert_(vy_input);
 	}
 	else{
-		vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxAverageEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyAverageEnum); _assert_(vy_input);
 	}
 
@@ -3015,5 +3015,5 @@
 		area_base=this->GetArea();
 		if(scaled==true){
-			Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+			Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 			scalefactor_input->GetInputAverage(&scalefactor);
 			area_base=area_base*scalefactor;
@@ -3021,6 +3021,6 @@
 
 		/*Now get the average height*/
-		Input2* surface_input = this->GetInput2(SurfaceEnum); _assert_(surface_input);
-		Input2* base_input    = this->GetInput2(BaseEnum);    _assert_(base_input);
+		Input* surface_input = this->GetInput(SurfaceEnum); _assert_(surface_input);
+		Input* base_input    = this->GetInput(BaseEnum);    _assert_(base_input);
 		surface_input->GetInputAverage(&surface);
 		base_input->GetInputAverage(&base);
@@ -3059,5 +3059,5 @@
 	base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);
 		base=base*scalefactor;
@@ -3065,7 +3065,7 @@
 
 	/*Now get the average height and bathymetry*/
-	Input2* surface_input = this->GetInput2(SurfaceEnum); _assert_(surface_input);
-	Input2* base_input    = this->GetInput2(BaseEnum);    _assert_(base_input);
-	Input2* bed_input     = this->GetInput2(BedEnum);     _assert_(bed_input);
+	Input* surface_input = this->GetInput(SurfaceEnum); _assert_(surface_input);
+	Input* base_input    = this->GetInput(BaseEnum);    _assert_(base_input);
+	Input* bed_input     = this->GetInput(BedEnum);     _assert_(bed_input);
 	if(!bed_input) _error_("Could not find bed");
 	surface_input->GetInputAverage(&surface);
@@ -3080,9 +3080,9 @@
 
 	/*New input*/
-	Input2* oldinput=NULL;
-	Input2* newinput=NULL;
+	Input* oldinput=NULL;
+	Input* newinput=NULL;
 
 	/*copy input of enum_type*/
-	oldinput=this->GetInput2(enum_type);
+	oldinput=this->GetInput(enum_type);
 	if(!oldinput)_error_("could not find old input with enum: " << EnumToStringx(enum_type));
 	newinput=oldinput->copy();
@@ -3143,5 +3143,5 @@
 
 	/*Add input to the element: */
-	this->AddInput2(enum_type,values,this->element_type);
+	this->AddInput(enum_type,values,this->element_type);
 
 	/*Free ressources:*/
@@ -3172,5 +3172,5 @@
 			}
 			/*update input*/
-			inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			break;
 
@@ -3183,5 +3183,5 @@
 			}
 			/*update input*/
-			inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			break;
 
@@ -3194,5 +3194,5 @@
 			}
 			/*update input*/
-			inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			inputs->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			break;
 
@@ -3223,8 +3223,8 @@
 			}
 			if(this->element_type==P1Enum){
-				inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+				inputs->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			}
 			else{
-				inputs2->SetTriaInput(name,this->element_type,this->lid,numnodes,values);
+				inputs->SetTriaInput(name,this->element_type,this->lid,numnodes,values);
 			}
 			break;
@@ -3236,5 +3236,5 @@
 			/*update input*/
 			//this->inputs->AddInput(new DoubleInput(name,value));
-			//inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
+			//inputs->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values);
 			_error_("not implemented");
 			break;
@@ -3354,5 +3354,5 @@
 	/*intermediary: */
 	IssmDouble* values=NULL;
-	Input2*     thickness_input=NULL;
+	Input*     thickness_input=NULL;
 	IssmDouble  thickness;
 	IssmDouble  weight;
@@ -3372,5 +3372,5 @@
 
 	/*Retrieve inputs required:*/
-	thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
+	thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
 
 	/*Retrieve material parameters: */
@@ -3434,14 +3434,14 @@
 	/*Get velocity and thickness*/
 	this->parameters->FindParam(&domaintype,DomainTypeEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyEnum); _assert_(vy_input);
 	}
 	else{
-		vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input);
+		vx_input=this->GetInput(VxAverageEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyAverageEnum); _assert_(vy_input);
 	}
 
@@ -3482,7 +3482,7 @@
 	/*Retrieve all inputs we will be needing: */
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* model_input=this->GetInput2(modelenum);   _assert_(model_input);
-	Input2* observation_input=this->GetInput2(observationenum);_assert_(observation_input);
-	Input2* weights_input     =this->GetInput2(weightsenum);     _assert_(weights_input);
+	Input* model_input=this->GetInput(modelenum);   _assert_(model_input);
+	Input* observation_input=this->GetInput(observationenum);_assert_(observation_input);
+	Input* weights_input     =this->GetInput(weightsenum);     _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3523,5 +3523,5 @@
 	/*Retrieve all inputs we will be needing: */
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* weights_input     =this->GetInput2(weightsenum);     _assert_(weights_input);
+	Input* weights_input     =this->GetInput(weightsenum);     _assert_(weights_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -3662,5 +3662,5 @@
 
 	/*First, serarch the input: */
-	Input2* data=this->GetInput2(natureofdataenum);
+	Input* data=this->GetInput(natureofdataenum);
 
 	/*figure out if we have the vertex id: */
@@ -3827,10 +3827,10 @@
 
 	/*For FS only: we want the CS to be tangential to the bedrock*/
-	this->GetInput2Value(&approximation,ApproximationEnum);
+	this->Element::GetInputValue(&approximation,ApproximationEnum);
 	if(!HasNodeOnBase() ||  approximation!=FSApproximationEnum) return;
 
 	/*Get inputs*/
-	Input2* slope_input=this->GetInput2(BedSlopeXEnum);                             _assert_(slope_input);
-	Input2* groundedicelevelset_input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
+	Input* slope_input=this->GetInput(BedSlopeXEnum);                             _assert_(slope_input);
+	Input* groundedicelevelset_input=this->GetInput(MaskOceanLevelsetEnum); _assert_(groundedicelevelset_input);
 	vertexonbase = xNew<IssmDouble>(numnodes);
 	this->GetInputListOnNodesVelocity(&vertexonbase[0],MeshVertexonbaseEnum);
@@ -3898,7 +3898,7 @@
 
 	/*Get inputs*/
-	Input2* bed_input = this->GetInput2(BedEnum);                     _assert_(bed_input);
-	Input2* qsg_input = this->GetInput2(FrontalForcingsSubglacialDischargeEnum);		 _assert_(qsg_input);
-	Input2* TF_input  = this->GetInput2(FrontalForcingsThermalForcingEnum);          _assert_(TF_input);
+	Input* bed_input = this->GetInput(BedEnum);                     _assert_(bed_input);
+	Input* qsg_input = this->GetInput(FrontalForcingsSubglacialDischargeEnum);		 _assert_(qsg_input);
+	Input* TF_input  = this->GetInput(FrontalForcingsThermalForcingEnum);          _assert_(TF_input);
 	Element::GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum);
 
@@ -3933,5 +3933,5 @@
 
 	/*Add input*/
-	this->AddInput2(CalvingMeltingrateEnum,&meltrates[0],P1Enum);
+	this->AddInput(CalvingMeltingrateEnum,&meltrates[0],P1Enum);
 
 	/*Cleanup and return*/
@@ -3966,10 +3966,10 @@
 	if(!IsInputEnum(control_enum)) return;
 
-	ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"value");   _assert_(input);
+	ElementInput* input=this->inputs->GetControlInputData(control_enum,"value");   _assert_(input);
 	this->GetVerticesLidList(&lidlist[0]);
 	GradientIndexing(&idlist[0],control_index);
 
 	/*Get values on vertices*/
-	if(input->ObjectEnum()==TriaInput2Enum && input->GetInputInterpolationType()==P1Enum){
+	if(input->ObjectEnum()==TriaInputEnum && input->GetInputInterpolationType()==P1Enum){
 		_assert_(N==1);
 		for(int i=0;i<NUMVERTICES;i++){
@@ -3978,9 +3978,9 @@
 		input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]);
 	}
-	else if(input->ObjectEnum()==TriaInput2Enum && input->GetInputInterpolationType()==P0Enum){
+	else if(input->ObjectEnum()==TriaInputEnum && input->GetInputInterpolationType()==P0Enum){
 		_assert_(N==1);
 		input->SetInput(P0Enum,this->lid,vector[idlist[0]]);
 	}
-	else if(input->ObjectEnum()==TransientInput2Enum){
+	else if(input->ObjectEnum()==TransientInputEnum){
 		for(int n=0;n<N;n++){
 			_error_("not implemented");
@@ -4011,19 +4011,19 @@
 void       Tria::SetElementInput(int enum_in,IssmDouble value){/*{{{*/
 
-	this->SetElementInput(this->inputs2,enum_in,value);
-
-}
-/*}}}*/
-void       Tria::SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble value){/*{{{*/
-
-	_assert_(inputs2);
-	inputs2->SetTriaInput(enum_in,P0Enum,this->lid,value);
-
-}
-/*}}}*/
-void       Tria::SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){/*{{{*/
-
-	_assert_(inputs2);
-	inputs2->SetTriaInput(enum_in,P1Enum,numindices,indices,values);
+	this->SetElementInput(this->inputs,enum_in,value);
+
+}
+/*}}}*/
+void       Tria::SetElementInput(Inputs* inputs,int enum_in,IssmDouble value){/*{{{*/
+
+	_assert_(inputs);
+	inputs->SetTriaInput(enum_in,P0Enum,this->lid,value);
+
+}
+/*}}}*/
+void       Tria::SetElementInput(Inputs* inputs,int numindices,int* indices,IssmDouble* values,int enum_in){/*{{{*/
+
+	_assert_(inputs);
+	inputs->SetTriaInput(enum_in,P1Enum,numindices,indices,values);
 
 }
@@ -4059,5 +4059,5 @@
 	seg->sid=this->sid;
 	seg->lid=this->lid;
-	seg->inputs2=this->inputs2;
+	seg->inputs=this->inputs;
 	seg->parameters=this->parameters;
 	seg->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED)
@@ -4112,6 +4112,6 @@
 
 	/*Retrieve all inputs we will need*/
-	Input2* vx_input=this->GetInput2(VxEnum);                                  _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);                                  _assert_(vy_input);
+	Input* vx_input=this->GetInput(VxEnum);                                  _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);                                  _assert_(vy_input);
 
 	/* Start looping on the number of vertices: */
@@ -4136,5 +4136,5 @@
 
 	/*Add input*/
-	this->AddInput2(StrainRateparallelEnum,&strainparallel[0],P1DGEnum);
+	this->AddInput(StrainRateparallelEnum,&strainparallel[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -4158,6 +4158,6 @@
 
 	/*Retrieve all inputs we will need*/
-	Input2* vx_input=this->GetInput2(VxEnum);                                  _assert_(vx_input);
-	Input2* vy_input=this->GetInput2(VyEnum);                                  _assert_(vy_input);
+	Input* vx_input=this->GetInput(VxEnum);                                  _assert_(vx_input);
+	Input* vy_input=this->GetInput(VyEnum);                                  _assert_(vy_input);
 
 	/* Start looping on the number of vertices: */
@@ -4182,5 +4182,5 @@
 
 	/*Add input*/
-	this->AddInput2(StrainRateperpendicularEnum,&strainperpendicular[0],P1DGEnum);
+	this->AddInput(StrainRateperpendicularEnum,&strainperpendicular[0],P1DGEnum);
 
 	/*Clean up and return*/
@@ -4230,6 +4230,6 @@
 
 	/*Get for Vx and Vy, the max of abs value: */
-	Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input);
-	Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input);
+	Input* vx_input = this->GetInput(VxEnum); _assert_(vx_input);
+	Input* vy_input = this->GetInput(VyEnum); _assert_(vy_input);
 	IssmDouble maxabsvx = vx_input->GetInputMaxAbs();
 	IssmDouble maxabsvy = vy_input->GetInputMaxAbs();
@@ -4359,14 +4359,14 @@
 	IssmDouble calvingratex,calvingratey,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* calvingratex_input=NULL;
-	Input2* calvingratey_input=NULL;
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* calvingratex_input=NULL;
+	Input* calvingratey_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-		calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
+		calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+		calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
 	}
 	else{
-		calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input);
-		calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input);
+		calvingratex_input=this->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
+		calvingratey_input=this->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
 	}
 
@@ -4488,20 +4488,20 @@
 	IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet;
 	IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input);
-	Input2* calvingratex_input=NULL;
-	Input2* calvingratey_input=NULL;
-	Input2* vx_input=NULL;
-	Input2* vy_input=NULL;
-	Input2* meltingrate_input=NULL;
+	Input* thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);
+	Input* calvingratex_input=NULL;
+	Input* calvingratey_input=NULL;
+	Input* vx_input=NULL;
+	Input* vy_input=NULL;
+	Input* meltingrate_input=NULL;
 	if(domaintype==Domain2DhorizontalEnum){
-		calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input);
-		calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input);
-		vx_input=this->GetInput2(VxEnum); _assert_(vx_input);
-		vy_input=this->GetInput2(VyEnum); _assert_(vy_input);
-		meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input);
+		calvingratex_input=this->GetInput(CalvingratexEnum); _assert_(calvingratex_input);
+		calvingratey_input=this->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);
+		vx_input=this->GetInput(VxEnum); _assert_(vx_input);
+		vy_input=this->GetInput(VyEnum); _assert_(vy_input);
+		meltingrate_input=this->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);
 	}
 	else{
-		calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input);
-		calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input);
+		calvingratex_input=this->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);
+		calvingratey_input=this->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);
 	}
 
@@ -4543,9 +4543,9 @@
 	/*Get material parameters :*/
 	rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* floatingmelt_input = this->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input);
-	Input2* gllevelset_input   = this->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
-	Input2* scalefactor_input  = NULL;
+	Input* floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input);
+	Input* gllevelset_input   = this->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+	Input* scalefactor_input  = NULL;
 	if(scaled==true){
-		scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 	}
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
@@ -4588,9 +4588,9 @@
 	/*Get material parameters :*/
 	rho_ice=FindParam(MaterialsRhoIceEnum);
-	Input2* groundedmelt_input = this->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input);
-	Input2* gllevelset_input = this->GetInput2(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
-	Input2* scalefactor_input = NULL;
+	Input* groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input);
+	Input* gllevelset_input = this->GetInput(MaskOceanLevelsetEnum); _assert_(gllevelset_input);
+	Input* scalefactor_input = NULL;
 	if(scaled==true){
-		scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 	}
 	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
@@ -4638,8 +4638,8 @@
 
 	/*Now get the average SMB over the element*/
-	Input2* smb_input = this->GetInput2(SmbMassBalanceEnum); _assert_(smb_input);
+	Input* smb_input = this->GetInput(SmbMassBalanceEnum); _assert_(smb_input);
 	smb_input->GetInputAverage(&smb);	// average smb on element in m ice s-1
 	if(scaled==true){
-		Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input);
+		Input* scalefactor_input = this->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);
 		scalefactor_input->GetInputAverage(&scalefactor);// average scalefactor on element
 	}
@@ -4653,5 +4653,5 @@
 }
 /*}}}*/
-void       Tria::Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){/*{{{*/
+void       Tria::Update(Inputs* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){/*{{{*/
 
 	/*Intermediaries*/
@@ -4807,6 +4807,6 @@
 
 	this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
-	Input2* input = this->GetInput2(extrusioninput);      _assert_(input);
-	Input2* onbase = this->GetInput2(MeshVertexonbaseEnum); _assert_(onbase);
+	Input* input = this->GetInput(extrusioninput);      _assert_(input);
+	Input* onbase = this->GetInput(MeshVertexonbaseEnum); _assert_(onbase);
 
 	GaussTria* gauss=new GaussTria();
@@ -4831,6 +4831,6 @@
 
 	this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum);
-	Input2* input = this->GetInput2(extrusioninput); _assert_(input);
-	Input2* onsurf = this->GetInput2(MeshVertexonsurfaceEnum); _assert_(onsurf);
+	Input* input = this->GetInput(extrusioninput); _assert_(input);
+	Input* onsurf = this->GetInput(MeshVertexonsurfaceEnum); _assert_(onsurf);
 
 	GaussTria* gauss=new GaussTria();
@@ -4996,10 +4996,10 @@
 
 	/*recover mantle viscosity: */
-	Input2* mantle_viscosity_input=this->GetInput2(GiaMantleViscosityEnum);
+	Input* mantle_viscosity_input=this->GetInput(GiaMantleViscosityEnum);
 	if (!mantle_viscosity_input)_error_("mantle viscosity input needed to compute gia deflection!");
 	mantle_viscosity_input->GetInputAverage(&mantle_viscosity);
 
 	/*recover lithosphere thickness: */
-	Input2* lithosphere_thickness_input=this->GetInput2(GiaLithosphereThicknessEnum);
+	Input* lithosphere_thickness_input=this->GetInput(GiaLithosphereThicknessEnum);
 	if (!lithosphere_thickness_input)_error_("lithosphere thickness input needed to compute gia deflection!");
 	lithosphere_thickness_input->GetInputAverage(&lithosphere_thickness);
@@ -5085,5 +5085,5 @@
 
 	/*Compute ice thickness change: */
-	Input2* deltathickness_input=this->GetInput2(EsaDeltathicknessEnum);
+	Input* deltathickness_input=this->GetInput(EsaDeltathicknessEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute elastic adjustment!");
 	deltathickness_input->GetInputAverage(&I);
@@ -5223,5 +5223,5 @@
 
 	/*Compute ice thickness change: */
-	Input2* deltathickness_input=this->GetInput2(EsaDeltathicknessEnum);
+	Input* deltathickness_input=this->GetInput(EsaDeltathicknessEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute elastic adjustment!");
 	deltathickness_input->GetInputAverage(&I);
@@ -5363,5 +5363,5 @@
 
 		/*Get area of element:*/
-		this->GetInput2Value(&area,AreaEnum);
+		this->Element::GetInputValue(&area,AreaEnum);
 
 		/*Average Sg over vertices:*/
@@ -5386,5 +5386,5 @@
 	/*Compute area of element:*/
 	IssmDouble area,planetarea;
-	this->GetInput2Value(&area,AreaEnum);
+	this->Element::GetInputValue(&area,AreaEnum);
 
 	/*recover earth area: */
@@ -5458,5 +5458,5 @@
 
 		/*Compute ice thickness change: */
-		Input2* deltathickness_input=this->GetInput2(SurfaceloadIceThicknessChangeEnum);
+		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessChangeEnum);
 		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!");
 		deltathickness_input->GetInputAverage(&I);
@@ -5475,5 +5475,5 @@
 
 	/*are we fully floating:*/
-	Input2* gr_input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(gr_input);
+	Input* gr_input=this->GetInput(MaskOceanLevelsetEnum); _assert_(gr_input);
 	if (gr_input->GetInputMax()<=0)masks->isfullyfloating[this->lid]=true;
 	else masks->isfullyfloating[this->lid]=false;
@@ -5622,13 +5622,13 @@
 
 	/*Add in inputs:*/
-    this->inputs2->SetArrayInput(SealevelriseIndicesEnum,this->lid,indices,gsize);
-    this->inputs2->SetArrayInput(SealevelriseGEnum,this->lid,G,gsize);
-    this->inputs2->SetArrayInput(SealevelriseGUEnum,this->lid,GU,gsize);
+    this->inputs->SetArrayInput(SealevelriseIndicesEnum,this->lid,indices,gsize);
+    this->inputs->SetArrayInput(SealevelriseGEnum,this->lid,G,gsize);
+    this->inputs->SetArrayInput(SealevelriseGUEnum,this->lid,GU,gsize);
     if(horiz){
-		this->inputs2->SetArrayInput(SealevelriseGNEnum,this->lid,GN,gsize);
-		this->inputs2->SetArrayInput(SealevelriseGEEnum,this->lid,GE,gsize);
-	}
-	this->inputs2->SetDoubleInput(AreaEnum,this->lid,area);
-	this->AddInput2(SealevelAreaEnum,&area,P0Enum);
+		this->inputs->SetArrayInput(SealevelriseGNEnum,this->lid,GN,gsize);
+		this->inputs->SetArrayInput(SealevelriseGEEnum,this->lid,GE,gsize);
+	}
+	this->inputs->SetDoubleInput(AreaEnum,this->lid,area);
+	this->AddInput(SealevelAreaEnum,&area,P0Enum);
 
 	/*Free allocations:*/
@@ -5696,5 +5696,5 @@
 	if(!masks->isiceonly[this->lid]){
 		#ifdef _ISSM_DEBUG_
-		constant=0; this->AddInput2(SealevelEustaticMaskEnum,&constant,P0Enum);
+		constant=0; this->AddInput(SealevelEustaticMaskEnum,&constant,P0Enum);
 		#endif
 		*peustatic=0; //do not forget to assign this pointer, otherwise, global eustatic will be garbage!
@@ -5706,5 +5706,5 @@
 		constant=0;
 		#ifdef _ISSM_DEBUG_
-		this->AddInput2(SealevelEustaticMaskEnum,&constant,P0Enum);
+		this->AddInput(SealevelEustaticMaskEnum,&constant,P0Enum);
 		#endif
 		*peustatic=0; //do not forget to assign this pointer, otherwise, global eustatic will be garbage!
@@ -5718,5 +5718,5 @@
 	constant=1;
 	#ifdef _ISSM_DEBUG_
-	this->AddInput2(SealevelEustaticMaskEnum,&constant,P0Enum);
+	this->AddInput(SealevelEustaticMaskEnum,&constant,P0Enum);
 	#endif
 
@@ -5729,8 +5729,8 @@
 
 	/*retrieve precomputed G:*/
-	this->inputs2->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
+	this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
 
 	/*Get area of element: precomputed in the sealevelrise_core_geometry:*/
-	this->GetInput2Value(&area,AreaEnum);
+	this->Element::GetInputValue(&area,AreaEnum);
 
 	/*Compute fraction of the element that is grounded: */
@@ -5744,5 +5744,5 @@
 
 	/*Retrieve ice thickness at vertices: */
-	Input2* deltathickness_input=this->GetInput2(SurfaceloadIceThicknessChangeEnum);
+	Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessChangeEnum);
 	if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!");
 
@@ -5828,11 +5828,11 @@
 
 	/*retrieve precomputed G:*/
-	this->inputs2->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
+	this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
 
 	/*Get area of element: precomputed in the sealevelrise_core_geometry:*/
-	this->GetInput2Value(&area,AreaEnum);
+	this->Element::GetInputValue(&area,AreaEnum);
 
 	/*Retrieve water height at vertices: */
-	Input2* deltathickness_input=this->GetInput2(SurfaceloadWaterHeightChangeEnum);
+	Input* deltathickness_input=this->GetInput(SurfaceloadWaterHeightChangeEnum);
 	if (!deltathickness_input)_error_("SurfaceloadWaterHeightChangeEnum input needed to compute sea level rise!");
 	deltathickness_input->GetInputAverage(&W);
@@ -5874,5 +5874,5 @@
 	/*Inform mask: */
 	#ifdef _ISSM_DEBUG_
-	constant=1; this->AddInput2(SealevelEustaticMaskEnum,&constant,P0Enum);
+	constant=1; this->AddInput(SealevelEustaticMaskEnum,&constant,P0Enum);
 	#endif
 
@@ -5881,11 +5881,11 @@
 
 	/*retrieve precomputed G:*/
-	this->inputs2->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
+	this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&gsize);
 
 	/*Get area of element: precomputed in the sealevelrise_core_geometry:*/
-	this->GetInput2Value(&area,AreaEnum);
+	this->Element::GetInputValue(&area,AreaEnum);
 
 	/*Retrieve bottom pressure change and average over the element: */
-	Input2* bottompressure_change_input=this->GetInput2(DslSeaWaterPressureChangeAtSeaFloorEnum);
+	Input* bottompressure_change_input=this->GetInput(DslSeaWaterPressureChangeAtSeaFloorEnum);
 	if (!bottompressure_change_input)_error_("bottom pressure input needed to compute sea level rise fingerprint!");
 	bottompressure_change_input->GetInputAverage(&BP);
@@ -5918,5 +5918,5 @@
 		constant=0;
 		#ifdef _ISSM_DEBUG_
-		this->AddInput2(SealevelEustaticOceanMaskEnum,&constant,P0Enum);
+		this->AddInput(SealevelEustaticOceanMaskEnum,&constant,P0Enum);
 		#endif
 		return;
@@ -5924,5 +5924,5 @@
 	constant=1;
 	#ifdef _ISSM_DEBUG_
-	this->AddInput2(SealevelEustaticOceanMaskEnum,&constant,P0Enum);
+	this->AddInput(SealevelEustaticOceanMaskEnum,&constant,P0Enum);
 	#endif
 
@@ -5931,5 +5931,5 @@
 
 	/*retrieve precomputed G:*/
-	this->inputs2->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&dummy); _assert_(dummy==gsize);
+	this->inputs->GetArrayPtr(SealevelriseGEnum,this->lid,&G,&dummy); _assert_(dummy==gsize);
 
 	/*From Sg_old, recover water sea level rise:*/
@@ -5977,8 +5977,8 @@
 
 	/*recover elastic Green's functions for displacement:*/
-	this->inputs2->GetArrayPtr(SealevelriseGUEnum,this->lid,&GU,&gsize);
+	this->inputs->GetArrayPtr(SealevelriseGUEnum,this->lid,&GU,&gsize);
 	if(horiz){
-		this->inputs2->GetArrayPtr(SealevelriseGEEnum,this->lid,&GE,&gsize);
-		this->inputs2->GetArrayPtr(SealevelriseGNEnum,this->lid,&GN,&gsize);
+		this->inputs->GetArrayPtr(SealevelriseGEEnum,this->lid,&GE,&gsize);
+		this->inputs->GetArrayPtr(SealevelriseGNEnum,this->lid,&GN,&gsize);
 	}
 
@@ -5993,5 +5993,5 @@
 		/*If bottom pressures are available, retrieve them to load the bedrock:*/
 		if(bp_compute_fingerprints){
-			Input2* bottompressure_change_input=this->GetInput2(DslSeaWaterPressureChangeAtSeaFloorEnum);
+			Input* bottompressure_change_input=this->GetInput(DslSeaWaterPressureChangeAtSeaFloorEnum);
 			if (!bottompressure_change_input)_error_("bottom pressure input needed to compute sea level rise fingerprint!");
 			bottompressure_change_input->GetInputAverage(&BP);
@@ -6014,5 +6014,5 @@
 
 		/*Compute ice thickness change: */
-		Input2* deltathickness_input=this->GetInput2(SurfaceloadIceThicknessChangeEnum);
+		Input* deltathickness_input=this->GetInput(SurfaceloadIceThicknessChangeEnum);
 		if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!");
 		deltathickness_input->GetInputAverage(&I);
@@ -6042,9 +6042,9 @@
 	
 	/*Branch according to whether we have a transient or not input: */
-	type=this->inputs2->GetInputObjectEnum(name);
-	if(type==TriaInput2Enum){
+	type=this->inputs->GetInputObjectEnum(name);
+	if(type==TriaInputEnum){
 		/*Figure out if we are P0 or P1 interpolation: */
-		TriaInput2* triainput = this->inputs2->GetTriaInput(name);
-		TriaInput2* triainput2 = this->inputs2->GetTriaInput(DummyEnum);
+		TriaInput* triainput = this->inputs->GetTriaInput(name);
+		TriaInput* triainput2 = this->inputs->GetTriaInput(DummyEnum);
 		this->InputServe(triainput);
 		interp=triainput->GetInterpolation();
@@ -6071,14 +6071,14 @@
 		else _error_("Tria::InputScaleFromDakota error message: input interpolation " << EnumToStringx(interp) << " not supported yet!");
 	}
-	else if(type==TransientInput2Enum){
+	else if(type==TransientInputEnum){
 
 		IssmDouble* steps=NULL;
 		int nsteps;
-		TransientInput2* transientinput = NULL;
-		TransientInput2* transientinput2 = NULL;
+		TransientInput* transientinput = NULL;
+		TransientInput* transientinput2 = NULL;
 
 		/*retrieve transient input:*/
-		transientinput= this->inputs2->GetTransientInput(name); _assert_(transientinput);
-		transientinput2= this->inputs2->GetTransientInput(DummyEnum); _assert_(transientinput2);
+		transientinput= this->inputs->GetTransientInput(name); _assert_(transientinput);
+		transientinput2= this->inputs->GetTransientInput(DummyEnum); _assert_(transientinput2);
 
 		/*retrieve time steps: */
@@ -6095,6 +6095,6 @@
 		/*go through the transient inputs, and update:*/
 		for (int i=0;i<nsteps;i++){
-			TriaInput2* triainput=transientinput->GetTriaInput(i);
-			TriaInput2* triainput2=transientinput2->GetTriaInput(i);
+			TriaInput* triainput=transientinput->GetTriaInput(i);
+			TriaInput* triainput2=transientinput2->GetTriaInput(i);
 			this->InputServe(triainput);
 			interp=triainput->GetInterpolation();
@@ -6132,5 +6132,5 @@
 	/*Check that name is an element input*/
 	if(!IsInputEnum(name)) _error_("Enum "<<EnumToStringx(name)<<" is not in IsInput");
-	TransientInput2* transientinput = inputs2->GetTransientInput(name);
+	TransientInput* transientinput = inputs->GetTransientInput(name);
 
 	switch(type){
@@ -6243,14 +6243,14 @@
 
 					/*Add new inputs: */
-					this->AddInput2(ThicknessEnum,thickness,P1Enum);
-					this->AddInput2(BaseEnum,bed,P1Enum);
-					this->AddInput2(SurfaceEnum,surface,P1Enum);
+					this->AddInput(ThicknessEnum,thickness,P1Enum);
+					this->AddInput(BaseEnum,bed,P1Enum);
+					this->AddInput(SurfaceEnum,surface,P1Enum);
 
 					break;
 				case MaterialsRheologyBEnum:
-					this->AddInput2(MaterialsRheologyBbarEnum,values,P1Enum);
+					this->AddInput(MaterialsRheologyBbarEnum,values,P1Enum);
 					break;
 				default:
-					this->AddInput2(name,values,P1Enum);
+					this->AddInput(name,values,P1Enum);
 			}
 			break;
@@ -6260,5 +6260,5 @@
 			/*Get value for the element: */
 			value=vector[this->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!)
-			this->AddInput2(name,&value,P0Enum);
+			this->AddInput(name,&value,P0Enum);
 			break;
 		default:
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 25379)
@@ -65,5 +65,5 @@
 		void        ComputeStressTensor();
 		void        ComputeSurfaceNormalVelocity();
-		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs2* inputs2in);
+		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs* inputsin);
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int M,int N,int interp);
 		void        ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum,int control_interp);
@@ -84,6 +84,6 @@
 		IssmDouble  GetIcefrontArea();
 		void	      GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
-		void        GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
-		void        GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value);
+		void        GetInputListOnVertices(IssmDouble* pvalue,Input* input,IssmDouble default_value);
+		void        GetInputListOnNodes(IssmDouble* pvalue,Input* input,IssmDouble default_value);
 		void	      GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level);
 		int         GetVertexIndex(Vertex* vertex);
@@ -127,6 +127,6 @@
 		void        RignotMeltParameterization();
 		void        SetElementInput(int enum_in,IssmDouble values);
-		void        SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values);
-		void        SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in);
+		void        SetElementInput(Inputs* inputs,int enum_in,IssmDouble values);
+		void        SetElementInput(Inputs* inputs,int numindices,int* indices,IssmDouble* values,int enum_in);
 		void        SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int M,int N);
 		void        SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters);
@@ -144,5 +144,5 @@
 		IssmDouble  TotalGroundedBmb(bool scaled);
 		IssmDouble  TotalSmb(bool scaled);
-		void        Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
+		void        Update(Inputs* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);
 		int         UpdatePotentialUngrounding(IssmDouble* vertices_potentially_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf);
 		void        ValueP1DerivativesOnGauss(IssmDouble* dvalue,IssmDouble* values,IssmDouble* xyz_list,Gauss* gauss);
@@ -175,8 +175,8 @@
 		/*}}}*/
 		/*Tria specific routines:{{{*/
-		void           AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum);
-		void           AddInput2(int input_enum, IssmDouble* values, int interpolation_enum);
-		void           AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id);
-		void           DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum);
+		void           AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum);
+		void           AddInput(int input_enum, IssmDouble* values, int interpolation_enum);
+		void           AddControlInput(int input_enum,Inputs* inputs,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id);
+		void           DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs* inputs,IoModel* iomodel,int input_enum);
 		void           CreateInputTimeAverage(int transientinput_enum,int averagedinput_enum,IssmDouble init_time,IssmDouble end_time,int averaging_method);
 		void           GetInputAveragesUpToCurrentTime(int input_enum,IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime);
@@ -188,8 +188,8 @@
 		void           GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble* xyz_zero,IssmDouble* xyz_list,int numpoints);
 		int            GetElementType(void);
-		Input2*        GetInput2(int enumtype);
-		Input2*        GetInput2(int enumtype,IssmDouble time);
-		Input2*        GetInput2(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method);
-		DatasetInput2* GetDatasetInput2(int inputenum);
+		Input*        GetInput(int enumtype);
+		Input*        GetInput(int enumtype,IssmDouble time);
+		Input*        GetInput(int inputenum,IssmDouble start_time,IssmDouble end_time,int averaging_method);
+		DatasetInput* GetDatasetInput(int inputenum);
 		void           GetInputValue(IssmDouble* pvalue,Node* node,int enumtype);
 		void           GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype);
@@ -227,5 +227,5 @@
 		void           NormalTop(IssmDouble* normal,IssmDouble* xyz_list);
 		void           SetTemporaryElementType(int element_type_in){_error_("not implemented yet");};
-		void           InputServe(Input2* input_in);
+		void           InputServe(Input* input_in);
 		Seg*	         SpawnSeg(int index1,int index2);
 		IssmDouble     StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 25379)
@@ -17,7 +17,7 @@
 #include "../shared/Enum/Enum.h"
 #include "../analyses/analyses.h"
-#include "./Inputs2/DatasetInput2.h"
-#include "./Inputs2/ElementInput2.h"
-#include "./Inputs2/TransientInput2.h"
+#include "./Inputs/DatasetInput.h"
+#include "./Inputs/ElementInput.h"
+#include "./Inputs/TransientInput.h"
 
 #if _HAVE_CODIPACK_
@@ -202,5 +202,5 @@
 	if(materials)delete materials;
 	if(parameters)delete parameters;
-	if(inputs2)delete inputs2;
+	if(inputs)delete inputs;
 	if(results)delete results;
 
@@ -343,5 +343,5 @@
 	output->materials=static_cast<Materials*>(this->materials->Copy());
 	output->parameters=static_cast<Parameters*>(this->parameters->Copy());
-	output->inputs2=static_cast<Inputs2*>(this->inputs2->Copy());
+	output->inputs=static_cast<Inputs*>(this->inputs->Copy());
 	output->results=static_cast<Results*>(this->results->Copy());
 	output->vertices=static_cast<Vertices*>(this->vertices->Copy());
@@ -362,5 +362,5 @@
 		SpcNodesx(output->nodes_list[i],output->constraints_list[i],output->parameters);
 		NodesDofx(output->nodes_list[i],output->parameters);
-		ConfigureObjectsx(output->elements,output->loads_list[i],output->nodes_list[i],output->vertices,output->materials,output->parameters,output->inputs2);
+		ConfigureObjectsx(output->elements,output->loads_list[i],output->nodes_list[i],output->vertices,output->materials,output->parameters,output->inputs);
 	}
 
@@ -436,5 +436,5 @@
 
 	/*create datasets for all analyses*/
-	ModelProcessorx(&this->elements,&this->nodes_list,&this->vertices,&this->materials,&this->constraints_list,&this->loads_list,&this->parameters,&this->inputs2,iomodel,toolkitsoptionsfid,rootpath,this->solution_type,this->nummodels,this->analysis_type_list);
+	ModelProcessorx(&this->elements,&this->nodes_list,&this->vertices,&this->materials,&this->constraints_list,&this->loads_list,&this->parameters,&this->inputs,iomodel,toolkitsoptionsfid,rootpath,this->solution_type,this->nummodels,this->analysis_type_list);
 
 	/*do the post-processing of the datasets to get an FemModel that can actually run analyses: */
@@ -445,5 +445,5 @@
 
 		if(VerboseMProcessor()) _printf0_("      configuring element and loads\n");
-		ConfigureObjectsx(this->elements,this->loads,this->nodes,this->vertices,this->materials,this->parameters,this->inputs2);
+		ConfigureObjectsx(this->elements,this->loads,this->nodes,this->vertices,this->materials,this->parameters,this->inputs);
 
 		if(i==0){
@@ -470,5 +470,5 @@
 		delete this->materials;
 		delete this->parameters;
-		delete this->inputs2;
+		delete this->inputs;
 		if(this->constraints_list && this->nummodels){
 			for(i=0;i<this->nummodels;i++) delete this->constraints_list[i];
@@ -490,5 +490,5 @@
 		this->materials   = new Materials();
 		this->parameters  = new Parameters();
-		this->inputs2     = new Inputs2();
+		this->inputs     = new Inputs();
 		this->results     = new Results();
 		this->nodes       = new Nodes();
@@ -506,5 +506,5 @@
 	this->materials->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
 	this->parameters->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
-	this->inputs2->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+	this->inputs->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
 	this->results->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
 	this->vertices->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
@@ -538,5 +538,5 @@
 			SpcNodesx(this->nodes_list[i],this->constraints_list[i],this->parameters);
 			NodesDofx(this->nodes_list[i],this->parameters);
-			ConfigureObjectsx(this->elements,this->loads_list[i],this->nodes_list[i],this->vertices,this->materials,this->parameters,this->inputs2);
+			ConfigureObjectsx(this->elements,this->loads_list[i],this->nodes_list[i],this->vertices,this->materials,this->parameters,this->inputs);
 		}
 
@@ -980,11 +980,11 @@
 		/* Get node coordinates*/
 		element->GetVerticesCoordinates(&xyz_list);
-		DatasetInput2* weights_input                   = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
-		Input2* thickness_input                 = element->GetInput2(ThicknessEnum); _assert_(thickness_input);
-		Input2* vx_input                        = element->GetInput2(VxEnum);                                  _assert_(vx_input);
-		Input2* vy_input                        = element->GetInput2(VyEnum);                                  _assert_(vy_input);
-		Input2* surface_mass_balance_input      = element->GetInput2(SmbMassBalanceEnum);          _assert_(surface_mass_balance_input);
-		Input2* groundedice_melting_input       = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input);
-		Input2* dhdt_input                      = element->GetInput2(BalancethicknessThickeningRateEnum);      _assert_(dhdt_input);
+		DatasetInput* weights_input                   = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
+		Input* thickness_input                 = element->GetInput(ThicknessEnum); _assert_(thickness_input);
+		Input* vx_input                        = element->GetInput(VxEnum);                                  _assert_(vx_input);
+		Input* vy_input                        = element->GetInput(VyEnum);                                  _assert_(vy_input);
+		Input* surface_mass_balance_input      = element->GetInput(SmbMassBalanceEnum);          _assert_(surface_mass_balance_input);
+		Input* groundedice_melting_input       = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input);
+		Input* dhdt_input                      = element->GetInput(BalancethicknessThickeningRateEnum);      _assert_(dhdt_input);
 
 		/* Start  looping on the number of gaussian points: */
@@ -1617,10 +1617,10 @@
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
 		element->GetInputListOnVertices(P1DGlist,enum_in);
-		element->AddInput2(DummyEnum,P1DGlist,P1DGEnum);
+		element->AddInput(DummyEnum,P1DGlist,P1DGEnum);
 	}
 	xDelete<IssmDouble>(P1DGlist);
 
-	this->inputs2->ChangeEnum(DummyEnum,enum_in);
-	this->inputs2->DeleteInput(DummyEnum);
+	this->inputs->ChangeEnum(DummyEnum,enum_in);
+	this->inputs->DeleteInput(DummyEnum);
 
 }/*}}}*/
@@ -1770,5 +1770,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VxEnum);
+		Input*  input = element->GetInput(VxEnum);
 		element_maxabsvx=input->GetInputMaxAbs();
 		if(element_maxabsvx>maxabsvx) maxabsvx=element_maxabsvx;
@@ -1795,5 +1795,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VyEnum);
+		Input*  input = element->GetInput(VyEnum);
 		element_maxabsvy=input->GetInputMaxAbs();
 		if(element_maxabsvy>maxabsvy) maxabsvy=element_maxabsvy;
@@ -1820,5 +1820,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VzEnum);
+		Input*  input = element->GetInput(VzEnum);
 		element_maxabsvz=input->GetInputMaxAbs();
 		if(element_maxabsvz>maxabsvz) maxabsvz=element_maxabsvz;
@@ -1864,5 +1864,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2* vel_input = element->GetInput2(VelEnum); _assert_(vel_input);
+		Input* vel_input = element->GetInput(VelEnum); _assert_(vel_input);
 		element_maxvel = vel_input->GetInputMax();
 		if(element_maxvel>maxvel) maxvel=element_maxvel;
@@ -1889,5 +1889,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input);
+		Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input);
 		element_maxvx = vx_input->GetInputMax();
 		if(element_maxvx>maxvx) maxvx=element_maxvx;
@@ -1914,5 +1914,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input);
+		Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input);
 		element_maxvy = vy_input->GetInputMax();
 		if(element_maxvy>maxvy) maxvy=element_maxvy;
@@ -1939,5 +1939,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input);
+		Input* vz_input = element->GetInput(VzEnum); _assert_(vz_input);
 		element_maxvz = vz_input->GetInputMax();
 		if(element_maxvz>maxvz) maxvz=element_maxvz;
@@ -1964,5 +1964,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VelEnum);
+		Input*  input = element->GetInput(VelEnum);
 		element_minvel =input->GetInputMin();
 		if(element_minvel<minvel) minvel=element_minvel;
@@ -1989,5 +1989,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VxEnum);
+		Input*  input = element->GetInput(VxEnum);
 		element_minvx =input->GetInputMin();
 		if(element_minvx<minvx) minvx=element_minvx;
@@ -2014,5 +2014,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VyEnum);
+		Input*  input = element->GetInput(VyEnum);
 		element_minvy =input->GetInputMin();
 		if(element_minvy<minvy) minvy=element_minvy;
@@ -2039,5 +2039,5 @@
 	for(i=0;i<this->elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i));
-		Input2*  input = element->GetInput2(VzEnum);
+		Input*  input = element->GetInput(VzEnum);
 		element_minvz =input->GetInputMin();
 		if(element_minvz<minvz) minvz=element_minvz;
@@ -2075,6 +2075,6 @@
 
 		/*Retrieve all inputs we will be needing: */
-		DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-		Input2* omega_input   = element->GetInput2(BalancethicknessOmegaEnum);              _assert_(omega_input);
+		DatasetInput* weights_input = element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+		Input* omega_input   = element->GetInput(BalancethicknessOmegaEnum);              _assert_(omega_input);
 
 		/* Start  looping on the number of gaussian points: */
@@ -2132,7 +2132,7 @@
 
 		/*Retrieve all inputs we will be needing: */
-		DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-		Input2* omega_input   =element->GetInput2(BalancethicknessOmegaEnum);              _assert_(omega_input);
-		Input2* omega0_input  =element->GetInput2(BalancethicknessOmega0Enum);             _assert_(omega0_input);
+		DatasetInput* weights_input =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+		Input* omega_input   =element->GetInput(BalancethicknessOmegaEnum);              _assert_(omega_input);
+		Input* omega0_input  =element->GetInput(BalancethicknessOmega0Enum);             _assert_(omega0_input);
 
 		/* Start  looping on the number of gaussian points: */
@@ -2691,7 +2691,7 @@
 
 		 /*Retrieve all inputs we will be needing: */
-		 DatasetInput2* weights_input   =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-		 Input2* surface_input   =element->GetInput2(SurfaceEnum);                            _assert_(surface_input);
-		 Input2* surfaceobs_input=element->GetInput2(InversionSurfaceObsEnum);                _assert_(surfaceobs_input);
+		 DatasetInput* weights_input   =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+		 Input* surface_input   =element->GetInput(SurfaceEnum);                            _assert_(surface_input);
+		 Input* surfaceobs_input=element->GetInput(InversionSurfaceObsEnum);                _assert_(surfaceobs_input);
 
 		 /* Start  looping on the number of gaussian points: */
@@ -2747,6 +2747,6 @@
 
 		/*Retrieve all inputs we will be needing: */
-		DatasetInput2* weights_input   =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-		Input2* thickness_input =element->GetInput2(ThicknessEnum);                          _assert_(thickness_input);
+		DatasetInput* weights_input   =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+		Input* thickness_input =element->GetInput(ThicknessEnum);                          _assert_(thickness_input);
 
 		/* Start  looping on the number of gaussian points: */
@@ -2833,5 +2833,5 @@
 		H[1]=Hserial[element->vertices[1]->Sid()];
 		H[2]=Hserial[element->vertices[2]->Sid()];
-		element->AddInput2(ThicknessEnum,H,P1Enum);
+		element->AddInput(ThicknessEnum,H,P1Enum);
 	}
 
@@ -2866,6 +2866,6 @@
 
 		/*Retrieve all inputs we will be needing: */
-		DatasetInput2* weights_input   =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-		Input2* thickness_input =element->GetInput2(ThicknessEnum);                          _assert_(thickness_input);
+		DatasetInput* weights_input   =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+		Input* thickness_input =element->GetInput(ThicknessEnum);                          _assert_(thickness_input);
 
 		/* Start  looping on the number of gaussian points: */
@@ -3176,5 +3176,5 @@
 
 	/*Creating inputs*/
-	Inputs2* new_inputs2=new Inputs2(newnumberofelements,newnumberofvertices);
+	Inputs* new_inputs=new Inputs(newnumberofelements,newnumberofvertices);
 
 	/*Creating materials*/
@@ -3241,5 +3241,5 @@
 		}
 
-		ConfigureObjectsx(new_elements,this->loads,new_nodes_list[i],new_vertices,new_materials,this->parameters,new_inputs2);
+		ConfigureObjectsx(new_elements,this->loads,new_nodes_list[i],new_vertices,new_materials,this->parameters,new_inputs);
 		SpcNodesx(new_nodes_list[i],new_constraints_list[i],this->parameters);
 		NodesDofx(new_nodes_list[i],this->parameters);
@@ -3247,8 +3247,8 @@
 
 	/*Interpolate all inputs and insert them into the new elements.*/
-	this->InterpolateInputs(new_vertices,new_elements,new_inputs2);
+	this->InterpolateInputs(new_vertices,new_elements,new_inputs);
 
 	/*Delete old structure and set new pointers*/
-	delete this->inputs2;   this->inputs2 = new_inputs2;
+	delete this->inputs;   this->inputs = new_inputs;
 	delete this->vertices;  this->vertices = new_vertices;
 	delete this->elements;  this->elements = new_elements;
@@ -3313,5 +3313,5 @@
 		}
 		/*insert new bedrock*/
-		element->AddInput2(BedEnum,&r[0],P1Enum);
+		element->AddInput(BedEnum,&r[0],P1Enum);
 		/*Cleanup*/
 		xDelete<IssmDouble>(xyz_list);
@@ -3361,7 +3361,7 @@
 
 		/*Update inputs*/
-		element->AddInput2(MaskOceanLevelsetEnum,&phi[0],P1Enum);
-		element->AddInput2(ThicknessEnum,&h[0],P1Enum);
-		element->AddInput2(BaseEnum,&b[0],P1Enum);
+		element->AddInput(MaskOceanLevelsetEnum,&phi[0],P1Enum);
+		element->AddInput(ThicknessEnum,&h[0],P1Enum);
+		element->AddInput(BaseEnum,&b[0],P1Enum);
 	}
 
@@ -3395,5 +3395,5 @@
 
 	/*Figure out how many inputs we have and their respective interpolation*/
-	this->inputs2->GetInputsInterpolations(&numinputs,&input_interpolations,&input_enums);
+	this->inputs->GetInputsInterpolations(&numinputs,&input_interpolations,&input_enums);
 
 	/*Count and get enums of all inputs in old mesh*/
@@ -3421,6 +3421,6 @@
 					break;
 				case P0Enum:
-				case IntInput2Enum:
-				case BoolInput2Enum:
+				case IntInputEnum:
+				case BoolInputEnum:
 					if(step){
 						P0input_enums[numP0inputs]  = input_enums[i];
@@ -3446,17 +3446,17 @@
 			switch(P0input_interp[j]){
 				case P0Enum:{
-					Input2* input=element->GetInput2(P0input_enums[j]);
+					Input* input=element->GetInput(P0input_enums[j]);
 					input->GetInputAverage(&value);
 				}
 							 break;
-				case IntInput2Enum:{
+				case IntInputEnum:{
 					int valueint;
-					element->GetInput2Value(&valueint,P0input_enums[j]);
+					element->GetInputValue(&valueint,P0input_enums[j]);
 					value = reCast<IssmDouble>(valueint);
 				}
 									 break;
-				case BoolInput2Enum:{
+				case BoolInputEnum:{
 					bool valuebool;
-					element->GetInput2Value(&valuebool,P0input_enums[j]);
+					element->GetInputValue(&valuebool,P0input_enums[j]);
 					value = reCast<IssmDouble>(valuebool);
 				}
@@ -3472,6 +3472,6 @@
 		/*Get P1 inputs*/
 		for(int j=0;j<numP1inputs;j++){
-			Input2* temp = element->GetInput2(P1input_enums[j]); _assert_(temp);
-			ElementInput2* input=xDynamicCast<ElementInput2*>(temp);
+			Input* temp = element->GetInput(P1input_enums[j]); _assert_(temp);
+			ElementInput* input=xDynamicCast<ElementInput*>(temp);
 			pos[0]=element->vertices[0]->Sid()*numP1inputs+j;
 			pos[1]=element->vertices[1]->Sid()*numP1inputs+j;
@@ -3506,5 +3506,5 @@
 }
 /*}}}*/
-void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements,Inputs2* newinputs2){/*{{{*/
+void FemModel::InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements,Inputs* newinputs){/*{{{*/
 
 	int numberofelements			= -1;												//global, entire old mesh
@@ -3575,11 +3575,11 @@
 			switch(P0input_interp[j]){
 				case P0Enum:
-					element->SetElementInput(newinputs2,P0input_enums[j],newP0inputs[i*numP0inputs+j]);
+					element->SetElementInput(newinputs,P0input_enums[j],newP0inputs[i*numP0inputs+j]);
 					break;
-				case IntInput2Enum:
-					element->SetIntInput(newinputs2,P0input_enums[j],reCast<int>(newP0inputs[i*numP0inputs+j]));
+				case IntInputEnum:
+					element->SetIntInput(newinputs,P0input_enums[j],reCast<int>(newP0inputs[i*numP0inputs+j]));
 					break;
-				case BoolInput2Enum:
-					element->SetBoolInput(newinputs2,P0input_enums[j],reCast<bool>(newP0inputs[i*numP0inputs+j]));
+				case BoolInputEnum:
+					element->SetBoolInput(newinputs,P0input_enums[j],reCast<bool>(newP0inputs[i*numP0inputs+j]));
 					break;
 				default:
@@ -3593,5 +3593,5 @@
 			values[1]=newP1inputs[sidtoindex[element->vertices[1]->Sid()]*numP1inputs+j];
 			values[2]=newP1inputs[sidtoindex[element->vertices[2]->Sid()]*numP1inputs+j];
-			newinputs2->SetTriaInput(P1input_enums[j],P1Enum,3,vertexlids,values);
+			newinputs->SetTriaInput(P1input_enums[j],P1Enum,3,vertexlids,values);
 		}
 	}
@@ -3697,5 +3697,5 @@
 			newtria->isonbase = true;
 			newtria->parameters=NULL;
-			newtria->inputs2=NULL;
+			newtria->inputs=NULL;
 			newtria->nodes=NULL;
 			newtria->vertices=NULL;
@@ -4723,5 +4723,5 @@
 	for(int i=0;i<elements->Size();i++){
 		Element*   element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		element->GetInput2Value(&area,AreaEnum);
+		element->GetInputValue(&area,AreaEnum);
 		if (masks->isoceanin[i]) oceanarea_cpu += area;
 	}
@@ -5212,8 +5212,8 @@
 
 	for(int i=0;i<numoutputs;i++){
-		this->inputs2->DeleteInput(transientinput_enum[i]);
-		this->inputs2->SetTransientInput(transientinput_enum[i],NULL,0);
+		this->inputs->DeleteInput(transientinput_enum[i]);
+		this->inputs->SetTransientInput(transientinput_enum[i],NULL,0);
 		/*We need to configure this input!*/
-		TransientInput2* transientinput = this->inputs2->GetTransientInput(transientinput_enum[i]); _assert_(transientinput);
+		TransientInput* transientinput = this->inputs->GetTransientInput(transientinput_enum[i]); _assert_(transientinput);
 		transientinput->Configure(this->parameters);
 	}
@@ -5231,5 +5231,5 @@
 				/*Get the right transient input*/
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
-				TransientInput2* transientinput = this->inputs2->GetTransientInput(transientinput_enum[i]);
+				TransientInput* transientinput = this->inputs->GetTransientInput(transientinput_enum[i]);
 
 				/*Get values and lid list*/
Index: /issm/trunk-jpl/src/c/classes/FemModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/FemModel.h	(revision 25379)
@@ -11,5 +11,5 @@
 class DataSet;
 class Parameters;
-class Inputs2;
+class Inputs;
 class Nodes;
 class Vertices;
@@ -45,5 +45,5 @@
 		Materials   *materials;            //one set of materials, for each element
 		Parameters  *parameters;           //one set of parameters, independent of the analysis_type
-		Inputs2     *inputs2;              //one set of inputs, independent of the analysis_type
+		Inputs     *inputs;              //one set of inputs, independent of the analysis_type
 		Results     *results;              //results that cannot be fit into the elements
 		Vertices    *vertices;             //one set of vertices
@@ -200,5 +200,5 @@
 		void CreateConstraints(Vertices* newfemmodel_vertices,int analysis_enum,Constraints* newfemmodel_constraints);
 		void GetInputs(int* pnumP0inputs,IssmDouble** pP0inputs,int** pP0input_enums,int** pP0input_interp,int* pnumP1inputs,IssmDouble** pP1inputs,int** pP1input_enums,int** pP1input_interp);
-		void InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements,Inputs2* new_inputs);
+		void InterpolateInputs(Vertices* newfemmodel_vertices,Elements* newfemmodel_elements,Inputs* new_inputs);
 		void UpdateElements(int newnumberofelements,int* newelementslist,bool* my_elements,int analysis_counter,Elements* newelements);
 		void WriteMeshInResults(void);
Index: /issm/trunk-jpl/src/c/classes/Inputs/ArrayInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ArrayInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ArrayInput.cpp	(revision 25379)
@@ -0,0 +1,144 @@
+/*!\file ArrayInput.c
+ * \brief: implementation of the ArrayInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./ArrayInput.h"
+
+/*ArrayInput constructors and destructor*/
+ArrayInput::ArrayInput(void){/*{{{*/
+
+	this->numberofelements_local = -1;
+	this->N                      = NULL;
+	this->values                 = NULL;
+
+}/*}}}*/
+ArrayInput::ArrayInput(int nbe_in){/*{{{*/
+
+	_assert_(nbe_in>0);
+	_assert_(nbe_in<1e11);
+	this->numberofelements_local = nbe_in;
+	this->N                      = xNewZeroInit<int>(this->numberofelements_local);
+	this->values                 = xNewZeroInit<IssmDouble*>(this->numberofelements_local);
+
+}/*}}}*/
+ArrayInput::~ArrayInput(){/*{{{*/
+	if(this->values){
+		for(int i=0;i<this->numberofelements_local;i++) if(this->values[i]) xDelete<IssmDouble>(this->values[i]);
+		xDelete<IssmDouble>(this->values);
+	}
+	if(this->N) xDelete<int>(this->N);
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* ArrayInput::copy() {/*{{{*/
+
+	ArrayInput* output = new ArrayInput(this->numberofelements_local);
+
+	output->N = xNew<int>(this->numberofelements_local);
+	xMemCpy<int>(output->N,this->N,this->numberofelements_local);
+
+	output->values = xNew<IssmDouble*>(this->numberofelements_local);
+	for(int i=0;i<this->numberofelements_local;i++){
+		if(this->values[i]){
+			_assert_(this->N[i]>0);
+			output->values[i] = xNew<IssmDouble>(this->N[i]);
+			xMemCpy<IssmDouble>(output->values[i],this->values[i],this->N[i]);
+		}
+		else{
+			output->values[i] = NULL;
+		}
+	}
+
+	return output;
+}
+/*}}}*/
+void ArrayInput::DeepEcho(void){/*{{{*/
+	_printf_("ArrayInput Echo:\n");
+	///_printf_("   Size:          "<<N<<"\n");
+	//printarray(this->values,this->M,this->N);
+	//_printf_(setw(15)<<"   ArrayInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
+}
+/*}}}*/
+void ArrayInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  ArrayInput::Id(void){/*{{{*/
+	return -1;
+}/*}}}*/
+void ArrayInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(ArrayInputEnum);
+	MARSHALLING(this->numberofelements_local);
+	if(this->numberofelements_local){
+		MARSHALLING_DYNAMIC(this->N,int,this->numberofelements_local);
+		for(int i=0;i<this->numberofelements_local;i++){
+			if(this->values[i]){
+				MARSHALLING_DYNAMIC(this->values[i],IssmDouble,this->N[i]);
+			}
+		}
+	}
+	else{
+		this->N      = NULL;
+		this->values = NULL;
+	}
+
+}
+/*}}}*/
+int  ArrayInput::ObjectEnum(void){/*{{{*/
+	return ArrayInputEnum;
+}
+/*}}}*/
+
+/*ArrayInput management*/
+void ArrayInput::SetInput(int row,int numindices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0 && row<this->numberofelements_local);
+
+	if(this->N[row] != numindices){
+		if(this->values[row]) xDelete<IssmDouble>(this->values[row]);
+		this->values[row] = xNew<IssmDouble>(numindices);
+	}
+
+	IssmDouble *el_values = this->values[row];
+	for(int i=0;i<numindices;i++) el_values[i] = values_in[i];
+
+	this->N[row] = numindices;
+}
+/*}}}*/
+void ArrayInput::GetArray(int row,IssmDouble** pvalues,int* pN){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0 && row<this->numberofelements_local);
+	if(pvalues){
+		IssmDouble* outvalues = xNew<IssmDouble>(this->N[row]);
+		xMemCpy<IssmDouble>(outvalues,this->values[row],this->N[row]);
+		*pvalues = outvalues;
+	}
+	if(pN){
+		*pN = this->N[row];
+	}
+}
+/*}}}*/
+void ArrayInput::GetArrayPtr(int row,IssmDouble** pvalues,int* pN){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0 && row<this->numberofelements_local);
+	if(pvalues){
+		*pvalues = this->values[row];
+	}
+	if(pN){
+		*pN = this->N[row];
+	}
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/ArrayInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ArrayInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ArrayInput.h	(revision 25379)
@@ -0,0 +1,34 @@
+#ifndef _ARRAYINPUT2_H_
+#define _ARRAYINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+
+class ArrayInput: public Input{
+
+	private:
+		int         numberofelements_local;
+		int*        N;
+		IssmDouble** values;
+
+	public:
+		/*ArrayInput constructors, destructors: {{{*/
+		ArrayInput();
+		ArrayInput(int nbe_in);
+		~ArrayInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*ArrayInput management:*/
+		void SetInput(int row,int numinds,IssmDouble* values_in);
+		void GetArray(int row,IssmDouble** pvalues,int* pN);
+		void GetArrayPtr(int row,IssmDouble** pvalues,int* pN);
+
+};
+#endif  /* _ARRAYINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp	(revision 25379)
@@ -0,0 +1,93 @@
+/*!\file BoolInput.c
+ * \brief: implementation of the BoolInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "./BoolInput.h"
+#include "../../shared/shared.h"
+
+/*BoolInput constructors and destructor*/
+BoolInput::BoolInput(){/*{{{*/
+	this->size   = -1;
+	this->values = NULL;
+}
+/*}}}*/
+BoolInput::BoolInput(int size_in){/*{{{*/
+	_assert_(size_in>0);
+	_assert_(size_in<1e11);
+	this->size   = size_in;
+	this->values = xNew<bool>(size_in);
+}
+/*}}}*/
+BoolInput::~BoolInput(){/*{{{*/
+	xDelete<bool>(this->values);
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* BoolInput::copy() {/*{{{*/
+
+	_assert_(this->size);
+	BoolInput* output = new BoolInput(this->size);
+	xMemCpy<bool>(output->values,this->values,this->size);
+
+	return output;
+
+}
+/*}}}*/
+void BoolInput::DeepEcho(void){/*{{{*/
+
+	_printf_("BoolInput Echo:\n");
+	_printf_("   Size:          "<<size<<"\n");
+	printarray(this->values,this->size);
+}
+/*}}}*/
+void BoolInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  BoolInput::Id(void){ return -1; }/*{{{*/
+/*}}}*/
+void BoolInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(BoolInputEnum);
+	MARSHALLING(this->size);
+	if(this->size > 0){
+		MARSHALLING_DYNAMIC(this->values,bool,this->size)
+	}
+	else this->values = NULL;
+
+}
+/*}}}*/
+int  BoolInput::ObjectEnum(void){/*{{{*/
+
+	return BoolInputEnum;
+
+}
+/*}}}*/
+
+/*BoolInput management*/
+void BoolInput::GetInput(bool* pvalue,int index){/*{{{*/
+
+	_assert_(index>=0); 
+	_assert_(index<this->size); 
+
+	*pvalue = this->values[index];
+}
+/*}}}*/
+void BoolInput::SetInput(int index,bool value){/*{{{*/
+
+	_assert_(index>=0); 
+	_assert_(index<this->size); 
+
+	this->values[index] = value;
+}
+/*}}}*/
+
+/*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h	(revision 25379)
@@ -0,0 +1,35 @@
+#ifndef _BOOLINPUT2_H_
+#define _BOOLINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+
+class BoolInput: public Input{
+
+	private:
+		int   size;
+		bool* values;
+
+	public:
+		/*BoolInput constructors, destructors: {{{*/
+		BoolInput();
+		BoolInput(int size_in);
+		~BoolInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*BoolInput management: {{{*/
+		void GetInput(bool* pvalue,int index);
+		void SetInput(int index,bool value);
+		/*}}}*/
+		/*numerics: {{{*/
+		/*}}}*/
+
+};
+#endif  /* _BOOLINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp	(revision 25379)
@@ -0,0 +1,207 @@
+/*!\file ControlInput.c
+ * \brief: implementation of the ControlInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./ControlInput.h"
+#include "./ElementInput.h"
+#include "./TriaInput.h"
+#include "./PentaInput.h"
+//#include "../../toolkits/objects/Vector.h"
+
+/*ControlInput constructors and destructor*/
+ControlInput::ControlInput(){/*{{{*/
+	control_id  = 0;
+	values      = NULL;
+	savedvalues = NULL;
+	minvalues   = NULL;
+	maxvalues   = NULL;
+	gradient    = NULL;
+}
+/*}}}*/
+ControlInput::ControlInput(int nbe, int nbv,int input_layout_enum,int interp,int id){/*{{{*/
+
+	this->control_id  = id;
+	this->layout_enum = input_layout_enum;
+
+	switch(this->layout_enum){
+		case TriaInputEnum:
+			this->values     =new TriaInput(nbe,nbv,interp);
+			this->savedvalues=new TriaInput(nbe,nbv,interp);
+			this->minvalues  =new TriaInput(nbe,nbv,interp);
+			this->maxvalues  =new TriaInput(nbe,nbv,interp);
+			this->gradient   =new TriaInput(nbe,nbv,interp);
+			break;
+		case PentaInputEnum:
+			this->values     =new PentaInput(nbe,nbv,interp);
+			this->savedvalues=new PentaInput(nbe,nbv,interp);
+			this->minvalues  =new PentaInput(nbe,nbv,interp);
+			this->maxvalues  =new PentaInput(nbe,nbv,interp);
+			this->gradient   =new PentaInput(nbe,nbv,interp);
+			break;
+		default:
+			_error_("Input of Enum \"" << EnumToStringx(input_layout_enum) << "\" not supported yet by ControlInput");
+	}
+}
+/*}}}*/
+ControlInput::~ControlInput(){/*{{{*/
+	if(values)      delete values;
+	if(savedvalues) delete savedvalues;
+	if(minvalues)   delete minvalues;
+	if(maxvalues)   delete maxvalues;
+	if(gradient)    delete gradient;
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* ControlInput::copy() {/*{{{*/
+
+	ControlInput* output=NULL;
+
+	output = new ControlInput();
+	output->enum_type=this->enum_type;
+	output->control_id=this->control_id;
+	output->layout_enum = this->control_id;
+
+	if(values)      output->values      = xDynamicCast<ElementInput*>(this->values->copy());
+	if(savedvalues) output->savedvalues = xDynamicCast<ElementInput*>(this->savedvalues->copy());
+	if(minvalues)   output->minvalues   = xDynamicCast<ElementInput*>(this->minvalues->copy());
+	if(maxvalues)   output->maxvalues   = xDynamicCast<ElementInput*>(this->maxvalues->copy());
+	if(gradient)    output->gradient    = xDynamicCast<ElementInput*>(this->gradient->copy());
+
+	return output;
+}
+/*}}}*/
+void ControlInput::DeepEcho(void){/*{{{*/
+
+	_printf_("ControlInput:\n");
+	_printf_(setw(15)<<"   ControlInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<"\n");
+	_printf_(setw(15)<<"   ControlInput "<<setw(25)<<left<<EnumToStringx(this->layout_enum)<<"\n");
+	_printf_("---values: \n");     if (values)      values->Echo();
+	_printf_("---savedvalues: \n");if (savedvalues) savedvalues->Echo();
+	_printf_("---minvalues: \n");  if (minvalues)   minvalues->Echo();
+	_printf_("---maxvalues: \n");  if (maxvalues)   maxvalues->Echo();
+	_printf_("---gradient: \n");   if (gradient){    gradient->Echo();} else{_printf_("     Not set yet\n");}
+}
+/*}}}*/
+void ControlInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  ControlInput::Id(void){ return -1; }/*{{{*/
+/*}}}*/
+void ControlInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(ControlInputEnum);
+	_error_("Not implemented");
+}
+/*}}}*/
+int  ControlInput::ObjectEnum(void){/*{{{*/
+
+	return ControlInputEnum;
+
+}
+/*}}}*/
+
+void ControlInput::SetControl(int interp,int numindices,int* indices,IssmDouble* values_in,IssmDouble* values_min,IssmDouble* values_max){/*{{{*/
+
+	_assert_(this);
+
+	/*Set input*/
+	//TriaInput* input = xDynamicCast<TriaInput*>(this->inputs[id]);
+	this->values->SetInput(interp,numindices,indices,values_in);
+	this->minvalues->SetInput(interp,numindices,indices,values_min);
+	this->maxvalues->SetInput(interp,numindices,indices,values_max);
+}
+/*}}}*/
+void ControlInput::SetGradient(int interp,int numindices,int* indices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->gradient);
+	this->gradient->SetInput(interp,numindices,indices,values_in);
+}
+/*}}}*/
+void ControlInput::SetGradient(int interp,int numindices,int* indices,IssmDouble* values_in,int n){/*{{{*/
+
+	if(this->values->ObjectEnum()!=TransientInputEnum)_error_("you are in the wrong place, go home");
+	_assert_(this);
+	_assert_(this->gradient);
+	_error_("S");
+
+	//TransientInput* transient_input = xDynamicCast<TransientInput*>(this->gradient);
+	//TransientInput* values_input    = xDynamicCast<TransientInput*>(this->values);
+	//if(values_input->numtimesteps==transient_input->numtimesteps){
+	//	TransientInput* new_trans_input = new TransientInput(ControlInputGradEnum);
+	//	IssmDouble time = transient_input->GetTimeByOffset(timestep);
+	//	for(int i=0;i<transient_input->numtimesteps;i++){
+	//		if(transient_input->timesteps[i]==time) new_trans_input->AddTimeInput(xDynamicCast<TriaInput*>(gradient_in),time);
+	//		else {
+	//			Input* input = transient_input->GetTimeInput(transient_input->timesteps[i]);
+	//			new_trans_input->AddTimeInput(xDynamicCast<TriaInput*>(input),transient_input->timesteps[i]);
+	//		}
+	//	}
+	//	this->gradient=new_trans_input;
+	//}
+	//else{
+	//	IssmDouble time = values_input->GetTimeByOffset(timestep);
+	//	transient_input->AddTimeInput(gradient_in,time);
+	//}
+
+
+	//NEW??
+	//this->gradient->SetInput(interp,numindices,indices,values_in);
+}
+/*}}}*/
+TriaInput* ControlInput::GetTriaInput(){/*{{{*/
+
+	/*Cast and return*/
+	if(this->values->ObjectEnum()!=TriaInputEnum){
+		_error_("Cannot return a TriaInput");
+	}
+	return xDynamicCast<TriaInput*>(this->values);
+
+}
+/*}}}*/
+PentaInput* ControlInput::GetPentaInput(){/*{{{*/
+
+	/*Cast and return*/
+	if(this->values->ObjectEnum()!=PentaInputEnum){
+		_error_("Cannot return a PentaInput");
+	}
+	return xDynamicCast<PentaInput*>(this->values);
+
+}
+/*}}}*/
+ElementInput* ControlInput::GetInput(const char* data){/*{{{*/
+
+	if(strcmp(data,"value")==0){
+		_assert_(values);
+		return values;
+	}
+	else if(strcmp(data,"savedvalues")==0){
+		_assert_(savedvalues);
+		return values;
+	}
+	else if (strcmp(data,"lowerbound")==0){
+		_assert_(minvalues);
+		return minvalues;
+	}
+	else if (strcmp(data,"upperbound")==0){
+		_assert_(maxvalues);
+		return maxvalues;
+	}
+	else if (strcmp(data,"gradient")==0){
+		_assert_(gradient);
+		return gradient;
+	}
+	else{
+		_error_("Data " << data << " not supported yet");
+	}
+
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h	(revision 25379)
@@ -0,0 +1,47 @@
+/*! \file ControlInput.h 
+ *  \brief: header file for triavertexinput object
+ */
+
+#ifndef _CONTROLINPUT2_H_
+#define _CONTROLINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+class Gauss;
+class ElementInput;
+
+class ControlInput: public Input{
+
+	public:
+		int            control_id;
+		int            enum_type;
+		int            layout_enum;
+		ElementInput *gradient;
+		ElementInput *maxvalues;
+		ElementInput *minvalues;
+		ElementInput *savedvalues;
+		ElementInput *values;
+
+		/*ControlInput constructors, destructors: {{{*/
+		ControlInput();
+		ControlInput(int nbe, int nbv,int input_layout_enum,int interp,int id);
+		~ControlInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input* copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id(); 
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		void SetInput(Input* in_input){_error_("not impelemented");};
+		void SetInput(Input* in_input,int timeoffset){_error_("not impelemented");};
+		ElementInput* GetInput(const char* data);
+		void SetControl(int interp,int numindices,int* indices,IssmDouble* values_in,IssmDouble* values_min,IssmDouble* values_max);
+		void SetGradient(int interp,int numindices,int* indices,IssmDouble* values_in);
+		void SetGradient(int interp,int numindices,int* indices,IssmDouble* values_in,int n);
+		TriaInput* GetTriaInput();
+		PentaInput* GetPentaInput();
+};
+#endif  /* _CONTROLINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp	(revision 25379)
@@ -0,0 +1,287 @@
+/*!\file DatasetInput.c
+ * \brief: implementation of the datasetinput object
+ */
+/*Headers*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./DatasetInput.h"
+#include "./TriaInput.h"
+#include "./PentaInput.h"
+#include "./TransientInput.h"
+
+/*DatasetInput constructors and destructor*/
+DatasetInput::DatasetInput(){/*{{{*/
+	this->inputs    = NULL;
+	this->numids    = 0;
+	this->ids       = NULL;
+	this->numberofelements_local = -1;
+	this->numberofvertices_local = -1;
+}
+/*}}}*/
+DatasetInput::DatasetInput(int nbe, int nbv){/*{{{*/
+	this->inputs    = NULL;
+	this->numids    = 0;
+	this->ids       = NULL;
+	this->numberofelements_local = nbe;
+	this->numberofvertices_local = nbv;
+}
+/*}}}*/
+DatasetInput::~DatasetInput(){/*{{{*/
+	xDelete<int>(this->ids);
+	for(int i=0;i<this->numids;i++){
+		delete this->inputs[i];
+	}
+	xDelete<Input*>(this->inputs);
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* DatasetInput::copy() {/*{{{*/
+
+	DatasetInput* output=NULL;
+
+	output = new DatasetInput();
+	output->numids=this->numids;
+	if(this->numids>0){
+		output->ids=xNew<int>(output->numids);
+		xMemCpy(output->ids,this->ids,output->numids);
+		output->inputs = xNew<Input*>(this->numids);
+		for(int i=0;i<this->numids;i++){
+			output->inputs[i] = this->inputs[i]->copy();
+		}
+	}
+
+	return output;
+}
+/*}}}*/
+void DatasetInput::Configure(Parameters* params){/*{{{*/
+	for(int i=0;i<this->numids;i++){
+		this->inputs[i]->Configure(params);
+	}
+}
+/*}}}*/
+void DatasetInput::DeepEcho(void){/*{{{*/
+
+	_printf_("DatasetInput:\n");
+	_printf_("   numids:"<< this->numids<< "\n");
+	_printf_("      ids: ");
+	for(int i=0;i<this->numids;i++) _printf_(this->ids[i]<<" ("<<EnumToStringx(this->ids[i])<<") ");
+	_printf_("\n");
+	//_printf_("   inputs: \n"); inputs->Echo();
+}
+/*}}}*/
+void DatasetInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  DatasetInput::Id(void){ return -1; }/*{{{*/
+/*}}}*/
+void DatasetInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(DatasetInputEnum);
+
+	MARSHALLING(numids);
+	MARSHALLING(this->numberofelements_local);
+	MARSHALLING(this->numberofvertices_local);
+	MARSHALLING_DYNAMIC(ids,int,numids);
+	//if (marshall_direction == MARSHALLING_BACKWARD) inputs = new Inputs();
+	//inputs->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+	_error_("not implemented");
+
+}
+/*}}}*/
+int  DatasetInput::ObjectEnum(void){/*{{{*/
+	return DatasetInputEnum;
+}/*}}}*/
+
+void DatasetInput::SetTriaInput(int id,int interp_in,int numinds,int* rows,IssmDouble* values_in){ /*{{{*/
+
+	int  index = -1;
+	for(int i=0;i<this->numids;i++){
+		if(this->ids[i] == id) index = i;
+	}
+
+	/*Create new input if not found*/
+	if(index == -1){
+		int* new_ids = xNew<int>(this->numids+1);
+		if(this->numids) xMemCpy(new_ids,this->ids,this->numids);
+		new_ids[this->numids] = id;
+
+		Input** new_inputs = xNew<Input*>(this->numids+1);
+		if(this->numids) xMemCpy(new_inputs,this->inputs,this->numids);
+		new_inputs[this->numids] = new TriaInput(this->numberofelements_local,this->numberofvertices_local,interp_in);
+		index = this->numids;
+
+		xDelete<int>(this->ids);
+		this->ids = new_ids;
+		xDelete<Input*>(this->inputs);
+		this->inputs = new_inputs;
+
+		this->numids ++;
+	}
+
+	/*Set input*/
+	if(this->inputs[index]->ObjectEnum()!=TriaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[index]->ObjectEnum()));
+	TriaInput* input = xDynamicCast<TriaInput*>(this->inputs[index]);
+	input->SetInput(interp_in,numinds,rows,values_in);
+
+}
+/*}}}*/
+void DatasetInput::SetPentaInput(int id,int interp_in,int numinds,int* rows,IssmDouble* values_in){ /*{{{*/
+
+	int  index = -1;
+	for(int i=0;i<this->numids;i++){
+		if(this->ids[i] == id) index = i;
+	}
+
+	/*Create new input if not found*/
+	if(index == -1){
+		int* new_ids = xNew<int>(this->numids+1);
+		if(this->numids) xMemCpy(new_ids,this->ids,this->numids);
+		new_ids[this->numids] = id;
+
+		Input** new_inputs = xNew<Input*>(this->numids+1);
+		if(this->numids) xMemCpy(new_inputs,this->inputs,this->numids);
+		new_inputs[this->numids] = new PentaInput(this->numberofelements_local,this->numberofvertices_local,interp_in);
+		index = this->numids;
+
+		xDelete<int>(this->ids);
+		this->ids = new_ids;
+		xDelete<Input*>(this->inputs);
+		this->inputs = new_inputs;
+
+		this->numids ++;
+	}
+
+	/*Set input*/
+	if(this->inputs[index]->ObjectEnum()!=PentaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[index]->ObjectEnum()));
+	PentaInput* input = xDynamicCast<PentaInput*>(this->inputs[index]);
+	input->SetInput(interp_in,numinds,rows,values_in);
+
+}
+/*}}}*/
+TransientInput* DatasetInput::SetTransientInput(int id,IssmDouble* times,int numtimes){ /*{{{*/
+
+	int  index = -1;
+	for(int i=0;i<this->numids;i++){
+		if(this->ids[i] == id) index = i;
+	}
+
+	/*Create new input if not found*/
+	if(index == -1){
+		int* new_ids = xNew<int>(this->numids+1);
+		if(this->numids) xMemCpy(new_ids,this->ids,this->numids);
+		new_ids[this->numids] = id;
+
+		Input** new_inputs = xNew<Input*>(this->numids+1);
+		if(this->numids) xMemCpy(new_inputs,this->inputs,this->numids);
+		new_inputs[this->numids] = new TransientInput(NoneEnum,this->numberofelements_local,this->numberofvertices_local,times,numtimes);
+		index = this->numids;
+
+		xDelete<int>(this->ids);
+		this->ids = new_ids;
+		xDelete<Input*>(this->inputs);
+		this->inputs = new_inputs;
+
+		this->numids ++;
+	}
+
+	/*Set input*/
+	if(this->inputs[index]->ObjectEnum()!=TransientInputEnum) _error_("cannot add values to a "<<EnumToStringx(this->inputs[index]->ObjectEnum()));
+	TransientInput* input = xDynamicCast<TransientInput*>(this->inputs[index]);
+	return input;
+}
+/*}}}*/
+void DatasetInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss,int id){ /*{{{*/
+
+	int  index = -1;
+	for(int i=0;i<this->numids;i++){
+		if(this->ids[i] == id) index = i;
+	}
+
+	/*Create new input if not found*/
+	if(index == -1){
+		this->Echo();
+		_error_("Could not find input "<<id<<" ("<<EnumToStringx(id)<<"?) in DatasetInput");
+	}
+
+	Input* input = this->inputs[index];
+
+	if(this->inputs[index]->ObjectEnum()==TransientInputEnum){
+		input = xDynamicCast<TransientInput*>(this->inputs[index])->current_input;
+	}
+
+	input->GetInputValue(pvalue,gauss);
+
+}
+/*}}}*/
+IssmDouble DatasetInput::GetInputMin(void){ /*{{{*/
+
+	IssmDouble minvalue,newminvalue;
+	for(int i=0;i<this->numids;i++){
+
+		Input* input = this->inputs[i];
+
+		if(this->inputs[i]->ObjectEnum()==TransientInputEnum){
+			input = xDynamicCast<TransientInput*>(this->inputs[i])->current_input;
+		}
+		newminvalue=input->GetInputMin();
+		if(i==0)minvalue=newminvalue;
+		else minvalue=min(minvalue,newminvalue);
+	}
+	return minvalue;
+
+}
+/*}}}*/
+TransientInput* DatasetInput::GetTransientInputByOffset(int offset){/*{{{*/
+
+	_assert_(offset>=0 && offset<this->numids);
+	_assert_(this->inputs[offset]);
+
+	/*Cast and return*/
+	if(this->inputs[offset]->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(this->inputs[offset]);
+	}
+	else{
+		_error_("Cannot return a TransientInput");
+	}
+}/*}}}*/
+TriaInput* DatasetInput::GetTriaInput(void){/*{{{*/
+
+	return this->GetTriaInputByOffset(0);
+
+}/*}}}*/
+TriaInput* DatasetInput::GetTriaInputByOffset(int offset){/*{{{*/
+
+	_assert_(offset>=0 && offset<this->numids);
+	_assert_(this->inputs[offset]);
+
+	/*Cast and return*/
+	if(this->inputs[offset]->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(this->inputs[offset])->GetTriaInput();
+	}
+	if(this->inputs[offset]->ObjectEnum()!=TriaInputEnum){
+		_error_("Cannot return a TriaInput");
+	}
+	return xDynamicCast<TriaInput*>(this->inputs[offset]);
+
+}/*}}}*/
+PentaInput* DatasetInput::GetPentaInputByOffset(int offset){/*{{{*/
+
+	_assert_(offset>=0 && offset<this->numids);
+	_assert_(this->inputs[offset]);
+
+	/*Cast and return*/
+	if(this->inputs[offset]->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(this->inputs[offset])->GetPentaInput();
+	}
+	if(this->inputs[offset]->ObjectEnum()!=PentaInputEnum){
+		_error_("Cannot return a PentaInput");
+	}
+	return xDynamicCast<PentaInput*>(this->inputs[offset]);
+
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h	(revision 25379)
@@ -0,0 +1,50 @@
+/*! \file DatasetInput.h 
+ *  \brief: header file for datasetinput object
+ */
+
+#ifndef _DATASETINPUT2_H_
+#define _DATASETINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+class TriaInput;
+class PentaInput;
+class TransientInput;
+
+class DatasetInput: public Input{
+
+	private:
+		int             numids;
+		Input        **inputs;
+		int            *ids;
+		int             numberofelements_local;
+		int             numberofvertices_local;
+		
+	public:
+		int GetNumIds() const {return this->numids;};
+		/*DatasetInput constructors, destructors: {{{*/
+		DatasetInput();
+		DatasetInput(int nbe, int nbv);
+		~DatasetInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input* copy();
+		void    Configure(Parameters* params);
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		void    SetTriaInput(int interp_in,int numinds,int* rows,IssmDouble* values_in);
+		/*}}}*/
+		IssmDouble GetInputMin();
+		void SetTriaInput(int id,int interp_in,int numinds,int* rows,IssmDouble* values_in);
+		void SetPentaInput(int id,int interp_in,int numinds,int* rows,IssmDouble* values_in);
+		TransientInput* SetTransientInput(int id,IssmDouble* times,int numtimes);
+		PentaInput* GetPentaInputByOffset(int i);
+		TriaInput*  GetTriaInput(void);
+		TriaInput*  GetTriaInputByOffset(int i);
+		TransientInput* GetTransientInputByOffset(int offset);
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int index);
+};
+#endif  /* _DATASETINPUT2_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp	(revision 25379)
@@ -0,0 +1,93 @@
+/*!\file DoubleInput.c
+ * \brief: implementation of the DoubleInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./DoubleInput.h"
+
+/*DoubleInput constructors and destructor*/
+DoubleInput::DoubleInput(){/*{{{*/
+	this->size   = -1;
+	this->values = NULL;
+}
+/*}}}*/
+DoubleInput::DoubleInput(int size_in){/*{{{*/
+	_assert_(size_in>0);
+	_assert_(size_in<1e11);
+	this->size   = size_in;
+	this->values = xNew<IssmDouble>(size_in);
+}
+/*}}}*/
+DoubleInput::~DoubleInput(){/*{{{*/
+	xDelete<IssmDouble>(this->values);
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* DoubleInput::copy() {/*{{{*/
+
+	DoubleInput* output = new DoubleInput(this->size);
+	xMemCpy<IssmDouble>(output->values,this->values,this->size);
+
+	return output;
+}
+/*}}}*/
+void DoubleInput::DeepEcho(void){/*{{{*/
+
+	_printf_("DoubleInput Echo:\n");
+	_printf_("   Size:          "<<size<<"\n");
+	printarray(this->values,this->size);
+	//_printf_(setw(15)<<"   DoubleInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
+}
+/*}}}*/
+void DoubleInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  DoubleInput::Id(void){ return -1; }/*{{{*/
+/*}}}*/
+void DoubleInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(DoubleInputEnum);
+
+	MARSHALLING(this->size);
+	if(this->size > 0){
+		MARSHALLING_DYNAMIC(this->values,IssmDouble,this->size)
+	}
+	else this->values = NULL;
+
+}
+/*}}}*/
+int  DoubleInput::ObjectEnum(void){/*{{{*/
+
+	return DoubleInputEnum;
+
+}
+/*}}}*/
+
+/*DoubleInput management*/
+void DoubleInput::GetInput(IssmDouble* pvalue,int index){/*{{{*/
+
+	_assert_(index>=0); 
+	_assert_(index<this->size); 
+
+	*pvalue = this->values[index];
+}
+/*}}}*/
+void DoubleInput::SetInput(int index,IssmDouble value){/*{{{*/
+
+	_assert_(index>=0); 
+	_assert_(index<this->size); 
+
+	this->values[index] = value;
+}
+/*}}}*/
+
+/*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h	(revision 25379)
@@ -0,0 +1,33 @@
+#ifndef _DOUBLEINPUT2_H_
+#define _DOUBLEINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+
+class DoubleInput: public Input{
+
+	private:
+		int   size;
+		IssmDouble*  values;
+
+	public:
+		/*DoubleInput constructors, destructors: {{{*/
+		DoubleInput();
+		DoubleInput(int size_in);
+		~DoubleInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*DoubleInput management: {{{*/
+		void GetInput(IssmDouble* pvalue,int index);
+		void SetInput(int index,IssmDouble value);
+		/*}}}*/
+
+};
+#endif  /* _BOOLINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/ElementInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ElementInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ElementInput.cpp	(revision 25379)
@@ -0,0 +1,36 @@
+/*!\file ElementInput.c
+ * \brief: implementation of the ElementInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./ElementInput.h"
+
+/*ElementInput constructors and destructor*/
+ElementInput::ElementInput(){/*{{{*/
+	this->interpolation  = -1;
+	this->M              = -1;
+	this->N              = -1;
+	this->isserved       = false;
+	this->element_values = NULL;
+	this->values         = NULL;
+}
+/*}}}*/
+ElementInput::~ElementInput(){/*{{{*/
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+	if(this->values)         xDelete<IssmDouble>(this->values);
+}
+/*}}}*/
+
+/*Numerics*/
+int ElementInput::GetInputInterpolationType(void){/*{{{*/
+
+	return this->interpolation;
+
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/ElementInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/ElementInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/ElementInput.h	(revision 25379)
@@ -0,0 +1,46 @@
+#ifndef _ELEMENTINPUT2_H_
+#define _ELEMENTINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+
+class ElementInput: public Input{
+
+	protected:
+		int         numberofelements_local;
+		int         numberofvertices_local;
+		int         interpolation;
+		int         M,N;
+		bool        isserved;
+		IssmDouble* values;
+
+	public:
+		IssmDouble* element_values;
+
+		/*ElementInput constructors, destructors*/ 
+		ElementInput();
+		~ElementInput();
+
+		int  GetInputInterpolationType();
+
+		/*Object virtual functions definitions:*/
+		virtual Input *copy()=0;
+		virtual void    DeepEcho()=0;
+		virtual void    Echo()=0;
+		virtual int     Id()=0;
+		virtual void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction)=0;
+		virtual int     ObjectEnum()=0;
+		/*Other*/
+		virtual void SetInput(int interp_in,int row,IssmDouble value_in)=0;
+		virtual void SetInput(int interp_in,int numinds,int* rows,IssmDouble* values_in)=0;
+		virtual void SetInput(int interp_in,int row,int numinds,IssmDouble* values_in)=0;
+		virtual int  GetInterpolation()=0;
+		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss)=0;
+		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss)=0;
+		virtual void Serve(int numindices,int* indices)=0;
+		virtual void Serve(int row,int numindices)=0;
+		virtual int  GetResultArraySize(void)=0;
+		virtual int  GetResultInterpolation(void)=0;
+		virtual int  GetResultNumberOfNodes(void)=0;
+};
+#endif  /* _ELEMENTINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/Input.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Input.h	(revision 25379)
@@ -0,0 +1,56 @@
+/*!\file:  Input.h
+ * \brief abstract class for Input object
+ */
+
+#ifndef _INPUT2_H_
+#define _INPUT2_H_
+
+/*Headers:*/
+#include "../../shared/shared.h"
+#include "../../datastructures/Object.h"
+class Gauss;
+class Parameters;
+class SegInput;
+class TriaInput;
+class PentaInput;
+template <class doubletype> class Vector;
+
+class Input: public Object{
+
+	private:
+		int enum_type;
+	public:
+
+		/*Non virtual functions*/
+		int  InstanceEnum(){return this->enum_type;};
+		void ChangeEnum(int newenumtype){this->enum_type=newenumtype;};
+
+		/*Virtual functions*/
+		virtual ~Input(){};
+		virtual void Configure(Parameters* parameters){return;};
+		virtual Input* copy()=0;
+		//virtual void GetInputAllTimeAverages(IssmDouble** pvalues,IssmDouble** ptimes, int* pnumtimes){_error_("Not implemented yet");};
+		virtual void  GetInputAverage(IssmDouble* pvalue){_error_("Not implemented yet");};
+		virtual IssmDouble GetInputMax(void){_error_("Not implemented yet");};
+		virtual IssmDouble GetInputMaxAbs(void){_error_("Not implemented yet");};
+		virtual IssmDouble GetInputMin(void){_error_("Not implemented yet");};
+		virtual void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss){_error_("Not implemented yet");};
+		virtual void GetInputValue(IssmDouble* pvalue,Gauss* gauss){int* temp = xNew<int>(3); _error_("Not implemented yet for");};
+		virtual int  GetInputInterpolationType(){_error_("Not implemented yet");};
+		virtual SegInput*   GetSegInput(){ int* temp = xNew<int>(3); this->Echo(); _error_("Not implemented yet");};
+		virtual TriaInput*  GetTriaInput(){ int* temp = xNew<int>(3); this->Echo(); _error_("Not implemented yet");};
+		virtual PentaInput* GetPentaInput(){int* temp = xNew<int>(3); this->Echo(); _error_("Not implemented yet");};
+		//virtual void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){_error_("Not implemented yet");};
+
+		virtual void   AXPY(Input* xinput,IssmDouble scalar){_error_("Not implemented yet");};
+		virtual void   PointWiseMult(Input* xinput){_error_("Not implemented yet");};
+		virtual void   Pow(IssmDouble scale_factor){_error_("Not implemented yet");};
+		virtual void   Scale(IssmDouble scale_factor){_error_("Not implemented yet");};
+
+		virtual int  GetResultArraySize(void){_error_("Not implemented yet");};
+		virtual int  GetResultInterpolation(void){_error_("Not implemented yet");};
+		virtual int  GetResultNumberOfNodes(void){_error_("Not implemented yet");};
+		//virtual void ResultToMatrix(IssmDouble* values,int ncols,int sid){_error_("not supported yet");};
+		//virtual void ResultToPatch(IssmDouble* values,int nodesperelement,int sid){_error_("not supported yet");};
+};
+#endif
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp	(revision 25379)
@@ -0,0 +1,940 @@
+/*\file Inputs.cpp
+ * \brief: Implementation of the Inputs class, derived from DataSet class.
+ */
+
+/*Headers: {{{*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./Input.h"
+#include "./Inputs.h"
+
+#include "./BoolInput.h"
+#include "./IntInput.h"
+#include "./DoubleInput.h"
+#include "./ElementInput.h"
+#include "./SegInput.h"
+#include "./TriaInput.h"
+#include "./PentaInput.h"
+#include "./TransientInput.h"
+#include "./ControlInput.h"
+#include "./DatasetInput.h"
+#include "./ArrayInput.h"
+using namespace std;
+/*}}}*/
+
+/*Object constructors and destructor*/
+Inputs::Inputs(void){/*{{{*/
+
+	this->numberofelements_local = 0;
+	this->numberofvertices_local = 0;
+
+	/*Initialize pointers*/
+	for(int i=0;i<NUMINPUTS;i++) this->inputs[i] = NULL;
+}
+/*}}}*/
+Inputs::Inputs(int nbe,int nbv){/*{{{*/
+
+	this->numberofelements_local = nbe;
+	this->numberofvertices_local = nbv;
+
+	/*Initialize pointers*/
+	for(int i=0;i<NUMINPUTS;i++) this->inputs[i] = NULL;
+}
+/*}}}*/
+Inputs::~Inputs(){/*{{{*/
+	for(int i=0;i<NUMINPUTS;i++){
+		if(this->inputs[i]) delete this->inputs[i];
+	}
+	return;
+}
+/*}}}*/
+
+Inputs* Inputs::Copy(void){/*{{{*/
+
+	Inputs* output = new Inputs(this->numberofelements_local,this->numberofvertices_local);
+
+	for(int i=0;i<NUMINPUTS;i++){
+		if(this->inputs[i]) output->inputs[i]=this->inputs[i]->copy();
+	}
+
+	return output;
+}/*}}}*/
+void Inputs::DeepEcho(void){/*{{{*/
+	for(int i=0;i<NUMINPUTS;i++) {
+		if(this->inputs[i]) this->inputs[i]->DeepEcho();
+	}
+	return;
+}
+/*}}}*/
+void Inputs::Echo(void){/*{{{*/
+	_printf_("Inputs Echo:\n");
+	for(int i=0;i<NUMINPUTS;i++) {
+		if(this->inputs[i]) _printf_(setw(25)<<EnumToStringx(i+InputsSTARTEnum+1)<<": set as "<<EnumToStringx(this->inputs[i]->ObjectEnum())<<"\n");
+	}
+	return;
+}
+/*}}}*/
+void Inputs::Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+
+	int obj_enum=-1;
+	int num_inputs=0;
+	int index;
+
+	MARSHALLING_ENUM(InputsEnum);
+
+	if(marshall_direction==MARSHALLING_FORWARD || marshall_direction==MARSHALLING_SIZE){
+
+		/*Marshall num_inputs first*/
+		for(int i=0;i<NUMINPUTS;i++){
+			if(this->inputs[i]) num_inputs++;
+		}
+		MARSHALLING(num_inputs);
+
+		/*Marshall Parameters one by one now*/
+		for(int i=0;i<NUMINPUTS;i++){
+			if(this->inputs[i]){
+				obj_enum = this->inputs[i]->ObjectEnum();
+				MARSHALLING(i);
+				MARSHALLING(obj_enum);
+				this->inputs[i]->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+			}
+		}
+	}
+	else{
+
+		/*Get number of inputs marshalled*/
+		MARSHALLING(num_inputs);
+
+		/*Recover input2eters one by one*/
+		for(int i=0;i<num_inputs;i++){
+
+			/*Recover enum of object first: */
+			MARSHALLING(index);
+			MARSHALLING(obj_enum);
+
+			if(obj_enum==BoolInputEnum){
+				BoolInput* boolinput2=new BoolInput();
+				boolinput2->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+				this->inputs[index]=boolinput2;
+			}
+			else if(obj_enum==IntInputEnum){
+				IntInput* intinput2=new IntInput();
+				intinput2->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+				this->inputs[index]=intinput2;
+			}
+			else if(obj_enum==TriaInputEnum){
+				TriaInput* triainput2=new TriaInput();
+				triainput2->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+				this->inputs[index]=triainput2;
+			}
+			else if(obj_enum==PentaInputEnum){
+				PentaInput* pentainput2=new PentaInput();
+				pentainput2->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+				this->inputs[index]=pentainput2;
+			}
+			else{
+				_error_("input "<<EnumToStringx(obj_enum)<<" not supported");
+			}
+		}
+	}
+}
+/*}}}*/
+
+void Inputs::AddInput(Input* newinput){/*{{{*/
+
+	/*Get Enum from Param*/
+	_assert_(newinput);
+	int input_enum = newinput->InstanceEnum();
+
+	/*Get index in array*/
+	#ifdef _ISSM_DEBUG_
+	if(input_enum<=InputsSTARTEnum) _error_("Cannot add input: Enum "<<EnumToStringx(input_enum)<<" should appear after InputsSTARTEnum");
+	if(input_enum>=InputsENDEnum)   _error_("Cannot add input: Enum "<<EnumToStringx(input_enum)<<" should appear before InputsENDEnum");
+	#endif
+	int index = input_enum - InputsSTARTEnum -1;
+
+	/*Delete input if it already exists*/
+	if(this->inputs[index]){
+		delete this->inputs[index];
+		this->inputs[index] = NULL;
+	}
+
+	/*Add input to array*/
+	this->inputs[index] = newinput;
+}
+/*}}}*/
+void Inputs::ChangeEnum(int oldenumtype,int newenumtype){/*{{{*/
+
+	/*Get indices from enums*/
+	int index_old = EnumToIndex(oldenumtype);
+	int index_new = EnumToIndex(newenumtype);
+
+	/*Delete input if it already exists*/
+	if(this->inputs[index_new]) delete this->inputs[index_new];
+
+	/*Make sure that old one exists*/
+	if(!this->inputs[index_old]){
+		_error_("Input "<<EnumToStringx(oldenumtype)<<" not found");
+	}
+
+	/*Replace Enums*/
+	this->inputs[index_old]->ChangeEnum(newenumtype);
+	this->inputs[index_new] = this->inputs[index_old];
+	this->inputs[index_old] = NULL;
+}/*}}}*/
+void Inputs::Configure(Parameters* parameters){/*{{{*/
+	for(int i=0;i<NUMINPUTS;i++){
+		if(this->inputs[i]) this->inputs[i]->Configure(parameters);
+	}
+}
+/*}}}*/
+int  Inputs::DeleteInput(int input_enum){/*{{{*/
+
+	int index = EnumToIndex(input_enum);
+	if(this->inputs[index]){
+		delete this->inputs[index];
+		this->inputs[index] = NULL;
+	}
+
+	return 1;
+}
+/*}}}*/
+void Inputs::DuplicateInput(int original_enum,int new_enum){/*{{{*/
+
+	_assert_(this);
+
+	/*Get indices from enums*/
+	int index_ori = EnumToIndex(original_enum);
+	int index_new = EnumToIndex(new_enum);
+
+	/*Delete input if it already exists*/
+	if(this->inputs[index_new]) delete this->inputs[index_new];
+
+	/*Make sure that old one exists*/
+	if(!this->inputs[index_ori]){
+		_error_("Input "<<EnumToStringx(original_enum)<<" not found");
+	}
+
+	/*Make a copy*/
+	Input* copy=this->inputs[index_ori]->copy();
+
+	/*Add copy*/
+	this->inputs[index_new] = copy;
+}
+/*}}}*/
+int  Inputs::EnumToIndex(int enum_in){/*{{{*/
+
+	_assert_(this);
+
+	/*Make sure this parameter is at the right place*/
+	#ifdef _ISSM_DEBUG_
+	if(enum_in<=InputsSTARTEnum){
+		//int* temp = xNew<int>(3);
+		_error_("Enum "<<EnumToStringx(enum_in)<<" should appear after InputsSTARTEnum");
+	}
+	if(enum_in>=InputsENDEnum){
+		_error_("Enum "<<EnumToStringx(enum_in)<<" should appear before InputsENDEnum");
+	}
+	#endif
+	return enum_in - InputsSTARTEnum -1;
+}/*}}}*/
+bool Inputs::Exist(int enum_in){/*{{{*/
+
+	_assert_(this);
+
+	int index = EnumToIndex(enum_in);
+	if(this->inputs[index]) return true;
+	return false;
+}
+/*}}}*/
+int Inputs::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 Inputs::GetInputsInterpolations(int* pnuminputs,int** pinterpolations,int** pinputenums){/*{{{*/
+
+	/*First count number of inputs*/
+	int count = 0;
+	for(int i=0;i<NUMINPUTS;i++){
+		if(this->inputs[i]) count++;
+	}
+	int numinputs = count;
+
+	/*Allocate output*/
+	int* interpolations = xNew<int>(count);
+	int* enumlist       = xNew<int>(count);
+
+	/*Go through all inputs and assign interpolation in vector*/
+	count = 0;
+	for(int i=0;i<NUMINPUTS;i++){
+
+		Input* input=this->inputs[i];
+		if(!input) continue;
+
+		enumlist[count] = i+InputsSTARTEnum+1;
+		switch(input->ObjectEnum()){
+			case BoolInputEnum:
+			case IntInputEnum:
+				interpolations[count] = input->ObjectEnum();
+				break;
+			case TriaInputEnum:
+				interpolations[count] = input->GetResultInterpolation();
+				break;
+			default:
+				_error_("Input "<<EnumToStringx(input->ObjectEnum())<<" not supported yet");
+		}
+		count++;
+	}
+	_assert_(count == numinputs);
+
+	/*Return pointer*/
+	*pnuminputs = numinputs;
+	*pinterpolations = interpolations;
+	*pinputenums = enumlist;
+
+}/*}}}*/
+SegInput* Inputs::GetSegInput(int enum_in){/*{{{*/
+
+	_assert_(this);
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	return input->GetSegInput();
+}/*}}}*/
+TriaInput* Inputs::GetTriaInput(int enum_in){/*{{{*/
+
+	_assert_(this);
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	return input->GetTriaInput();
+}/*}}}*/
+TriaInput* Inputs::GetTriaInput(int enum_in,IssmDouble time){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	if(input->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(input)->GetTriaInput(time);
+	}
+	else{
+		return input->GetTriaInput();
+	}
+}/*}}}*/
+TriaInput* Inputs::GetTriaInput(int enum_in,IssmDouble start_time,IssmDouble end_time,int averaging_method){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	if(input->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(input)->GetTriaInput(start_time,end_time,averaging_method);
+	}
+	else{
+		_error_("Input "<<EnumToStringx(enum_in)<<" is not an TransientInput");
+	}
+}/*}}}*/
+PentaInput* Inputs::GetPentaInput(int enum_in){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	return input->GetPentaInput();
+}/*}}}*/
+PentaInput* Inputs::GetPentaInput(int enum_in,IssmDouble time){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	if(input->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(input)->GetPentaInput(time);
+	}
+	else{
+		return input->GetPentaInput();
+	}
+}/*}}}*/
+PentaInput* Inputs::GetPentaInput(int enum_in,IssmDouble start_time,IssmDouble end_time,int averaging_method){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	if(input->ObjectEnum()==TransientInputEnum){
+		return xDynamicCast<TransientInput*>(input)->GetPentaInput(start_time,end_time,averaging_method);
+	}
+	else{
+		_error_("Input "<<EnumToStringx(enum_in)<<" is not an TransientInput");
+	}
+}/*}}}*/
+TransientInput* Inputs::GetTransientInput(int enum_in){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+
+	if(input->ObjectEnum() != TransientInputEnum){
+		_error_("Input "<<EnumToStringx(enum_in)<<" is not an TransientInput");
+	}
+
+	/*Cast and return*/
+	TransientInput* output = xDynamicCast<TransientInput*>(input);
+	return output;
+}/*}}}*/
+ElementInput* Inputs::GetControlInputData(int enum_in,const char* data){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+	if(input->ObjectEnum() != ControlInputEnum){
+		_error_("Input "<<EnumToStringx(enum_in)<<" is not an ControlInput");
+	}
+
+	/*Cast and return*/
+	return xDynamicCast<ControlInput*>(input)->GetInput(data);
+}/*}}}*/
+DatasetInput* Inputs::GetDatasetInput(int enum_in){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+	if(input->ObjectEnum() != DatasetInputEnum){
+		_error_("Input "<<EnumToStringx(enum_in)<<" is not an DatasetInput");
+	}
+
+	/*Cast and return*/
+	return xDynamicCast<DatasetInput*>(input);
+}/*}}}*/
+ControlInput* Inputs::GetControlInput(int enum_in){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Check that it has the right format*/
+	Input* input = this->inputs[id];
+	if(!input) return NULL;
+	if(input->ObjectEnum() != ControlInputEnum){
+		_error_("Input "<<EnumToStringx(enum_in)<<" is not an ControlInput");
+	}
+
+	/*Cast and return*/
+	return xDynamicCast<ControlInput*>(input);
+}/*}}}*/
+void Inputs::GetArrayPtr(int enum_in,int row,IssmDouble** pvalues,int* pN){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=ArrayInputEnum) _error_(EnumToStringx(this->inputs[id]->ObjectEnum())<<" cannot return an array");
+	}
+	else{
+		_error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	}
+
+	/*Set input*/
+	ArrayInput* input = xDynamicCast<ArrayInput*>(this->inputs[id]);
+	input->GetArrayPtr(row,pvalues,pN);
+}/*}}}*/
+void Inputs::GetArray(int enum_in,int row,IssmDouble** pvalues,int* pN){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=ArrayInputEnum) _error_(EnumToStringx(this->inputs[id]->ObjectEnum())<<" cannot return an array");
+	}
+	else{
+		_error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	}
+
+	/*Set input*/
+	ArrayInput* input = xDynamicCast<ArrayInput*>(this->inputs[id]);
+	input->GetArray(row,pvalues,pN);
+}/*}}}*/
+void Inputs::GetInputValue(bool* pvalue,int enum_in,int index){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=BoolInputEnum) _error_(EnumToStringx(this->inputs[id]->ObjectEnum())<<" cannot return a bool");
+	}
+	else{
+		_error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	}
+
+	/*Set input*/
+	BoolInput* input = xDynamicCast<BoolInput*>(this->inputs[id]);
+	input->GetInput(pvalue,index);
+}/*}}}*/
+void Inputs::GetInputValue(int* pvalue,int enum_in,int index){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=IntInputEnum) _error_(EnumToStringx(this->inputs[id]->ObjectEnum())<<" cannot return a int");
+	}
+	else{
+		int* temp = xNew<int>(3);
+		_error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	}
+
+	/*Set input*/
+	IntInput* input = xDynamicCast<IntInput*>(this->inputs[id]);
+	input->GetInput(pvalue,index);
+}/*}}}*/
+void Inputs::GetInputValue(IssmDouble* pvalue,int enum_in,int index){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=DoubleInputEnum) _error_(EnumToStringx(this->inputs[id]->ObjectEnum())<<" cannot return a double!");
+	}
+	else{
+		int* temp = xNew<int>(3);
+		_error_("Input "<<EnumToStringx(enum_in)<<" not found");
+	}
+
+	/*Set input*/
+	DoubleInput* input = xDynamicCast<DoubleInput*>(this->inputs[id]);
+	input->GetInput(pvalue,index);
+
+}/*}}}*/
+void Inputs::ResultInterpolation(int* pinterpolation,int* pnodesperelement,int* parray_size, int output_enum){/*{{{*/
+
+	/*Get input */
+	int     index = EnumToIndex(output_enum);
+	Input* input = this->inputs[index];
+
+	/*Check that it is found*/
+	if(!input){
+		_error_("Input "<<EnumToStringx(output_enum)<<" not found and cannot be added to model results");
+	}
+
+	/*Assign output pointer*/
+	*pinterpolation   = input->GetResultInterpolation();
+	*pnodesperelement = input->GetResultNumberOfNodes();
+	*parray_size      = input->GetResultArraySize();
+}/*}}}*/
+void Inputs::SetInput(int enum_in,int index,bool value){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=BoolInputEnum) _error_("cannot add a bool to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new BoolInput(this->numberofelements_local);
+	}
+
+	/*Set input*/
+	BoolInput* input = xDynamicCast<BoolInput*>(this->inputs[id]);
+	input->SetInput(index,value);
+}/*}}}*/
+void Inputs::SetInput(int enum_in,int index,int value){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=IntInputEnum) _error_("cannot add an int to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new IntInput(this->numberofelements_local);
+	}
+
+	/*Set input*/
+	IntInput* input = xDynamicCast<IntInput*>(this->inputs[id]);
+	input->SetInput(index,value);
+}/*}}}*/
+void Inputs::SetDoubleInput(int enum_in,int index,IssmDouble value){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=DoubleInputEnum) _error_("cannot add a double to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new DoubleInput(this->numberofelements_local);
+	}
+
+	/*Set input*/
+	DoubleInput* input = xDynamicCast<DoubleInput*>(this->inputs[id]);
+	input->SetInput(index,value);
+}/*}}}*/
+void Inputs::SetArrayInput(int enum_in,int row,IssmDouble* values,int numlayers){/*{{{*/
+
+	bool recreate = false;
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=ArrayInputEnum){
+			delete this->inputs[id];
+			recreate = true;
+		}
+	}
+	else{
+		recreate = true;
+	}
+
+	if(recreate){
+		this->inputs[id] = new ArrayInput(this->numberofelements_local);
+	}
+
+	/*Set input*/
+	ArrayInput* input = xDynamicCast<ArrayInput*>(this->inputs[id]);
+	input->SetInput(row,numlayers,values);
+}/*}}}*/
+TransientInput* Inputs::SetDatasetTransientInput(int enum_in,int dataset_id,IssmDouble* times,int numtimes){/*{{{*/
+
+	bool recreate = false;
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=DatasetInputEnum){
+			delete this->inputs[id];
+			recreate = true;
+		}
+	}
+	else{
+		recreate = true;
+	}
+
+	if(recreate){
+		this->inputs[id] = new DatasetInput(this->numberofelements_local,this->numberofvertices_local);
+	}
+
+	/*Get Dataset Input now*/
+	DatasetInput* input = xDynamicCast<DatasetInput*>(this->inputs[id]);
+
+	/*Create and return transient input*/
+	return input->SetTransientInput(dataset_id,times,numtimes);
+}/*}}}*/
+void Inputs::SetTransientInput(int enum_in,IssmDouble* times,int numtimes){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		/*Input already there, make sure it is the right type*/
+		if(this->inputs[id]->ObjectEnum()!=TransientInputEnum){
+			_error_("cannot add a TransientInput to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+		}
+	}
+	else{
+		this->inputs[id] = new TransientInput(enum_in,this->numberofelements_local,this->numberofvertices_local,times,numtimes);
+	}
+}/*}}}*/
+void Inputs::SetTriaControlInput(int enum_in,int layout,int interpolation,int control_id,int numindices,int* indices,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max){/*{{{*/
+
+	bool recreate = false;
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=ControlInputEnum){
+			delete this->inputs[id];
+			recreate = true;
+		}
+	}
+	else{
+		recreate = true;
+	}
+
+	if(recreate){
+		this->inputs[id] = new ControlInput(this->numberofelements_local,this->numberofvertices_local,layout,interpolation,control_id);
+	}
+
+	/*Set input*/
+	ControlInput* input = xDynamicCast<ControlInput*>(this->inputs[id]);
+	input->SetControl(interpolation,numindices,indices,values,values_min,values_max);
+}/*}}}*/
+void Inputs::SetTriaControlInputGradient(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(!this->inputs[id]) _error_("could not find Input "<<EnumToStringx(enum_in));
+	if( this->inputs[id]->ObjectEnum()!=ControlInputEnum) _error_("Input "<<EnumToStringx(enum_in)<<" is not a ControlInput");
+
+	/*Set input*/
+	ControlInput* input = xDynamicCast<ControlInput*>(this->inputs[id]);
+	input->SetGradient(interpolation,numindices,indices,values);
+}/*}}}*/
+void Inputs::SetTriaControlInputGradient(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values,int n){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(!this->inputs[id]) _error_("could not find Input "<<EnumToStringx(enum_in));
+	if( this->inputs[id]->ObjectEnum()!=ControlInputEnum) _error_("Input "<<EnumToStringx(enum_in)<<" is not a ControlInput");
+
+	/*Set input*/
+	ControlInput* input = xDynamicCast<ControlInput*>(this->inputs[id]);
+	input->SetGradient(interpolation,numindices,indices,values,n);
+}/*}}}*/
+void Inputs::SetTriaDatasetInput(int enum_in,int id_in,int interpolation,int numindices,int* indices,IssmDouble* values){/*{{{*/
+
+	bool recreate = false;
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=DatasetInputEnum){
+			delete this->inputs[id];
+			recreate = true;
+		}
+	}
+	else{
+		recreate = true;
+	}
+
+	if(recreate){
+		this->inputs[id] = new DatasetInput(this->numberofelements_local,this->numberofvertices_local);
+	}
+
+	/*Set input*/
+	DatasetInput* input = xDynamicCast<DatasetInput*>(this->inputs[id]);
+	input->SetTriaInput(id_in,P1Enum,numindices,indices,values);
+}/*}}}*/
+void Inputs::SetTriaInput(int enum_in,int interpolation,int row,IssmDouble value){/*{{{*/
+
+	/*This one only supports P0 and P1 because it assumes col=0*/
+	_assert_(interpolation==P0Enum || interpolation==P1Enum);
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=TriaInputEnum) _error_("cannot add a bool to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new TriaInput(this->numberofelements_local,this->numberofvertices_local,interpolation);
+	}
+
+	/*Set input*/
+	TriaInput* input = xDynamicCast<TriaInput*>(this->inputs[id]);
+	input->SetInput(interpolation,row,value);
+}/*}}}*/
+void Inputs::SetTriaInput(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=TriaInputEnum){
+			_error_("cannot add Element values to a "<<EnumToStringx(this->inputs[id]->ObjectEnum())<<" while trying to set "<<EnumToStringx(enum_in));
+		}
+	}
+	else{
+		this->inputs[id] = new TriaInput(this->numberofelements_local,this->numberofvertices_local,interpolation);
+	}
+
+	/*Set input*/
+	TriaInput* input = xDynamicCast<TriaInput*>(this->inputs[id]);
+	input->SetInput(interpolation,numindices,indices,values);
+}/*}}}*/
+void Inputs::SetTriaInput(int enum_in,int interpolation,int row,int numindices,IssmDouble* values){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=TriaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new TriaInput(this->numberofelements_local,this->numberofvertices_local,interpolation);
+	}
+
+	/*Set input*/
+	TriaInput* input = xDynamicCast<TriaInput*>(this->inputs[id]);
+	input->SetInput(interpolation,row,numindices,values);
+}/*}}}*/
+void Inputs::SetPentaControlInput(int enum_in,int layout,int interpolation,int control_id,int numindices,int* indices,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max){/*{{{*/
+
+	bool recreate = false;
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=ControlInputEnum){
+			delete this->inputs[id];
+			recreate = true;
+		}
+	}
+	else{
+		recreate = true;
+	}
+
+	if(recreate){
+		this->inputs[id] = new ControlInput(this->numberofelements_local,this->numberofvertices_local,layout,interpolation,control_id);
+	}
+
+	/*Set input*/
+	ControlInput* input = xDynamicCast<ControlInput*>(this->inputs[id]);
+	input->SetControl(interpolation,numindices,indices,values,values_min,values_max);
+}/*}}}*/
+void Inputs::SetPentaControlInputGradient(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(!this->inputs[id]) _error_("could not find Input "<<EnumToStringx(enum_in));
+	if( this->inputs[id]->ObjectEnum()!=ControlInputEnum) _error_("Input "<<EnumToStringx(enum_in)<<" is not a ControlInput");
+
+	/*Set input*/
+	ControlInput* input = xDynamicCast<ControlInput*>(this->inputs[id]);
+	input->SetGradient(interpolation,numindices,indices,values);
+}/*}}}*/
+void Inputs::SetPentaDatasetInput(int enum_in,int id_in,int interpolation,int numindices,int* indices,IssmDouble* values){/*{{{*/
+
+	bool recreate = false;
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=DatasetInputEnum){
+			delete this->inputs[id];
+			recreate = true;
+		}
+	}
+	else{
+		recreate = true;
+	}
+
+	if(recreate){
+		this->inputs[id] = new DatasetInput(this->numberofelements_local,this->numberofvertices_local);
+	}
+
+	/*Set input*/
+	DatasetInput* input = xDynamicCast<DatasetInput*>(this->inputs[id]);
+	input->SetPentaInput(id_in,P1Enum,numindices,indices,values);
+}/*}}}*/
+void Inputs::SetPentaInput(int enum_in,int interpolation,int row,IssmDouble value){/*{{{*/
+
+	/*This one only supports P0 and P1 because it assumes col=0*/
+	_assert_(interpolation==P0Enum || interpolation==P1Enum);
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=PentaInputEnum) _error_("cannot add a bool to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new PentaInput(this->numberofelements_local,this->numberofvertices_local,interpolation);
+	}
+
+	/*Set input*/
+	PentaInput* input = xDynamicCast<PentaInput*>(this->inputs[id]);
+	input->SetInput(interpolation,row,value);
+}/*}}}*/
+void Inputs::SetPentaInput(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=PentaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new PentaInput(this->numberofelements_local,this->numberofvertices_local,interpolation);
+	}
+
+	/*Set input*/
+	PentaInput* input = xDynamicCast<PentaInput*>(this->inputs[id]);
+	input->SetInput(interpolation,numindices,indices,values);
+}/*}}}*/
+void Inputs::SetPentaInput(int enum_in,int interpolation,int row,int numindices,IssmDouble* values){/*{{{*/
+
+	/*Get input id*/
+	int id = EnumToIndex(enum_in);
+
+	/*Create it if necessary*/
+	if(this->inputs[id]){
+		if(this->inputs[id]->ObjectEnum()!=PentaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[id]->ObjectEnum()));
+	}
+	else{
+		this->inputs[id] = new PentaInput(this->numberofelements_local,this->numberofvertices_local,interpolation);
+	}
+
+	/*Set input*/
+	PentaInput* input = xDynamicCast<PentaInput*>(this->inputs[id]);
+	input->SetInput(interpolation,row,numindices,values);
+}/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/Inputs.h	(revision 25379)
@@ -0,0 +1,92 @@
+#ifndef _CONTAINER_INPUTS2_H_
+#define _CONTAINER_INPUTS2_H_
+
+/*forward declarations */
+class Input;
+class SegInput;
+class TriaInput;
+class PentaInput;
+class TransientInput;
+class ElementInput;
+class DatasetInput;
+class ArrayInput;
+class ControlInput;
+class Parameters;
+#include "../../shared/shared.h"
+
+#define NUMINPUTS InputsENDEnum - InputsSTARTEnum -1
+
+/*!\brief Declaration of Inputs class.
+ *
+ * Declaration of Inputs class.  Inputs are a static array of Input objects.
+ */
+class Inputs{
+
+	private:
+		/*Private fields*/
+		Input* inputs[NUMINPUTS];
+		int     numberofelements_local;
+		int     numberofvertices_local;
+
+		/*Private functions*/
+		int     EnumToIndex(int enum_in);
+
+	public:
+
+		/*constructors, destructors*/
+		Inputs();
+		Inputs(int nbe,int nbv);
+		~Inputs();
+
+		/*numerics*/
+		void     AddInput(Input* in_input);
+		void     ChangeEnum(int enumtype,int new_enumtype);
+		void     Configure(Parameters* parameters);
+		Inputs* Copy(void);
+		int      DeleteInput(int enum_type);
+		void     DuplicateInput(int original_enum,int new_enum);
+		void     DeepEcho(void);
+		void     Echo(void);
+		bool     Exist(int enum_type);
+		void     GetInputsInterpolations(int* pnuminputs,int** pinterpolations,int** penum);
+		void             GetArray(int enum_in,int row,IssmDouble** pvalues,int* pN);
+		void             GetArrayPtr(int enum_in,int row,IssmDouble** pvalues,int* pN);
+		SegInput*       GetSegInput(int enum_type);
+		TriaInput*      GetTriaInput(int enum_type);
+		TriaInput*      GetTriaInput(int enum_type,IssmDouble time);
+		TriaInput*      GetTriaInput(int enum_in,IssmDouble start_time,IssmDouble end_time,int averaging_method);
+		PentaInput*     GetPentaInput(int enum_type);
+		PentaInput*     GetPentaInput(int enum_type,IssmDouble time);
+		PentaInput*     GetPentaInput(int enum_in,IssmDouble start_time,IssmDouble end_time,int averaging_method);
+		TransientInput* GetTransientInput(int enum_type);
+		ElementInput*   GetControlInputData(int enum_type,const char* data);
+		DatasetInput*   GetDatasetInput(int enum_type);
+		ControlInput*   GetControlInput(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);
+		void  GetInputValue(IssmDouble*  pvalue,int enum_in,int index);
+		void  ResultInterpolation(int* pinterpolation,int*nodesperelement,int* parray_size, int output_enum);
+		void  SetInput(int enum_in,int index,bool value);
+		void  SetInput(int enum_in,int index,int value);
+		void  SetDoubleInput(int enum_in,int index,IssmDouble value);
+		void  SetTransientInput(int enum_in,IssmDouble* times,int numtimes);
+		TransientInput* SetDatasetTransientInput(int enum_in,int id,IssmDouble* times,int numtimes);
+		void  SetArrayInput(int enum_in,int row,IssmDouble* layers,int numlayers);
+		void  SetTriaControlInput(int enum_in,int layout,int interpolation,int id,int numindices,int* indices,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max);
+		void  SetTriaControlInputGradient(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values);
+		void  SetTriaControlInputGradient(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values,int n);
+		void  SetTriaDatasetInput(int enum_in,int id,int interpolation,int numindices,int* indices,IssmDouble* values);
+		void  SetTriaInput(int enum_in,int interpolation,int row,IssmDouble values);
+		void  SetTriaInput(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values);
+		void  SetTriaInput(int enum_in,int interpolation,int row,int numindices,IssmDouble* values);
+		void  SetPentaControlInput(int enum_in,int layout,int interpolation,int id,int numindices,int* indices,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max);
+		void  SetPentaControlInputGradient(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values);
+		void  SetPentaDatasetInput(int enum_in,int id,int interpolation,int numindices,int* indices,IssmDouble* values);
+		void  SetPentaInput(int enum_in,int interpolation,int row,IssmDouble values);
+		void  SetPentaInput(int enum_in,int interpolation,int numindices,int* indices,IssmDouble* values);
+		void  SetPentaInput(int enum_in,int interpolation,int row,int numindices,IssmDouble* values);
+};
+
+#endif //ifndef _INPUTS_H_
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp	(revision 25379)
@@ -0,0 +1,93 @@
+/*!\file IntInput.c
+ * \brief: implementation of the IntInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./IntInput.h"
+
+/*IntInput constructors and destructor*/
+IntInput::IntInput(){/*{{{*/
+	this->size   = -1;
+	this->values = NULL;
+}
+/*}}}*/
+IntInput::IntInput(int size_in){/*{{{*/
+	_assert_(size_in>0);
+	_assert_(size_in<1e11);
+	this->size   = size_in;
+	this->values = xNew<int>(size_in);
+}
+/*}}}*/
+IntInput::~IntInput(){/*{{{*/
+	xDelete<int>(this->values);
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* IntInput::copy() {/*{{{*/
+
+	IntInput* output = new IntInput(this->size);
+	xMemCpy<int>(output->values,this->values,this->size);
+
+	return output;
+}
+/*}}}*/
+void IntInput::DeepEcho(void){/*{{{*/
+
+	_printf_("IntInput Echo:\n");
+	_printf_("   Size:          "<<size<<"\n");
+	printarray(this->values,this->size);
+	//_printf_(setw(15)<<"   IntInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
+}
+/*}}}*/
+void IntInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  IntInput::Id(void){ return -1; }/*{{{*/
+/*}}}*/
+void IntInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(IntInputEnum);
+
+	MARSHALLING(this->size);
+	if(this->size > 0){
+		MARSHALLING_DYNAMIC(this->values,int,this->size)
+	}
+	else this->values = NULL;
+
+}
+/*}}}*/
+int  IntInput::ObjectEnum(void){/*{{{*/
+
+	return IntInputEnum;
+
+}
+/*}}}*/
+
+/*IntInput management*/
+void IntInput::GetInput(int* pvalue,int index){/*{{{*/
+
+	_assert_(index>=0); 
+	_assert_(index<this->size); 
+
+	*pvalue = this->values[index];
+}
+/*}}}*/
+void IntInput::SetInput(int index,int value){/*{{{*/
+
+	_assert_(index>=0); 
+	_assert_(index<this->size); 
+
+	this->values[index] = value;
+}
+/*}}}*/
+
+/*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/IntInput.h	(revision 25379)
@@ -0,0 +1,33 @@
+#ifndef _INTINPUT2_H_
+#define _INTINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+
+class IntInput: public Input{
+
+	private:
+		int   size;
+		int*  values;
+
+	public:
+		/*IntInput constructors, destructors: {{{*/
+		IntInput();
+		IntInput(int size_in);
+		~IntInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*IntInput management: {{{*/
+		void GetInput(int* pvalue,int index);
+		void SetInput(int index,int value);
+		/*}}}*/
+
+};
+#endif  /* _BOOLINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp	(revision 25379)
@@ -0,0 +1,425 @@
+/*!\file PentaInput.c
+ * \brief: implementation of the PentaInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./PentaInput.h"
+
+/*PentaInput constructors and destructor*/
+PentaInput::PentaInput(void){/*{{{*/
+
+	this->numberofelements_local = -1;
+	this->numberofvertices_local = -1;
+	this->isserved       = false;
+	this->isserved_collapsed= 0;
+	this->M = -1;
+	this->N = -1;
+	this->values         = NULL;
+	this->element_values = NULL;
+
+}/*}}}*/
+PentaInput::PentaInput(int nbe_in,int nbv_in,int interp_in){/*{{{*/
+
+	_assert_(nbe_in>0);
+	_assert_(nbe_in<1e11);
+	_assert_(nbv_in>0);
+	_assert_(nbv_in<1e11);
+	this->numberofelements_local = nbe_in;
+	this->numberofvertices_local = nbv_in;
+	this->isserved           = false;
+	this->isserved_collapsed = 0;
+
+	/*Reset takes care of the rest*/
+	this->Reset(interp_in);
+
+}/*}}}*/
+PentaInput::~PentaInput(){/*{{{*/
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+	if(this->values)         xDelete<IssmDouble>(this->values);
+}
+/*}}}*/
+void PentaInput::Reset(int interp_in){/*{{{*/
+
+	/*Clean up*/
+	if(this->values)         xDelete<IssmDouble>(this->values);
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+
+	/*Set interpolation*/
+	this->interpolation  = interp_in;
+
+	/*Create Sizes*/
+	if(this->interpolation==P1Enum){
+		this->M = this->numberofvertices_local;
+		this->N = 1;
+	}
+	else{
+		this->M = this->numberofelements_local;
+		this->N = PentaRef::NumberofNodes(interp_in);
+	}
+
+	/*Allocate Pointers*/
+	this->values         = xNewZeroInit<IssmDouble>(this->M*this->N);
+	this->element_values = xNewZeroInit<IssmDouble>(PentaRef::NumberofNodes(interp_in));
+}/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* PentaInput::copy() {/*{{{*/
+
+	/*Create output*/
+	PentaInput* output = new PentaInput(this->numberofelements_local,this->numberofvertices_local,this->interpolation);
+
+	/*Copy values*/
+	xMemCpy<IssmDouble>(output->values,this->values,this->M*this->N);
+
+	/*Return output*/
+	return output;
+
+}
+/*}}}*/
+void PentaInput::DeepEcho(void){/*{{{*/
+	_printf_("PentaInput Echo:\n");
+	_printf_("   interpolation:      "<<EnumToStringx(this->interpolation)<<"\n");
+	_printf_("   nbe_local:          "<<this->numberofvertices_local<<"\n");
+	_printf_("   nbv_local:          "<<this->numberofelements_local<<"\n");
+	_printf_("   Size:               "<<M<<"x"<<N<<"\n");
+	_printf_("   isserved:           "<<(isserved?"true":"false") << "\n");
+	_printf_("   isserved_collapsed: "<<isserved_collapsed << "\n");
+	if(isserved){
+		_printf_("   current values:      ");
+		if(isserved_collapsed){
+			_printf_("[ ");
+			for(int i=0;i<3;i++) _printf_(" "<<this->element_values[i]);
+			_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+		}
+		else{
+			_printf_("[ ");
+			for(int i=0;i<PentaRef::NumberofNodes(this->interpolation);i++) _printf_(" "<<this->element_values[i]);
+			_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+		}
+	}
+}
+/*}}}*/
+void PentaInput::Echo(void){/*{{{*/
+	_printf_(setw(15)<<"   PentaInput "<<setw(25)<<left<<EnumToStringx(-1));
+	if(isserved){
+		if(isserved_collapsed){
+			_printf_("[ ");
+			for(int i=0;i<3;i++) _printf_(" "<<this->element_values[i]);
+			_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+		}
+		else{
+			_printf_("[ ");
+			for(int i=0;i<PentaRef::NumberofNodes(this->interpolation);i++) _printf_(" "<<this->element_values[i]);
+			_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+		}
+	}
+}
+/*}}}*/
+int  PentaInput::Id(void){/*{{{*/
+	return -1;
+}/*}}}*/
+void PentaInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(PentaInputEnum);
+	MARSHALLING(this->numberofelements_local);
+	MARSHALLING(this->numberofvertices_local);
+	MARSHALLING(this->interpolation);
+	MARSHALLING(this->M);
+	MARSHALLING(this->N);
+	this->isserved = false;
+	this->isserved_collapsed = 0;
+	if(this->M*this->N){
+		MARSHALLING_DYNAMIC(this->values,IssmDouble,this->M*this->N);
+	}
+	else this->values = NULL;
+
+	if(marshall_direction == MARSHALLING_BACKWARD){
+		this->element_values = xNewZeroInit<IssmDouble>(PentaRef::NumberofNodes(this->interpolation));
+	}
+}
+/*}}}*/
+int  PentaInput::ObjectEnum(void){/*{{{*/
+	return PentaInputEnum;
+}
+/*}}}*/
+
+/*PentaInput management*/
+void PentaInput::SetInput(int interp_in,int row,IssmDouble value_in){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0);
+	_assert_(row<this->M);
+	_assert_(this->N==1);
+
+	this->values[row] = value_in;
+	this->isserved    = false;
+}
+/*}}}*/
+void PentaInput::SetInput(int interp_in,int numindices,int* indices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	if(interp_in==P1Enum && this->interpolation==P1Enum){
+		_assert_(this->N==1);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else if(this->interpolation!=P1Enum && interp_in==P1Enum){
+		this->Reset(interp_in);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else{
+		_error_("not supported");
+	}
+
+	this->isserved    = false;
+}
+/*}}}*/
+void PentaInput::SetInput(int interp_in,int row,int numindices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	if(interp_in==this->interpolation){
+		_assert_(this->N==numindices);
+	}
+	else{
+		this->Reset(interp_in);
+		_assert_(this->N==numindices);
+	}
+	for(int i=0;i<numindices;i++) this->values[row*this->N+i] = values_in[i];
+
+	this->isserved    = false;
+}
+/*}}}*/
+void PentaInput::Serve(int numindices,int* indices){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N==1);
+
+	for(int i=0;i<numindices;i++){
+		int row = indices[i];
+		_assert_(row>=0);
+		_assert_(row<this->M);
+		this->element_values[i] = this->values[row];
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+	this->isserved_collapsed = 0;
+}
+/*}}}*/
+void PentaInput::Serve(int row,int numindices){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N==numindices);
+	_assert_(row<this->M);
+	_assert_(row>=0);
+
+	for(int i=0;i<numindices;i++){
+		this->element_values[i] = this->values[row*this->N+i];
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+	this->isserved_collapsed = 0;
+}/*}}}*/
+void PentaInput::ServeCollapsed(int row,int state){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N>=3);
+	_assert_(row<this->M);
+	_assert_(row>=0);
+
+	if(state==1){
+		for(int i=0;i<3;i++) this->element_values[i] = this->values[row*this->N+i];
+		for(int i=3;i<6;i++) this->element_values[i] = 0.;
+	}
+	else if(state==2){
+		for(int i=0;i<3;i++) this->element_values[i] = this->values[row*this->N+3+i];
+		for(int i=3;i<6;i++) this->element_values[i] = 0.;
+	}
+	else{
+		_error_("not supported");
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+	this->isserved_collapsed = state;
+}/*}}}*/
+void PentaInput::SetServeCollapsed(int state){/*{{{*/
+	this->isserved_collapsed = state;
+}/*}}}*/
+int  PentaInput::GetInterpolation(){/*{{{*/
+	return this->interpolation;
+}/*}}}*/
+void PentaInput::GetInputAverage(IssmDouble* pvalue){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	/*Output*/
+	IssmDouble value = 0.;
+
+	if(this->isserved_collapsed){
+		if(this->interpolation==P0Enum){
+			value = this->element_values[0];
+		}
+		else{
+			/*Assume P1...*/
+			value = 1./3.*(this->element_values[0] +  this->element_values[1] +  this->element_values[2]);
+		}
+	}
+	else{
+		int        numnodes  = this->NumberofNodes(this->interpolation);
+		IssmDouble numnodesd = reCast<int,IssmDouble>(numnodes);
+
+		for(int i=0;i<numnodes;i++) value+=this->element_values[i];
+		value = value/numnodesd;
+	}
+
+	*pvalue=value;
+}/*}}}*/
+IssmDouble PentaInput::GetInputMin(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int  numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 3;
+	IssmDouble min=this->element_values[0];
+
+	for(int i=1;i<numnodes;i++){
+		if(this->element_values[i]<min) min=this->element_values[i];
+	}
+	return min;
+}/*}}}*/
+IssmDouble PentaInput::GetInputMax(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 3;
+	IssmDouble max=this->element_values[0];
+
+	for(int i=1;i<numnodes;i++){
+		if(this->element_values[i]>max) max=this->element_values[i];
+	}
+	return max;
+}/*}}}*/
+IssmDouble PentaInput::GetInputMaxAbs(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 3;
+	IssmDouble maxabs=fabs(this->element_values[0]);
+
+	for(int i=1;i<numnodes;i++){
+		if(fabs(this->element_values[i])>maxabs) maxabs=fabs(this->element_values[i]);
+	}
+	return maxabs;
+}/*}}}*/
+void PentaInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+	if(this->isserved_collapsed){
+		_assert_(gauss->Enum()==GaussTriaEnum);
+		if(this->interpolation==P0Enum){
+			derivativevalues[0] = 0.;
+			derivativevalues[1] = 0.;
+		}
+		else{
+			TriaRef temp;
+			temp.GetInputDerivativeValue(derivativevalues,this->element_values,xyz_list,(GaussTria*)gauss,P1Enum);
+		}
+	}
+	else{
+		_assert_(gauss->Enum()==GaussPentaEnum);
+		PentaRef::GetInputDerivativeValue(derivativevalues,this->element_values,xyz_list,(GaussPenta*)gauss,this->interpolation);
+	}
+}/*}}}*/
+void PentaInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+	if(this->isserved_collapsed){
+		_assert_(gauss->Enum()==GaussTriaEnum);
+		if(this->interpolation==P0Enum){
+			*pvalue = this->element_values[0];
+		}
+		else{
+			TriaRef temp;
+			temp.GetInputValue(pvalue,this->element_values,(GaussTria*)gauss,P1Enum);
+		}
+	}
+	else{
+		_assert_(gauss->Enum()==GaussPentaEnum);
+		PentaRef::GetInputValue(pvalue,this->element_values,(GaussPenta*)gauss,this->interpolation);
+	}
+}/*}}}*/
+int  PentaInput::GetResultArraySize(void){/*{{{*/
+	return 1;
+}
+/*}}}*/
+int  PentaInput::GetResultInterpolation(void){/*{{{*/
+	if(this->interpolation==P0Enum || this->interpolation==P0DGEnum){
+		return P0Enum;
+	}
+	return P1Enum;
+}/*}}}*/
+int  PentaInput::GetResultNumberOfNodes(void){/*{{{*/
+	return PentaRef::NumberofNodes(this->interpolation);
+}
+/*}}}*/
+void PentaInput::Scale(IssmDouble alpha){/*{{{*/
+
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = alpha*this->values[i];
+	for(int i=0;i<PentaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = alpha*this->element_values[i];
+}
+/*}}}*/
+void PentaInput::Pow(IssmDouble alpha){/*{{{*/
+
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = pow(this->values[i],alpha);
+	for(int i=0;i<PentaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = pow(this->element_values[i],alpha);
+}
+/*}}}*/
+void PentaInput::AXPY(Input* xinput,IssmDouble alpha){/*{{{*/
+
+	/*xinput is of the same type, so cast it: */
+	if(xinput->ObjectEnum()!=PentaInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+	PentaInput* xpentainput=xDynamicCast<PentaInput*>(xinput);
+	if(xpentainput->GetInterpolation()!=this->interpolation) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+
+	/*Carry out the AXPY operation depending on type:*/
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = alpha*xpentainput->values[i] + this->values[i];
+	for(int i=0;i<PentaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = alpha*xpentainput->element_values[i] + this->element_values[i];
+}
+/*}}}*/
+void PentaInput::PointWiseMult(Input* xinput){/*{{{*/
+
+	/*xinput is of the same type, so cast it: */
+	if(xinput->ObjectEnum()!=PentaInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+	PentaInput* xpentainput=xDynamicCast<PentaInput*>(xinput);
+	if(xpentainput->GetInterpolation()!=this->interpolation) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+
+	/* we need to check that the vector sizes are identical*/
+	if(xpentainput->M!=this->M||xpentainput->N!=this->N) _error_("Operation not permitted because the inputs have different sizes");
+
+	/*Carry out the pointwise operation depending on type:*/
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = xpentainput->values[i] * this->values[i];
+	for(int i=0;i<PentaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = xpentainput->element_values[i] * this->element_values[i];
+}
+/*}}}*/
+
+/*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h	(revision 25379)
@@ -0,0 +1,53 @@
+#ifndef _PENTAINPUT2_H_
+#define _PENTAINPUT2_H_
+
+/*Headers:*/
+#include "./ElementInput.h"
+#include "../Elements/PentaRef.h"
+
+class PentaInput: public ElementInput, public PentaRef{
+
+	private:
+		int isserved_collapsed;
+	public:
+		/*PentaInput constructors, destructors: {{{*/
+		PentaInput();
+		PentaInput(int nbe_in,int nbv_in,int interp_in);
+		~PentaInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*PentaInput management: {{{*/
+		void SetInput(int interp_in,int row,IssmDouble value_in);
+		void SetInput(int interp_in,int numinds,int* rows,IssmDouble* values_in);
+		void SetInput(int interp_in,int row,int numinds,IssmDouble* values_in);
+		int  GetInterpolation();
+		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss);
+		void GetInputAverage(IssmDouble* pvalue);
+		IssmDouble GetInputMin();
+		IssmDouble GetInputMax();
+		IssmDouble GetInputMaxAbs();
+		PentaInput* GetPentaInput(){return this;};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void Scale(IssmDouble scalar);
+		void Pow(IssmDouble scalar);
+		void AXPY(Input* xinput,IssmDouble scalar);
+		void PointWiseMult(Input* xinput);
+		void Serve(int numindices,int* indices);
+		void Serve(int row,int numindices);
+		void ServeCollapsed(int row,int state);
+		void SetServeCollapsed(int);
+		int  GetResultArraySize(void);
+		int  GetResultInterpolation(void);
+		int  GetResultNumberOfNodes(void);
+		/*}}}*/
+		void Reset(int interp_in);
+
+};
+#endif  /* _TRIAINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.cpp	(revision 25379)
@@ -0,0 +1,345 @@
+/*!\file SegInput.c
+ * \brief: implementation of the SegInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./SegInput.h"
+
+/*SegInput constructors and destructor*/
+SegInput::SegInput(void){/*{{{*/
+
+	this->numberofelements_local = -1;
+	this->numberofvertices_local = -1;
+	this->isserved       = false;
+	this->M = -1;
+	this->N = -1;
+	this->values         = NULL;
+	this->element_values = NULL;
+
+}/*}}}*/
+SegInput::SegInput(int nbe_in,int nbv_in,int interp_in){/*{{{*/
+
+	_assert_(nbe_in>0);
+	_assert_(nbe_in<1e11);
+	_assert_(nbv_in>0);
+	_assert_(nbv_in<1e11);
+	this->numberofelements_local = nbe_in;
+	this->numberofvertices_local = nbv_in;
+	this->isserved       = false;
+
+	/*Reset takes care of the rest*/
+	this->Reset(interp_in);
+}/*}}}*/
+SegInput::~SegInput(){/*{{{*/
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+	if(this->values)         xDelete<IssmDouble>(this->values);
+}
+/*}}}*/
+void SegInput::Reset(int interp_in){/*{{{*/
+
+	/*Clean up*/
+	if(this->values)         xDelete<IssmDouble>(this->values);
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+
+	/*Set interpolation*/
+	this->interpolation  = interp_in;
+
+	/*Create Sizes*/
+	if(this->interpolation==P1Enum){
+		this->M = this->numberofvertices_local;
+		this->N = 1;
+	}
+	else{
+		this->M = this->numberofelements_local;
+		this->N = SegRef::NumberofNodes(interp_in);
+	}
+
+	/*Allocate Pointers*/
+	this->values         = xNewZeroInit<IssmDouble>(this->M*this->N);
+	this->element_values = xNewZeroInit<IssmDouble>(SegRef::NumberofNodes(interp_in));
+}/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* SegInput::copy() {/*{{{*/
+
+	SegInput* output = new SegInput(this->numberofelements_local,this->numberofvertices_local,this->interpolation);
+
+	xMemCpy<IssmDouble>(output->values,this->values,this->M*this->N);
+	xMemCpy<IssmDouble>(output->element_values,this->element_values,SegRef::NumberofNodes(this->interpolation));
+
+	return output;
+}
+/*}}}*/
+void SegInput::DeepEcho(void){/*{{{*/
+	_printf_("SegInput Echo:\n");
+	_printf_("   interpolation: "<<EnumToStringx(this->interpolation)<<"\n");
+	_printf_("   Size:          "<<M<<"x"<<N<<"\n");
+	_printf_("   isserved:      "<<(isserved?"true":"false") << "\n");
+	if(isserved){
+		_printf_("   current values:      ");
+		for(int i=0;i<3;i++) _printf_(" "<<this->element_values[i]);
+		_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+	}
+	printarray(this->values,this->M,this->N);
+	//_printf_(setw(15)<<"   SegInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
+}
+/*}}}*/
+void SegInput::Echo(void){/*{{{*/
+	_printf_("SegInput Echo:\n");
+	_printf_("   interpolation: "<<EnumToStringx(this->interpolation)<<"\n");
+	_printf_("   Size:          "<<M<<"x"<<N<<"\n");
+	_printf_("   isserved:      "<<(isserved?"true":"false") << "\n");
+	if(isserved){
+		_printf_("   current values:      ");
+		_printf_("[ ");
+		for(int i=0;i<3;i++) _printf_(" "<<this->element_values[i]);
+		_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+	}
+}
+/*}}}*/
+int  SegInput::Id(void){/*{{{*/
+	return -1;
+}/*}}}*/
+void SegInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(SegInputEnum);
+	MARSHALLING(this->numberofelements_local);
+	MARSHALLING(this->numberofvertices_local);
+	MARSHALLING(this->interpolation);
+	MARSHALLING(this->M);
+	MARSHALLING(this->N);
+	this->isserved = false;
+	if(this->M*this->N){
+		MARSHALLING_DYNAMIC(this->values,IssmDouble,this->M*this->N);
+	}
+	else this->values = NULL;
+
+	if(marshall_direction == MARSHALLING_BACKWARD){
+		this->element_values = xNewZeroInit<IssmDouble>(SegRef::NumberofNodes(this->interpolation));
+	}
+
+}
+/*}}}*/
+int  SegInput::ObjectEnum(void){/*{{{*/
+	return SegInputEnum;
+}
+/*}}}*/
+
+/*SegInput management*/
+void SegInput::SetInput(int interp_in,int row,IssmDouble value_in){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0);
+	_assert_(row<this->M);
+	_assert_(this->N==1);
+
+	this->values[row] = value_in;
+	this->isserved = false;
+}
+/*}}}*/
+void SegInput::SetInput(int interp_in,int numindices,int* indices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	if(interp_in==P1Enum && this->interpolation==P1Enum){
+		_assert_(this->N==1);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else if(interp_in==P0Enum && this->interpolation==P0Enum){
+		_assert_(this->N==1);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else if(this->interpolation!=P1Enum && interp_in==P1Enum){
+		this->Reset(interp_in);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else{
+		_error_("Cannot convert "<<EnumToStringx(this->interpolation)<<" to "<<EnumToStringx(interp_in));
+	}
+	this->isserved = false;
+}
+/*}}}*/
+void SegInput::SetInput(int interp_in,int row,int numindices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	if(interp_in==this->interpolation){
+		_assert_(this->N==numindices);
+	}
+	else{
+		this->Reset(interp_in);
+		_assert_(this->N==numindices);
+	}
+	for(int i=0;i<numindices;i++) this->values[row*this->N+i] = values_in[i];
+	this->isserved = false;
+}
+/*}}}*/
+void SegInput::Serve(int numindices,int* indices){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N==1);
+
+	for(int i=0;i<numindices;i++){
+		int row = indices[i];
+		_assert_(row>=0);
+		_assert_(row<this->M);
+		this->element_values[i] = this->values[row];
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+}
+/*}}}*/
+void SegInput::Serve(int row,int numindices){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N==numindices);
+	_assert_(row<this->M);
+	_assert_(row>=0);
+
+	for(int i=0;i<numindices;i++){
+		this->element_values[i] = this->values[row*this->N+i];
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+} /*}}}*/
+int  SegInput::GetInterpolation(){/*{{{*/
+	return this->interpolation;
+}/*}}}*/
+void SegInput::GetInputAverage(IssmDouble* pvalue){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	IssmDouble numnodesd = reCast<int,IssmDouble>(numnodes);
+	IssmDouble value     = 0.;
+
+	for(int i=0;i<numnodes;i++) value+=this->element_values[i];
+	value = value/numnodesd;
+
+	*pvalue=value;
+}/*}}}*/
+IssmDouble SegInput::GetInputMin(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	IssmDouble min=this->element_values[0];
+
+	for(int i=1;i<numnodes;i++){
+		if(this->element_values[i]<min) min=this->element_values[i];
+	}
+	return min;
+}/*}}}*/
+IssmDouble SegInput::GetInputMax(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	IssmDouble max=this->element_values[0];
+
+	for(int i=1;i<numnodes;i++){
+		if(this->element_values[i]>max) max=this->element_values[i];
+	}
+	return max;
+}/*}}}*/
+IssmDouble SegInput::GetInputMaxAbs(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	IssmDouble maxabs=fabs(this->element_values[0]);
+
+	for(int i=1;i<numnodes;i++){
+		if(fabs(this->element_values[i])>maxabs) maxabs=fabs(this->element_values[i]);
+	}
+	return maxabs;
+}/*}}}*/
+void SegInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+	_assert_(gauss->Enum()==GaussSegEnum);
+	SegRef::GetInputDerivativeValue(derivativevalues,this->element_values,xyz_list,(GaussSeg*)gauss,this->interpolation);
+}/*}}}*/
+void SegInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+	_assert_(gauss->Enum()==GaussSegEnum);
+	SegRef::GetInputValue(pvalue,this->element_values,(GaussSeg*)gauss,this->interpolation);
+}/*}}}*/
+int  SegInput::GetResultArraySize(void){/*{{{*/
+	return 1;
+}
+/*}}}*/
+int  SegInput::GetResultInterpolation(void){/*{{{*/
+	if(this->interpolation==P0Enum || this->interpolation==P0DGEnum){
+		return P0Enum;
+	}
+	return P1Enum;
+}/*}}}*/
+int  SegInput::GetResultNumberOfNodes(void){/*{{{*/
+	return SegRef::NumberofNodes(this->interpolation);
+}
+/*}}}*/
+void SegInput::Scale(IssmDouble alpha){/*{{{*/
+
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = alpha*this->values[i];
+	for(int i=0;i<SegRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = alpha*this->element_values[i];
+}
+/*}}}*/
+void SegInput::Pow(IssmDouble alpha){/*{{{*/
+
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = pow(this->values[i],alpha);
+	for(int i=0;i<SegRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = pow(this->element_values[i],alpha);
+}
+/*}}}*/
+void SegInput::AXPY(Input* xinput,IssmDouble alpha){/*{{{*/
+
+	/*xinput is of the same type, so cast it: */
+	if(xinput->ObjectEnum()!=SegInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+	SegInput* xseginput=xDynamicCast<SegInput*>(xinput);
+	if(xseginput->GetInterpolation()!=this->interpolation) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+
+	/*Carry out the AXPY operation depending on type:*/
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = alpha*xseginput->values[i] + this->values[i];
+	for(int i=0;i<SegRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = alpha*xseginput->element_values[i] + this->element_values[i];
+}
+/*}}}*/
+void SegInput::PointWiseMult(Input* xinput){/*{{{*/
+
+	/*xinput is of the same type, so cast it: */
+	if(xinput->ObjectEnum()!=SegInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+	SegInput* xseginput=xDynamicCast<SegInput*>(xinput);
+	if(xseginput->GetInterpolation()!=this->interpolation) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+
+	/* we need to check that the vector sizes are identical*/
+	if(xseginput->M!=this->M||xseginput->N!=this->N) _error_("Operation not permitted because the inputs have different sizes");
+
+	/*Carry out the AXPY operation depending on type:*/
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = xseginput->values[i] * this->values[i];
+	for(int i=0;i<SegRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = xseginput->element_values[i] * this->element_values[i];
+}
+/*}}}*/
+
+/*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/SegInput.h	(revision 25379)
@@ -0,0 +1,49 @@
+#ifndef _SEGINPUT2_H_
+#define _SEGINPUT2_H_
+
+/*Headers:*/
+#include "./ElementInput.h"
+#include "../Elements/SegRef.h"
+
+class SegInput: public ElementInput, public SegRef{
+
+	public:
+		/*SegInput constructors, destructors: {{{*/
+		SegInput();
+		SegInput(int nbe_in,int nbv_in,int interp_in);
+		~SegInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*SegInput management: {{{*/
+		void SetInput(int interp_in,int row,IssmDouble value_in);
+		void SetInput(int interp_in,int numinds,int* rows,IssmDouble* values_in);
+		void SetInput(int interp_in,int row,int numinds,IssmDouble* values_in);
+		int  GetInterpolation();
+		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss);
+		void GetInputAverage(IssmDouble* pvalue);
+		IssmDouble GetInputMin();
+		IssmDouble GetInputMax();
+		IssmDouble GetInputMaxAbs();
+		SegInput* GetSegInput(){return this;};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void Scale(IssmDouble scalar);
+		void Pow(IssmDouble scalar);
+		void AXPY(Input* xinput,IssmDouble scalar);
+		void PointWiseMult(Input* xinput);
+		void Serve(int numindices,int* indices);
+		void Serve(int row,int numindices);
+		int  GetResultArraySize(void);
+		int  GetResultInterpolation(void);
+		int  GetResultNumberOfNodes(void);
+		/*}}}*/
+		void Reset(int interp_in);
+
+};
+#endif  /* _SEGINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp	(revision 25379)
@@ -0,0 +1,554 @@
+/*!\file TransientInput.c
+ * \brief: implementation of the TransientInput object
+ */
+/*Headers*/
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "./TransientInput.h"
+#include "./TriaInput.h"
+#include "./PentaInput.h"
+#include "../../shared/shared.h"
+#include "../Params/Parameters.h"
+
+/*TransientInput constructors and destructor*/
+TransientInput::TransientInput(){/*{{{*/
+
+	enum_type=UNDEF;
+	inputs=NULL;
+	this->numtimesteps=0;
+	this->parameters=NULL;
+	this->timesteps=NULL;
+
+	this->current_input=NULL;
+	this->current_step=-1;
+
+}
+/*}}}*/
+TransientInput::TransientInput(int in_enum_type,int nbe,int nbv,IssmDouble* timesin,int N){/*{{{*/
+
+	/*Set Enum*/
+	this->enum_type=in_enum_type;
+	this->numberofelements_local = nbe;
+	this->numberofvertices_local = nbv;
+
+	/*Allocate values and timesteps, and copy: */
+	_assert_(N>=0 && N<1e6);
+	this->numtimesteps=N;
+	if(N>0){
+		this->timesteps=xNew<IssmDouble>(N);
+		xMemCpy(this->timesteps,timesin,N);
+
+		this->inputs     = xNew<Input*>(N);
+		for(int i=0;i<N;i++) this->inputs[i] = NULL;
+	}
+	else{
+		this->timesteps=0;
+		this->inputs   =0;
+	}
+	this->parameters = NULL;
+	this->current_input=NULL;
+	this->current_step=-1;
+}
+/*}}}*/
+TransientInput::~TransientInput(){/*{{{*/
+
+	for(int i=0;i<this->numtimesteps;i++){
+		delete this->inputs[i];
+	}
+	xDelete<Input*>(this->inputs);
+	xDelete<IssmDouble>(this->timesteps);
+
+	if(this->current_input) delete this->current_input;
+}
+/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* TransientInput::copy() {/*{{{*/
+
+	TransientInput* output=NULL;
+
+	output = new TransientInput();
+	output->enum_type=this->enum_type;
+	output->numtimesteps=this->numtimesteps;
+	if(this->numtimesteps>0){
+		output->timesteps=xNew<IssmDouble>(this->numtimesteps);
+		xMemCpy(output->timesteps,this->timesteps,this->numtimesteps);
+		output->inputs = xNew<Input*>(this->numtimesteps);
+		for(int i=0;i<this->numtimesteps;i++){
+			output->inputs[i] = this->inputs[i]->copy();
+		}
+	}
+	output->parameters=this->parameters;
+
+	return output;
+}/*}}}*/
+void TransientInput::DeepEcho(void){/*{{{*/
+
+	int i;
+
+	_printf_("TransientInput:\n");
+	_printf_("   enum: " << this->enum_type << " (" << EnumToStringx(this->enum_type) << ")\n");
+	_printf_("   numtimesteps: " << this->numtimesteps << "\n");
+	_printf_("---inputs: \n");
+	for(i=0;i<this->numtimesteps;i++){
+		_printf_("   time: " << this->timesteps[i]<<"  ");
+		if(this->inputs[i]) this->inputs[i]->Echo();
+		else                _printf_(" NOT SET! \n");
+	}
+}
+/*}}}*/
+void TransientInput::Configure(Parameters* params){/*{{{*/
+	this->parameters=params;
+}
+/*}}}*/
+void TransientInput::Echo(void){/*{{{*/
+	this->DeepEcho();
+}
+/*}}}*/
+int  TransientInput::Id(void){ return -1; }/*{{{*/
+/*}}}*/
+void TransientInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	if (marshall_direction == MARSHALLING_BACKWARD){
+		_error_("not implmented");
+		//inputs = new Inputs();
+	}
+
+	MARSHALLING_ENUM(TransientInputEnum);
+
+	MARSHALLING(enum_type);
+	MARSHALLING(numtimesteps);
+	MARSHALLING_DYNAMIC(this->timesteps,IssmDouble,numtimesteps);
+	//inputs->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
+	_error_("not implemented");
+}
+/*}}}*/
+int  TransientInput::ObjectEnum(void){/*{{{*/
+
+	return TransientInputEnum;
+
+}
+/*}}}*/
+
+/*Intermediary*/
+void TransientInput::AddTriaTimeInput(IssmDouble time,int numindices,int* indices,IssmDouble* values_in,int interp_in){/*{{{*/
+
+	/*Check whether this is the last time step that we have*/
+	if(this->numtimesteps){
+		if(fabs(this->timesteps[this->numtimesteps-1]-time)<1.0e-5){
+			this->AddTriaTimeInput(this->numtimesteps-1,numindices,indices,values_in,interp_in);
+			return;
+		}
+	}
+
+	/*This is a new time step! we need to add it to the list*/
+	if(this->numtimesteps>0 && time<this->timesteps[this->numtimesteps-1]) _error_("timestep values must increase sequentially");
+
+	IssmDouble *old_timesteps = NULL;
+	Input    **old_inputs    = NULL;
+	if (this->numtimesteps > 0){
+		old_timesteps=xNew<IssmDouble>(this->numtimesteps);
+		xMemCpy(old_timesteps,this->timesteps,this->numtimesteps);
+		xDelete<IssmDouble>(this->timesteps);
+		old_inputs=xNew<Input*>(this->numtimesteps);
+		xMemCpy(old_inputs,this->inputs,this->numtimesteps);
+		xDelete<Input*>(this->inputs);
+	}
+
+	this->numtimesteps=this->numtimesteps+1;
+	this->timesteps=xNew<IssmDouble>(this->numtimesteps);
+	this->inputs   = xNew<Input*>(this->numtimesteps);
+
+	if (this->numtimesteps > 1){
+		xMemCpy(this->inputs,old_inputs,this->numtimesteps-1);
+		xMemCpy(this->timesteps,old_timesteps,this->numtimesteps-1);
+		xDelete(old_timesteps);
+		xDelete<Input*>(old_inputs);
+	}
+
+	/*go ahead and plug: */
+	this->timesteps[this->numtimesteps-1] = time;
+	this->inputs[this->numtimesteps-1]    = NULL;
+	this->AddTriaTimeInput(this->numtimesteps-1,numindices,indices,values_in,interp_in);
+
+}
+/*}}}*/
+void TransientInput::AddPentaTimeInput(IssmDouble time,int numindices,int* indices,IssmDouble* values_in,int interp_in){/*{{{*/
+
+	/*Check whether this is the last time step that we have*/
+	if(this->numtimesteps){
+		if(fabs(this->timesteps[this->numtimesteps-1]-time)<1.0e-5){
+			this->AddPentaTimeInput(this->numtimesteps-1,numindices,indices,values_in,interp_in);
+			return;
+		}
+	}
+
+	/*This is a new time step! we need to add it to the list*/
+	if(this->numtimesteps>0 && time<this->timesteps[this->numtimesteps-1]) _error_("timestep values must increase sequentially");
+
+	IssmDouble *old_timesteps = NULL;
+	Input    **old_inputs    = NULL;
+	if (this->numtimesteps > 0){
+		old_timesteps=xNew<IssmDouble>(this->numtimesteps);
+		xMemCpy(old_timesteps,this->timesteps,this->numtimesteps);
+		xDelete<IssmDouble>(this->timesteps);
+		old_inputs=xNew<Input*>(this->numtimesteps);
+		xMemCpy(old_inputs,this->inputs,this->numtimesteps);
+		xDelete<Input*>(this->inputs);
+	}
+
+	this->numtimesteps=this->numtimesteps+1;
+	this->timesteps=xNew<IssmDouble>(this->numtimesteps);
+	this->inputs   = xNew<Input*>(this->numtimesteps);
+
+	if (this->numtimesteps > 1){
+		xMemCpy(this->inputs,old_inputs,this->numtimesteps-1);
+		xMemCpy(this->timesteps,old_timesteps,this->numtimesteps-1);
+		xDelete(old_timesteps);
+		xDelete<Input*>(old_inputs);
+	}
+
+	/*go ahead and plug: */
+	this->timesteps[this->numtimesteps-1] = time;
+	this->inputs[this->numtimesteps-1]    = NULL;
+	this->AddPentaTimeInput(this->numtimesteps-1,numindices,indices,values_in,interp_in);
+
+}
+/*}}}*/
+void TransientInput::AddTriaTimeInput(int step,int numindices,int* indices,IssmDouble* values_in,int interp_in){/*{{{*/
+
+	_assert_(step>=0 && step<this->numtimesteps);
+
+	/*Create it if necessary*/
+	if(this->inputs[step]){
+		if(this->inputs[step]->ObjectEnum()!=TriaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[step]->ObjectEnum()));
+	}
+	else{
+		this->inputs[step] = new TriaInput(this->numberofelements_local,this->numberofvertices_local,interp_in);
+	}
+
+	/*Set input*/
+	TriaInput* input = xDynamicCast<TriaInput*>(this->inputs[step]);
+	input->SetInput(interp_in,numindices,indices,values_in);
+
+}
+/*}}}*/
+void TransientInput::AddPentaTimeInput(int step,int numindices,int* indices,IssmDouble* values_in,int interp_in){/*{{{*/
+
+	_assert_(step>=0 && step<this->numtimesteps);
+
+	/*Create it if necessary*/
+	if(this->inputs[step]){
+		if(this->inputs[step]->ObjectEnum()!=PentaInputEnum) _error_("cannot add Element values to a "<<EnumToStringx(this->inputs[step]->ObjectEnum()));
+	}
+	else{
+		this->inputs[step] = new PentaInput(this->numberofelements_local,this->numberofvertices_local,interp_in);
+	}
+
+	/*Set input*/
+	PentaInput* input = xDynamicCast<PentaInput*>(this->inputs[step]);
+	input->SetInput(interp_in,numindices,indices,values_in);
+
+}
+/*}}}*/
+void TransientInput::GetAllTimes(IssmDouble** ptimesteps,int* pnumtimesteps){/*{{{*/
+
+	if(ptimesteps){
+		*ptimesteps=xNew<IssmDouble>(this->numtimesteps);
+		xMemCpy(*ptimesteps,this->timesteps,this->numtimesteps);
+	}
+	if(pnumtimesteps){
+		*pnumtimesteps = this->numtimesteps;
+	}
+
+}
+/*}}}*/
+TriaInput* TransientInput::GetTriaInput(){/*{{{*/
+
+	IssmDouble time;
+	this->parameters->FindParam(&time,TimeEnum);
+	return this->GetTriaInput(time);
+
+}
+/*}}}*/
+TriaInput* TransientInput::GetTriaInput(IssmDouble time){/*{{{*/
+
+	/*Set current time input*/
+	this->SetCurrentTimeInput(time);
+	_assert_(this->current_input);
+
+	/*Cast and return*/
+	if(this->current_input->ObjectEnum()!=TriaInputEnum){
+		_error_("Cannot return a TriaInput");
+	}
+	return xDynamicCast<TriaInput*>(this->current_input);
+
+}
+/*}}}*/
+TriaInput* TransientInput::GetTriaInput(IssmDouble start_time, IssmDouble end_time, int averaging_method){/*{{{*/
+
+	/*Set current time input*/
+	this->SetAverageAsCurrentTimeInput(start_time,end_time,averaging_method);
+	_assert_(this->current_input);
+
+	/*Cast and return*/
+	if(this->current_input->ObjectEnum()!=TriaInputEnum){
+		_error_("Cannot return a TriaInput");
+	}
+	return xDynamicCast<TriaInput*>(this->current_input);
+
+}
+/*}}}*/
+TriaInput* TransientInput::GetTriaInput(int offset){/*{{{*/
+
+	/*Check offset*/
+	if(offset<0 || offset>this->numtimesteps-1){
+		_error_("Cannot return input for offset "<<offset);
+	}
+	Input* input = this->inputs[offset];
+
+	/*Cast and return*/
+	_assert_(input);
+	if(input->ObjectEnum()!=TriaInputEnum) _error_("Cannot return a TriaInput");
+	return xDynamicCast<TriaInput*>(input);
+
+}
+/*}}}*/
+PentaInput* TransientInput::GetPentaInput(){/*{{{*/
+
+	IssmDouble time;
+	this->parameters->FindParam(&time,TimeEnum);
+	return this->GetPentaInput(time);
+}
+/*}}}*/
+PentaInput* TransientInput::GetPentaInput(IssmDouble time){/*{{{*/
+
+	/*Set current time input*/
+	this->SetCurrentTimeInput(time);
+	_assert_(this->current_input);
+
+	/*Cast and return*/
+	if(this->current_input->ObjectEnum()!=PentaInputEnum){
+		_error_("Cannot return a PentaInput");
+	}
+	return xDynamicCast<PentaInput*>(this->current_input);
+
+}
+/*}}}*/
+PentaInput* TransientInput::GetPentaInput(int offset){/*{{{*/
+
+
+	/*Check offset*/
+	if(offset<0 || offset>this->numtimesteps-1){
+		_error_("Cannot return input for offset "<<offset);
+	}
+	Input* input = this->inputs[offset];
+
+	/*Cast and return*/
+	if(input->ObjectEnum()!=PentaInputEnum) _error_("Cannot return a PentaInput");
+	return xDynamicCast<PentaInput*>(input);
+
+}
+/*}}}*/
+PentaInput* TransientInput::GetPentaInput(IssmDouble start_time, IssmDouble end_time, int averaging_method){/*{{{*/
+
+	/*Set current time input*/
+	this->SetAverageAsCurrentTimeInput(start_time,end_time,averaging_method);
+	_assert_(this->current_input);
+
+	/*Cast and return*/
+	if(this->current_input->ObjectEnum()!=PentaInputEnum){
+		_error_("Cannot return a PentaInput");
+	}
+	return xDynamicCast<PentaInput*>(this->current_input);
+
+}
+/*}}}*/
+
+void TransientInput::SetCurrentTimeInput(IssmDouble time){/*{{{*/
+
+	/*First, recover current time from parameters: */
+	bool linear_interp;
+	this->parameters->FindParam(&linear_interp,TimesteppingInterpForcingsEnum);
+
+	/*Figure step out*/
+	int offset;
+	if(!binary_search(&offset,time,this->timesteps,this->numtimesteps)){
+		_error_("Input not found (is TransientInput sorted ?)");
+	}
+
+	if (offset==-1){
+
+		/*get values for the first time: */
+		_assert_(time<this->timesteps[0]);
+
+		/*If already processed return*/
+		if(this->current_step==0.) return;
+
+		/*Prepare input*/
+		if(this->current_input) delete this->current_input;
+		this->current_step = 0.;
+		this->current_input = this->inputs[0]->copy();
+
+	}
+	else if(offset==(this->numtimesteps-1) || !linear_interp){
+
+		/*get values for the last time: */
+		_assert_(time>=this->timesteps[offset]);
+
+		/*If already processed return*/
+		if(this->current_step==reCast<IssmDouble>(offset)) return;
+
+		/*Prepare input*/
+		if(this->current_input) delete this->current_input;
+		this->current_step  = reCast<IssmDouble>(offset);
+		this->current_input = this->inputs[offset]->copy();
+	}
+	else {
+
+		/*Interpolate */
+		_assert_(time>=this->timesteps[offset] && time<this->timesteps[offset+1]);
+
+		/*get values between two times [offset:offset+1[, Interpolate linearly*/
+		IssmDouble deltat=this->timesteps[offset+1]-this->timesteps[offset];
+		IssmDouble this_step = reCast<IssmDouble>(offset) + (time - this->timesteps[offset])/deltat;
+
+		/*If already processed return*/
+		if(fabs(this->current_step-this_step)<1.e-5) return;
+
+		/*Prepare input*/
+		if(this->current_input) delete this->current_input;
+		this->current_step = this_step;
+		IssmDouble alpha2=(time-this->timesteps[offset])/deltat;
+		IssmDouble alpha1=(1.0-alpha2);
+
+		Input* input1=this->inputs[offset];
+		Input* input2=this->inputs[offset+1];
+
+		this->current_input = input1->copy();
+		this->current_input->Scale(alpha1);
+		this->current_input->AXPY(input2,alpha2);
+	}
+
+}/*}}}*/
+void TransientInput::SetAverageAsCurrentTimeInput(IssmDouble start_time,IssmDouble end_time, int averaging_method){/*{{{*/
+
+	IssmDouble  dt,durinv;
+	IssmDouble  dtsum=0;
+	IssmDouble  timespan,mid_step;
+	int         found,start_offset,end_offset,input_offset;
+
+	/*go through the timesteps, and grab offset for start and end*/
+	found=binary_search(&start_offset,start_time,this->timesteps,this->numtimesteps);
+	if(!found) _error_("Input not found (is TransientInput sorted ?)");
+	found=binary_search(&end_offset,end_time,this->timesteps,this->numtimesteps);
+	if(!found) _error_("Input not found (is TransientInput sorted ?)");
+
+	if(start_offset==-1){
+		timespan=this->timesteps[end_offset]-start_time;
+	}
+	else{
+		timespan=this->timesteps[end_offset]-this->timesteps[start_offset];
+	}
+	mid_step=reCast<IssmDouble>(start_offset)+0.5*timespan;
+	/*If already processed return, we set step in the middle of the interval*/
+	if(fabs(this->current_step-mid_step)<1.e-5) return;
+	/*If not processed set current_step*/
+	if(this->current_input) delete this->current_input;
+	this->current_step = mid_step;
+
+	int offset=start_offset;
+	while(offset < end_offset){
+		if(offset==start_offset){
+			dt=this->timesteps[offset+1]-start_time;
+			_assert_(dt>0.);
+			if(offset==end_offset-1){
+				dt=end_time-start_time;
+				_assert_(dt>0.);
+			}
+		}
+		else if(offset==end_offset-1){
+			dt=end_time-this->timesteps[offset];
+			_assert_(dt>0.);
+		}
+		else{
+			dt=this->timesteps[offset+1]-this->timesteps[offset];
+			_assert_(dt>0.);
+		}
+		Input* stepinput=this->inputs[offset+1];
+
+		switch(averaging_method){
+			case 0: /*Arithmetic mean*/
+				if(offset==start_offset){
+					this->current_input=stepinput->copy();
+					this->current_input->Scale(dt);
+				}
+				else{
+					this->current_input->AXPY(stepinput,dt);
+				}
+				break;
+			case 1: /*Geometric mean*/
+				if(offset==start_offset){
+					this->current_input = stepinput->copy();
+					this->current_input->Scale(dt);
+				}
+				else{
+					stepinput->Scale(dt);
+					this->current_input->PointWiseMult(stepinput);
+				}
+				break;
+			case 2: /*Harmonic mean*/
+				if(offset==start_offset){
+					this->current_input = stepinput->copy();
+					this->current_input->Pow(-1);
+					this->current_input->Scale(dt);
+				}
+				else{
+					stepinput->Pow(-1);
+					this->current_input->AXPY(stepinput,dt);
+				}
+			default:
+				_error_("averaging method is not recognised");
+		}
+		dtsum+=dt;
+		offset+=1;
+	}
+	_assert_(dtsum>0);
+	durinv=1./dtsum;
+	/*Integration done, now normalize*/
+	switch(averaging_method){
+		case 0: //Arithmetic mean
+			this->current_input->Scale(durinv);
+			break;
+		case 1: /*Geometric mean*/
+			this->current_input->Pow(durinv);
+			break;
+		case 2: /*Harmonic mean*/
+			this->current_input->Scale(durinv);
+			this->current_input->Pow(-1);
+		default:
+			_error_("averaging method is not recognised");
+	}
+}/*}}}*/
+IssmDouble  TransientInput::GetTimeByOffset(int offset){/*{{{*/
+	if(offset<0) offset=0;
+	_assert_(offset<this->numtimesteps);
+	return this->timesteps[offset];
+}
+/*}}}*/
+int  TransientInput::GetTimeInputOffset(IssmDouble time){/*{{{*/
+
+	int offset;
+
+	/*go through the timesteps, and figure out which interval we
+	 *     *fall within. Then interpolate the values on this interval: */
+	int found=binary_search(&offset,time,this->timesteps,this->numtimesteps);
+	if(!found) _error_("Input not found (is TransientInput sorted ?)");
+
+	return offset;
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h	(revision 25379)
@@ -0,0 +1,66 @@
+/*! \file TransientInput.h
+ *  \brief: header file for transientinput object
+ */
+
+#ifndef _TRANSIENTINPUT2_H_
+#define _TRANSIENTINPUT2_H_
+
+/*Headers:*/
+#include "./Input.h"
+class Gauss;
+class Parameters;
+
+class TransientInput: public Input{
+
+	private:
+		int     numberofelements_local;
+		int     numberofvertices_local;
+
+	public:
+		int         enum_type;
+		int         numtimesteps;
+		Input**    inputs;
+		IssmDouble *timesteps;
+		Parameters *parameters;     //to find current time.
+
+		IssmDouble  current_step;
+		Input*     current_input;
+
+		/*TransientInput constructors, destructors: {{{*/
+		TransientInput();
+		TransientInput(int in_enum_type,int nbe,int nbv,IssmDouble* times,int N);
+		~TransientInput();
+		void AddTimeInput(Input* input,IssmDouble time); /*FIXME: remove!*/
+		void AddTriaTimeInput(IssmDouble time,int numindices,int* indices,IssmDouble* values_in,int interp_in);
+		void AddPentaTimeInput(IssmDouble time,int numindices,int* indices,IssmDouble* values_in,int interp_in);
+		void AddTriaTimeInput(int step,int numindices,int* indices,IssmDouble* values_in,int interp_in);
+		void AddPentaTimeInput(int step,int numindices,int* indices,IssmDouble* values_in,int interp_in);
+		/*}}}*/
+		/*Object virtual functions definitions:{{{*/
+		Input* copy();
+		void    Configure(Parameters* params);
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*TransientInput management:*/
+		void         GetAllTimes(IssmDouble** ptimesteps,int* pnumtimesteps);
+		TriaInput*  GetTriaInput();
+		TriaInput*  GetTriaInput(IssmDouble time);
+		TriaInput*  GetTriaInput(IssmDouble start_time,IssmDouble end_time,int averaging_method);
+		TriaInput*  GetTriaInput(int offset);
+		PentaInput* GetPentaInput();
+		PentaInput* GetPentaInput(IssmDouble time);
+		PentaInput* GetPentaInput(int offset);
+		PentaInput* GetPentaInput(IssmDouble start_time,IssmDouble end_time,int averaging_method);
+		Input*      GetTimeInput(IssmDouble time){_error_("This should not happen!");};
+		IssmDouble   GetTimeByOffset(int offset);
+		int          GetTimeInputOffset(IssmDouble time);
+		void         SetCurrentTimeInput(IssmDouble time);
+		void         SetAverageAsCurrentTimeInput(IssmDouble start_time,IssmDouble end_time,int averaging_method);
+		/*numerics:*/
+
+};
+#endif  /* _TRANSIENTINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp	(revision 25379)
@@ -0,0 +1,400 @@
+/*!\file TriaInput.c
+ * \brief: implementation of the TriaInput object
+ */
+
+#ifdef HAVE_CONFIG_H
+	#include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "../classes.h"
+#include "../../shared/shared.h"
+#include "./TriaInput.h"
+
+/*TriaInput constructors and destructor*/
+TriaInput::TriaInput(void){/*{{{*/
+
+	this->numberofelements_local = -1;
+	this->numberofvertices_local = -1;
+	this->isserved       = false;
+	this->isserved_collapsed= 0;
+	this->M = -1;
+	this->N = -1;
+	this->values         = NULL;
+	this->element_values = NULL;
+
+}/*}}}*/
+TriaInput::TriaInput(int nbe_in,int nbv_in,int interp_in){/*{{{*/
+
+	_assert_(nbe_in>0);
+	_assert_(nbe_in<1e11);
+	_assert_(nbv_in>0);
+	_assert_(nbv_in<1e11);
+	this->numberofelements_local = nbe_in;
+	this->numberofvertices_local = nbv_in;
+	this->isserved       = false;
+	this->isserved_collapsed = 0;
+
+	/*Reset takes care of the rest*/
+	this->Reset(interp_in);
+}/*}}}*/
+TriaInput::~TriaInput(){/*{{{*/
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+	if(this->values)         xDelete<IssmDouble>(this->values);
+}
+/*}}}*/
+void TriaInput::Reset(int interp_in){/*{{{*/
+
+	/*Clean up*/
+	if(this->values)         xDelete<IssmDouble>(this->values);
+	if(this->element_values) xDelete<IssmDouble>(this->element_values);
+
+	/*Set interpolation*/
+	this->interpolation  = interp_in;
+
+	/*Create Sizes*/
+	if(this->interpolation==P1Enum){
+		this->M = this->numberofvertices_local;
+		this->N = 1;
+	}
+	else{
+		this->M = this->numberofelements_local;
+		this->N = TriaRef::NumberofNodes(interp_in);
+	}
+
+	/*Allocate Pointers*/
+	this->values         = xNewZeroInit<IssmDouble>(this->M*this->N);
+	this->element_values = xNewZeroInit<IssmDouble>(TriaRef::NumberofNodes(interp_in));
+}/*}}}*/
+
+/*Object virtual functions definitions:*/
+Input* TriaInput::copy() {/*{{{*/
+
+	TriaInput* output = new TriaInput(this->numberofelements_local,this->numberofvertices_local,this->interpolation);
+
+	xMemCpy<IssmDouble>(output->values,this->values,this->M*this->N);
+	xMemCpy<IssmDouble>(output->element_values,this->element_values,TriaRef::NumberofNodes(this->interpolation));
+
+	return output;
+}
+/*}}}*/
+void TriaInput::DeepEcho(void){/*{{{*/
+	_printf_("TriaInput Echo:\n");
+	_printf_("   interpolation: "<<EnumToStringx(this->interpolation)<<"\n");
+	_printf_("   Size:          "<<M<<"x"<<N<<"\n");
+	_printf_("   isserved:      "<<(isserved?"true":"false") << "\n");
+	_printf_("   isserved_collapsed: "<<isserved_collapsed << "\n");
+	if(isserved){
+		_printf_("   current values:      ");
+		for(int i=0;i<3;i++) _printf_(" "<<this->element_values[i]);
+		_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+	}
+	printarray(this->values,this->M,this->N);
+	//_printf_(setw(15)<<"   TriaInput "<<setw(25)<<left<<EnumToStringx(this->enum_type)<<" "<<(value?"true":"false") << "\n");
+}
+/*}}}*/
+void TriaInput::Echo(void){/*{{{*/
+	_printf_("TriaInput Echo:\n");
+	_printf_("   interpolation: "<<EnumToStringx(this->interpolation)<<"\n");
+	_printf_("   Size:          "<<M<<"x"<<N<<"\n");
+	_printf_("   isserved:      "<<(isserved?"true":"false") << "\n");
+	_printf_("   isserved_collapsed: "<<isserved_collapsed << "\n");
+	if(isserved){
+		_printf_("   current values:      ");
+		_printf_("[ ");
+		for(int i=0;i<TriaRef::NumberofNodes(this->interpolation);i++) _printf_(" "<<this->element_values[i]);
+		_printf_("] ("<<EnumToStringx(this->interpolation)<<")\n");
+	}
+}
+/*}}}*/
+int  TriaInput::Id(void){/*{{{*/
+	return -1;
+}/*}}}*/
+void TriaInput::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
+
+	MARSHALLING_ENUM(TriaInputEnum);
+	MARSHALLING(this->numberofelements_local);
+	MARSHALLING(this->numberofvertices_local);
+	MARSHALLING(this->interpolation);
+	MARSHALLING(this->M);
+	MARSHALLING(this->N);
+	this->isserved = false;
+	this->isserved_collapsed = 0;
+	if(this->M*this->N){
+		MARSHALLING_DYNAMIC(this->values,IssmDouble,this->M*this->N);
+	}
+	else this->values = NULL;
+
+	if(marshall_direction == MARSHALLING_BACKWARD){
+		this->element_values = xNewZeroInit<IssmDouble>(TriaRef::NumberofNodes(this->interpolation));
+	}
+
+}
+/*}}}*/
+int  TriaInput::ObjectEnum(void){/*{{{*/
+	return TriaInputEnum;
+}
+/*}}}*/
+
+/*TriaInput management*/
+void TriaInput::SetInput(int interp_in,int row,IssmDouble value_in){/*{{{*/
+
+	_assert_(this);
+	_assert_(row>=0);
+	_assert_(row<this->M);
+	_assert_(this->N==1);
+
+	this->values[row] = value_in;
+	this->isserved = false;
+}
+/*}}}*/
+void TriaInput::SetInput(int interp_in,int numindices,int* indices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	if(interp_in==P1Enum && this->interpolation==P1Enum){
+		_assert_(this->N==1);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else if(interp_in==P0Enum && this->interpolation==P0Enum){
+		_assert_(this->N==1);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else if(this->interpolation!=P1Enum && interp_in==P1Enum){
+		this->Reset(interp_in);
+		for(int i=0;i<numindices;i++){
+			int row = indices[i];
+			_assert_(row>=0);
+			_assert_(row<this->M);
+			this->values[row] = values_in[i];
+		}
+	}
+	else{
+		_error_("Cannot convert "<<EnumToStringx(this->interpolation)<<" to "<<EnumToStringx(interp_in));
+	}
+	this->isserved = false;
+}
+/*}}}*/
+void TriaInput::SetInput(int interp_in,int row,int numindices,IssmDouble* values_in){/*{{{*/
+
+	_assert_(this);
+	if(interp_in==this->interpolation){
+		_assert_(this->N==numindices);
+	}
+	else{
+		this->Reset(interp_in);
+		_assert_(this->N==numindices);
+	}
+	for(int i=0;i<numindices;i++) this->values[row*this->N+i] = values_in[i];
+	this->isserved = false;
+}
+/*}}}*/
+void TriaInput::Serve(int numindices,int* indices){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N==1);
+
+	for(int i=0;i<numindices;i++){
+		int row = indices[i];
+		_assert_(row>=0);
+		_assert_(row<this->M);
+		this->element_values[i] = this->values[row];
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+	this->isserved_collapsed = 0;
+}
+/*}}}*/
+void TriaInput::Serve(int row,int numindices){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N==numindices);
+	_assert_(row<this->M);
+	_assert_(row>=0);
+
+	for(int i=0;i<numindices;i++){
+		this->element_values[i] = this->values[row*this->N+i];
+	}
+
+	/*Set input as served*/
+	this->isserved = true;
+	this->isserved_collapsed = 0;
+} /*}}}*/
+void TriaInput::ServeCollapsed(int row,int id1,int id2){/*{{{*/
+
+	_assert_(this);
+	_assert_(this->N>=3);
+	_assert_(row<this->M);
+	_assert_(row>=0);
+	_assert_(id1>=0 && id1<3);
+	_assert_(id2>=0 && id2<3);
+
+	this->element_values[0] = this->values[row*this->N+id1];
+	this->element_values[1] = this->values[row*this->N+id2];
+
+	/*Set input as served*/
+	this->isserved = true;
+	this->isserved_collapsed = 1;
+}/*}}}*/
+void TriaInput::SetServeCollapsed(bool status){/*{{{*/
+	this->isserved_collapsed = 1;
+}/*}}}*/
+int  TriaInput::GetInterpolation(){/*{{{*/
+	return this->interpolation;
+}/*}}}*/
+void TriaInput::GetInputAverage(IssmDouble* pvalue){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 2;
+	IssmDouble numnodesd = reCast<int,IssmDouble>(numnodes);
+	IssmDouble value     = 0.;
+
+	for(int i=0;i<numnodes;i++) value+=this->element_values[i];
+	value = value/numnodesd;
+
+	*pvalue=value;
+}/*}}}*/
+IssmDouble TriaInput::GetInputMin(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 2;
+	IssmDouble min=this->element_values[0];
+
+	for(int i=1;i<numnodes;i++){
+		if(this->element_values[i]<min) min=this->element_values[i];
+	}
+	return min;
+}/*}}}*/
+IssmDouble TriaInput::GetInputMax(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 2;
+	IssmDouble max=this->element_values[0];
+
+	for(int i=1;i<numnodes;i++){
+		if(this->element_values[i]>max) max=this->element_values[i];
+	}
+	return max;
+}/*}}}*/
+IssmDouble TriaInput::GetInputMaxAbs(void){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	int        numnodes  = this->NumberofNodes(this->interpolation);
+	if(this->isserved_collapsed) numnodes = 2;
+	IssmDouble maxabs=fabs(this->element_values[0]);
+
+	for(int i=1;i<numnodes;i++){
+		if(fabs(this->element_values[i])>maxabs) maxabs=fabs(this->element_values[i]);
+	}
+	return maxabs;
+}/*}}}*/
+void TriaInput::GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+
+	if(this->isserved_collapsed){
+		_assert_(gauss->Enum()==GaussSegEnum);
+		if(this->interpolation==P0Enum){
+			derivativevalues[0] = 0.;
+		}
+		else{
+			SegRef temp;
+			temp.GetInputDerivativeValue(derivativevalues,this->element_values,xyz_list,(GaussSeg*)gauss,P1Enum);
+		}
+	}
+	else{
+		_assert_(gauss->Enum()==GaussTriaEnum);
+		TriaRef::GetInputDerivativeValue(derivativevalues,this->element_values,xyz_list,(GaussTria*)gauss,this->interpolation);
+	}
+}/*}}}*/
+void TriaInput::GetInputValue(IssmDouble* pvalue,Gauss* gauss){/*{{{*/
+	_assert_(this);
+	_assert_(this->isserved);
+	if(this->isserved_collapsed){
+		_assert_(gauss->Enum()==GaussSegEnum);
+		if(this->interpolation==P0Enum){
+			*pvalue = this->element_values[0];
+		}
+		else{
+			SegRef temp;
+			temp.GetInputValue(pvalue,this->element_values,(GaussSeg*)gauss,P1Enum);
+		}
+	}
+	else{
+		_assert_(gauss->Enum()==GaussTriaEnum);
+		TriaRef::GetInputValue(pvalue,this->element_values,(GaussTria*)gauss,this->interpolation);
+	}
+}/*}}}*/
+int  TriaInput::GetResultArraySize(void){/*{{{*/
+	return 1;
+}
+/*}}}*/
+int  TriaInput::GetResultInterpolation(void){/*{{{*/
+	if(this->interpolation==P0Enum || this->interpolation==P0DGEnum){
+		return P0Enum;
+	}
+	return P1Enum;
+}/*}}}*/
+int  TriaInput::GetResultNumberOfNodes(void){/*{{{*/
+	return TriaRef::NumberofNodes(this->interpolation);
+}
+/*}}}*/
+void TriaInput::Scale(IssmDouble alpha){/*{{{*/
+
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = alpha*this->values[i];
+	for(int i=0;i<TriaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = alpha*this->element_values[i];
+}
+/*}}}*/
+void TriaInput::Pow(IssmDouble alpha){/*{{{*/
+
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = pow(this->values[i],alpha);
+	for(int i=0;i<TriaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = pow(this->element_values[i],alpha);
+}
+/*}}}*/
+void TriaInput::AXPY(Input* xinput,IssmDouble alpha){/*{{{*/
+
+	/*xinput is of the same type, so cast it: */
+	if(xinput->ObjectEnum()!=TriaInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+	TriaInput* xtriainput=xDynamicCast<TriaInput*>(xinput);
+	if(xtriainput->GetInterpolation()!=this->interpolation) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+
+	/*Carry out the AXPY operation depending on type:*/
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = alpha*xtriainput->values[i] + this->values[i];
+	for(int i=0;i<TriaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = alpha*xtriainput->element_values[i] + this->element_values[i];
+}
+/*}}}*/
+void TriaInput::PointWiseMult(Input* xinput){/*{{{*/
+
+	/*xinput is of the same type, so cast it: */
+	if(xinput->ObjectEnum()!=TriaInputEnum) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+	TriaInput* xtriainput=xDynamicCast<TriaInput*>(xinput);
+	if(xtriainput->GetInterpolation()!=this->interpolation) _error_("Operation not permitted because xinput is of type " << EnumToStringx(xinput->ObjectEnum()));
+
+	/* we need to check that the vector sizes are identical*/
+	if(xtriainput->M!=this->M||xtriainput->N!=this->N) _error_("Operation not permitted because the inputs have different sizes");
+
+	/*Carry out the AXPY operation depending on type:*/
+	for(int i=0;i<this->M*this->N;i++) this->values[i] = xtriainput->values[i] * this->values[i];
+	for(int i=0;i<TriaRef::NumberofNodes(this->interpolation);i++) this->element_values[i] = xtriainput->element_values[i] * this->element_values[i];
+}
+/*}}}*/
+
+/*Object functions*/
Index: /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 25379)
+++ /issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h	(revision 25379)
@@ -0,0 +1,54 @@
+#ifndef _TRIAINPUT2_H_
+#define _TRIAINPUT2_H_
+
+/*Headers:*/
+#include "./ElementInput.h"
+#include "../Elements/TriaRef.h"
+
+class TriaInput: public ElementInput, public TriaRef{
+
+	private:
+		int isserved_collapsed;
+		int collapsed_ids[2];
+	public:
+		/*TriaInput constructors, destructors: {{{*/
+		TriaInput();
+		TriaInput(int nbe_in,int nbv_in,int interp_in);
+		~TriaInput();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{ */
+		Input *copy();
+		void    DeepEcho();
+		void    Echo();
+		int     Id();
+		void    Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int     ObjectEnum();
+		/*}}}*/
+		/*TriaInput management: {{{*/
+		void SetInput(int interp_in,int row,IssmDouble value_in);
+		void SetInput(int interp_in,int numinds,int* rows,IssmDouble* values_in);
+		void SetInput(int interp_in,int row,int numinds,IssmDouble* values_in);
+		int  GetInterpolation();
+		void GetInputDerivativeValue(IssmDouble* derivativevalues, IssmDouble* xyz_list, Gauss* gauss);
+		void GetInputAverage(IssmDouble* pvalue);
+		IssmDouble GetInputMin();
+		IssmDouble GetInputMax();
+		IssmDouble GetInputMaxAbs();
+		TriaInput* GetTriaInput(){return this;};
+		void GetInputValue(IssmDouble* pvalue,Gauss* gauss);
+		void Scale(IssmDouble scalar);
+		void Pow(IssmDouble scalar);
+		void AXPY(Input* xinput,IssmDouble scalar);
+		void PointWiseMult(Input* xinput);
+		void Serve(int numindices,int* indices);
+		void Serve(int row,int numindices);
+		void ServeCollapsed(int row,int id0,int in1);
+		void SetServeCollapsed(bool);
+		int  GetResultArraySize(void);
+		int  GetResultInterpolation(void);
+		int  GetResultNumberOfNodes(void);
+		/*}}}*/
+		void Reset(int interp_in);
+
+};
+#endif  /* _TRIAINPUT_H */
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 25379)
@@ -27,5 +27,5 @@
 #include "../shared/io/io.h"
 #include "../shared/shared.h"
-#include "../classes/Inputs2/TransientInput2.h"
+#include "../classes/Inputs/TransientInput.h"
 
 #ifdef _HAVE_CODIPACK_
@@ -1607,5 +1607,5 @@
 }
 /*}}}*/
-void  IoModel::FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value){/*{{{*/
+void  IoModel::FetchDataToInput(Inputs* inputs,Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value){/*{{{*/
 
 	/*First, look whether it is not already loaded in this->data*/
@@ -1617,5 +1617,5 @@
 			for(int i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(iodata->data,inputs2,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
+				element->InputCreate(iodata->data,inputs,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
 			}
 			return;
@@ -1639,8 +1639,8 @@
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
 		if(!doublearray){
-			element->SetElementInput(inputs2,input_enum,default_value);
+			element->SetElementInput(inputs,input_enum,default_value);
 		}
 		else{
-			element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
+			element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 		}
 	}
@@ -1650,5 +1650,5 @@
 }
 /*}}}*/
-void  IoModel::FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum){/*{{{*/
+void  IoModel::FetchDataToInput(Inputs* inputs,Elements* elements,const char* vector_name,int input_enum){/*{{{*/
 
 	/*First, look whether it is not already loaded in this->data*/
@@ -1659,5 +1659,5 @@
 			for(int i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(iodata->data,inputs2,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
+				element->InputCreate(iodata->data,inputs,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
 			}
 			return;
@@ -1684,5 +1684,5 @@
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->SetBoolInput(inputs2,input_enum,boolean);
+				element->SetBoolInput(inputs,input_enum,boolean);
 			}
 			break;
@@ -1691,5 +1691,5 @@
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->SetIntInput(inputs2,input_enum,integer);
+				element->SetIntInput(inputs,input_enum,integer);
 			}
 			break;
@@ -1698,5 +1698,5 @@
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->SetElementInput(inputs2,input_enum,scalar);
+				element->SetElementInput(inputs,input_enum,scalar);
 			}
 			break;
@@ -1706,5 +1706,5 @@
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
+				element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 			}
 			break;
@@ -1714,5 +1714,5 @@
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
+				element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 			}
 			break;
@@ -1742,5 +1742,5 @@
 
 				//initialize transient input dataset:
-				TransientInput2* transientinput=inputs2->SetDatasetTransientInput(input_enum,i, times,N);
+				TransientInput* transientinput=inputs->SetDatasetTransientInput(input_enum,i, times,N);
 				for(int j=0;j<elements->Size();j++){
 
@@ -1816,5 +1816,5 @@
 			for(i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
+				element->InputCreate(doublearray,inputs,this,M,N,vector_layout,input_enum,code);//we need i to index into elements.
 			}
 			break;
@@ -1827,5 +1827,5 @@
 }
 /*}}}*/
-void  IoModel::FetchDataToDatasetInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum){/*{{{*/
+void  IoModel::FetchDataToDatasetInput(Inputs* inputs,Elements* elements,const char* vector_name,int input_enum){/*{{{*/
 
 	/*First, look whether it is not already loaded in this->data*/
@@ -1837,5 +1837,5 @@
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
 				_error_("to be implemented...");
-				//element->InputCreate(iodata->data,inputs2,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
+				//element->InputCreate(iodata->data,inputs,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.
 			}
 			return;
@@ -1877,5 +1877,5 @@
 			for(int i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->DatasetInputCreate(doublearray,M,N,ids,N,inputs2,this,input_enum);
+				element->DatasetInputCreate(doublearray,M,N,ids,N,inputs,this,input_enum);
 			}
 			xDelete<int>(ids);
@@ -1892,5 +1892,5 @@
 			for(int i=0;i<elements->Size();i++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-				element->DatasetInputCreate(doublearray,M,N,ids,N,inputs2,this,input_enum);
+				element->DatasetInputCreate(doublearray,M,N,ids,N,inputs,this,input_enum);
 			}
 			xDelete<int>(ids);
Index: /issm/trunk-jpl/src/c/classes/IoModel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/IoModel.h	(revision 25379)
@@ -13,5 +13,5 @@
 class Parameters;
 class Elements;
-class Inputs2;
+class Inputs;
 class Param;
 class Options;
@@ -139,7 +139,7 @@
 		void        FetchData(Options *options,const char* data_name);
 		void        FetchData(int num,...);
-		void        FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum);
-		void        FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value);
-		void        FetchDataToDatasetInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum);
+		void        FetchDataToInput(Inputs* inputs,Elements* elements,const char* vector_name,int input_enum);
+		void        FetchDataToInput(Inputs* inputs,Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value);
+		void        FetchDataToDatasetInput(Inputs* inputs,Elements* elements,const char* vector_name,int input_enum);
 		void        FetchIndependent(const char* dependent_name);
 		void        FetchMultipleData(char***   pstringarray,int* pnumstrings,const char* data_name);
Index: /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp	(revision 25379)
@@ -387,11 +387,11 @@
 	IssmDouble c_t       = element->FindParam(HydrologyPressureMeltCoefficientEnum);
 
-	Input2* h_input      = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input);
-	Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* ks_input     = element->GetInput2(HydrologySheetConductivityEnum); _assert_(ks_input);
-	Input2* phi_input    = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
+	Input* h_input      = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
+	Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
+	Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* ks_input     = element->GetInput(HydrologySheetConductivityEnum); _assert_(ks_input);
+	Input* phi_input    = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
 
 	/*Get tangent vector*/
@@ -518,11 +518,11 @@
 	IssmDouble c_t       = element->FindParam(HydrologyPressureMeltCoefficientEnum);
 
-	Input2* h_input      = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input);
-	Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* ks_input     = element->GetInput2(HydrologySheetConductivityEnum); _assert_(ks_input);
-	Input2* phi_input    = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
+	Input* h_input      = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
+	Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
+	Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* ks_input     = element->GetInput(HydrologySheetConductivityEnum); _assert_(ks_input);
+	Input* phi_input    = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
 
 	/*Get tangent vector*/
@@ -630,11 +630,11 @@
 	IssmDouble dt        = element->FindParam(TimesteppingTimeStepEnum);
 
-	Input2* h_input      = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input);
-	Input2* H_input      = element->GetInput2(ThicknessEnum); _assert_(H_input);
-	Input2* b_input      = element->GetInput2(BedEnum); _assert_(b_input);
-	Input2* B_input      = element->GetInput2(MaterialsRheologyBEnum);         _assert_(B_input);
-	Input2* n_input      = element->GetInput2(MaterialsRheologyNEnum);         _assert_(n_input);
-	Input2* ks_input     = element->GetInput2(HydrologySheetConductivityEnum); _assert_(ks_input);
-	Input2* phi_input    = element->GetInput2(HydraulicPotentialEnum);         _assert_(phi_input);
+	Input* h_input      = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);
+	Input* H_input      = element->GetInput(ThicknessEnum); _assert_(H_input);
+	Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
+	Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
+	Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
+	Input* ks_input     = element->GetInput(HydrologySheetConductivityEnum); _assert_(ks_input);
+	Input* phi_input    = element->GetInput(HydraulicPotentialEnum);         _assert_(phi_input);
 
 	/*Get tangent vector*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp	(revision 25379)
@@ -361,5 +361,5 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* flux_input = tria->GetInput2(HydrologyNeumannfluxEnum);  _assert_(flux_input); 
+	Input* flux_input = tria->GetInput(HydrologyNeumannfluxEnum);  _assert_(flux_input); 
 
 	/*Check wether it is an inflow or outflow BC (0 is the middle of the segment)*/
@@ -405,5 +405,5 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* flux_input = tria->GetInput2(HydrologyNeumannfluxEnum);  _assert_(flux_input); 
+	Input* flux_input = tria->GetInput(HydrologyNeumannfluxEnum);  _assert_(flux_input); 
 
 	/*Check wether it is an inflow or outflow BC (0 is the middle of the segment)*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp	(revision 25379)
@@ -516,6 +516,6 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 
-	Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 
+	Input* vxaverage_input=tria->GetInput(VxEnum); _assert_(vxaverage_input); 
+	Input* vyaverage_input=tria->GetInput(VyEnum); _assert_(vyaverage_input); 
 	GetNormal(&normal[0],xyz_list);
 
@@ -591,6 +591,6 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 
-	Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 
+	Input* vxaverage_input=tria->GetInput(VxEnum); _assert_(vxaverage_input); 
+	Input* vyaverage_input=tria->GetInput(VyEnum); _assert_(vyaverage_input); 
 	GetNormal(&normal[0],xyz_list);
 
@@ -688,6 +688,6 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	IssmDouble dt = parameters->FindParam(TimesteppingTimeStepEnum);
-	Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input);
-	Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input);
+	Input* vxaverage_input=tria->GetInput(VxEnum); _assert_(vxaverage_input);
+	Input* vyaverage_input=tria->GetInput(VyEnum); _assert_(vyaverage_input);
 	GetNormal(&normal[0],xyz_list);
 
@@ -764,6 +764,6 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	IssmDouble dt = parameters->FindParam(TimesteppingTimeStepEnum);
-	Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 
-	Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 
+	Input* vxaverage_input=tria->GetInput(VxEnum); _assert_(vxaverage_input); 
+	Input* vyaverage_input=tria->GetInput(VyEnum); _assert_(vyaverage_input); 
 	GetNormal(&normal[0],xyz_list);
 
@@ -866,7 +866,7 @@
 	/*Retrieve all inputs and parameters*/
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
-	Input2* vxaverage_input = tria->GetInput2(VxEnum);        _assert_(vxaverage_input);
-	Input2* vyaverage_input = tria->GetInput2(VyEnum);        _assert_(vyaverage_input);
-	Input2* thickness_input = tria->GetInput2(ThicknessEnum); _assert_(thickness_input);
+	Input* vxaverage_input = tria->GetInput(VxEnum);        _assert_(vxaverage_input);
+	Input* vyaverage_input = tria->GetInput(VyEnum);        _assert_(vyaverage_input);
+	Input* thickness_input = tria->GetInput(ThicknessEnum); _assert_(thickness_input);
 	GetNormal(&normal[0],xyz_list);
 
@@ -947,7 +947,7 @@
 	GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
 	IssmDouble dt = parameters->FindParam(TimesteppingTimeStepEnum);
-	Input2* vxaverage_input    = tria->GetInput2(VxEnum);                        _assert_(vxaverage_input);
-	Input2* vyaverage_input    = tria->GetInput2(VyEnum);                        _assert_(vyaverage_input);
-	Input2* spcthickness_input = tria->GetInput2(MasstransportSpcthicknessEnum); _assert_(spcthickness_input);
+	Input* vxaverage_input    = tria->GetInput(VxEnum);                        _assert_(vxaverage_input);
+	Input* vyaverage_input    = tria->GetInput(VyEnum);                        _assert_(vyaverage_input);
+	Input* spcthickness_input = tria->GetInput(MasstransportSpcthicknessEnum); _assert_(spcthickness_input);
 	GetNormal(&normal[0],xyz_list);
 
Index: /issm/trunk-jpl/src/c/classes/Materials/Material.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Materials/Material.h	(revision 25379)
@@ -16,5 +16,5 @@
 class Gauss;
 class Input;
-class Input2;
+class Input;
 /*}}}*/
 
@@ -49,11 +49,11 @@
 		virtual void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss)=0;
 		virtual void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss)=0;
-		virtual void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input)=0;
-		virtual void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input)=0;
-		virtual void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf)=0;
-		virtual void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input)=0;
-		virtual void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble epseff)=0;
-		virtual void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff)=0;
-		virtual void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff)=0;
+		virtual void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input)=0;
+		virtual void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
+		virtual void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf)=0;
+		virtual void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0;
+		virtual void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff)=0;
+		virtual void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
+		virtual void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0;
 
 };
Index: /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp	(revision 25379)
@@ -155,5 +155,5 @@
 	IssmDouble B;
 
-	Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
+	Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
 	B_input->GetInputValue(&B,gauss);
 	return B;
@@ -165,5 +165,5 @@
 	IssmDouble Bbar;
 
-	Input2* B_input = element->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input);
+	Input* B_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);
 	B_input->GetInputValue(&Bbar,gauss);
 	return Bbar;
@@ -184,5 +184,5 @@
 	IssmDouble Ec;
 
-	Input2* Ec_input = element->GetInput2(MaterialsRheologyEcEnum); _assert_(Ec_input);
+	Input* Ec_input = element->GetInput(MaterialsRheologyEcEnum); _assert_(Ec_input);
 	Ec_input->GetInputValue(&Ec,gauss);
 	return Ec;
@@ -194,5 +194,5 @@
 	IssmDouble Ecbar;
 
-	Input2* Ecbar_input = element->GetInput2(MaterialsRheologyEcbarEnum); _assert_(Ecbar_input);
+	Input* Ecbar_input = element->GetInput(MaterialsRheologyEcbarEnum); _assert_(Ecbar_input);
 	Ecbar_input->GetInputValue(&Ecbar,gauss);
 	return Ecbar;
@@ -204,5 +204,5 @@
 	IssmDouble Es;
 
-	Input2* Es_input = element->GetInput2(MaterialsRheologyEsEnum); _assert_(Es_input);
+	Input* Es_input = element->GetInput(MaterialsRheologyEsEnum); _assert_(Es_input);
 	Es_input->GetInputValue(&Es,gauss);
 	return Es;
@@ -214,5 +214,5 @@
 	IssmDouble Esbar;
 
-	Input2* Esbar_input = element->GetInput2(MaterialsRheologyEsbarEnum); _assert_(Esbar_input);
+	Input* Esbar_input = element->GetInput(MaterialsRheologyEsbarEnum); _assert_(Esbar_input);
 	Esbar_input->GetInputValue(&Esbar,gauss);
 	return Esbar;
@@ -393,5 +393,5 @@
 }/*}}}*/
 
-void  Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff){/*{{{*/
+void  Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){/*{{{*/
 
 	/*Intermediaries*/
@@ -422,5 +422,5 @@
 }
 /*}}}*/
-void  Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){/*{{{*/
+void  Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
 
 	/*Intermediaries*/
@@ -450,5 +450,5 @@
 	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
 }/*}}}*/
-void  Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){/*{{{*/
+void  Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){/*{{{*/
 	/*Intermediaries*/
 	IssmDouble vx,vy,vz;
@@ -480,5 +480,5 @@
 	*pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
 }/*}}}*/
-void  Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
+void  Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -523,5 +523,5 @@
 }
 /*}}}*/
-void  Matestar::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void  Matestar::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -565,8 +565,8 @@
 	*pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss);
 }/*}}}*/
-void  Matestar::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surface_input){/*{{{*/
-	_error_("not implemented yet");
-}/*}}}*/
-void  Matestar::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void  Matestar::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surface_input){/*{{{*/
+	_error_("not implemented yet");
+}/*}}}*/
+void  Matestar::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
Index: /issm/trunk-jpl/src/c/classes/Materials/Matestar.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matestar.h	(revision 25379)
@@ -75,11 +75,11 @@
 		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
 
-		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
-		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf);
-		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff);
-		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff);
-		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff);
+		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
+		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff);
+		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
+		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff);
 		/*}}}*/
 		IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss);
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.cpp	(revision 25379)
@@ -216,5 +216,5 @@
 	/*Output*/
 	IssmDouble B;
-	Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input);
+	Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);
 	B_input->GetInputValue(&B,gauss);
 	return B;
@@ -228,5 +228,5 @@
 	IssmDouble Bbar;
 
-	Input2* B_input = element->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input);
+	Input* B_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);
 	B_input->GetInputValue(&Bbar,gauss);
 	return Bbar;
@@ -239,5 +239,5 @@
 	IssmDouble D;
 	if(this->isdamaged){
-		Input2* D_input = element->GetInput2(DamageDEnum); _assert_(D_input);
+		Input* D_input = element->GetInput(DamageDEnum); _assert_(D_input);
 		D_input->GetInputValue(&D,gauss);
 	}
@@ -254,5 +254,5 @@
 	IssmDouble Dbar;
 	if(this->isdamaged){
-		Input2* D_input = element->GetInput2(DamageDbarEnum); _assert_(D_input);
+		Input* D_input = element->GetInput(DamageDbarEnum); _assert_(D_input);
 		D_input->GetInputValue(&Dbar,gauss);
 	}
@@ -268,5 +268,5 @@
 	/*Output*/
 	IssmDouble E;
-	Input2* E_input = element->GetInput2(MaterialsRheologyEEnum); _assert_(E_input);
+	Input* E_input = element->GetInput(MaterialsRheologyEEnum); _assert_(E_input);
 	E_input->GetInputValue(&E,gauss);
 	return E;
@@ -278,5 +278,5 @@
 	/*Output*/
 	IssmDouble Ebar;
-	Input2* E_input = element->GetInput2(MaterialsRheologyEbarEnum); _assert_(E_input);
+	Input* E_input = element->GetInput(MaterialsRheologyEbarEnum); _assert_(E_input);
 	E_input->GetInputValue(&Ebar,gauss);
 	return Ebar;
@@ -287,5 +287,5 @@
 	/*Output*/
 	IssmDouble n;
-	Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input);
+	Input* n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
 	n_input->GetInputAverage(&n);
 	return n;
@@ -671,5 +671,5 @@
 }/*}}}*/
 
-void  Matice::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/
+void  Matice::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){/*{{{*/
 	/*The effective strain rate is defined in Paterson 3d Ed p 91 eq 9,
 	 * and Cuffey p 303 eq 8.18:
@@ -710,5 +710,5 @@
 }
 /*}}}*/
-void  Matice::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void  Matice::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
@@ -736,5 +736,5 @@
 	*pviscosity=viscosity;
 }/*}}}*/
-void  Matice::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surface_input){/*{{{*/
+void  Matice::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surface_input){/*{{{*/
 	/*Compute the L1L2 viscosity
 	 *
@@ -795,5 +795,5 @@
 	*pviscosity = viscosity;
 }/*}}}*/
-void  Matice::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/
+void  Matice::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){/*{{{*/
 
 	/*Intermediaries*/
Index: /issm/trunk-jpl/src/c/classes/Materials/Matice.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matice.h	(revision 25379)
@@ -77,11 +77,11 @@
 		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss);
 
-		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input);
-		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf);
-		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input);
-		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff){_error_("not supported");};
-		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){_error_("not supported");};
-		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){_error_("not supported");};
+		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input);
+		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf);
+		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input);
+		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble eps_eff){_error_("not supported");};
+		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
+		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");};
 		/*}}}*/
 };
Index: /issm/trunk-jpl/src/c/classes/Materials/Matlitho.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Materials/Matlitho.h	(revision 25379)
@@ -66,11 +66,11 @@
 		void       ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon,Gauss* gauss){_error_("not supported");};
 
-		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){_error_("not supported");};
-		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){_error_("not supported");};
-		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf){_error_("not supported");};
-		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){_error_("not supported");};
-		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble epseff){_error_("not supported");};
-		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff){_error_("not supported");};
-		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff){_error_("not supported");};
+		void       ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not supported");};
+		void       ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+		void       ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* surf){_error_("not supported");};
+		void       ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not supported");};
+		void       ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input,IssmDouble epseff){_error_("not supported");};
+		void       ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");};
+		void       ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");};
 
 		/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Misfit.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Misfit.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Misfit.cpp	(revision 25379)
@@ -235,5 +235,5 @@
 		 /*Now, the observation is buried inside the elements, go fish it in the first element (cludgy, needs fixing): */
 		 Element* element = (Element*)femmodel->elements->GetObjectByOffset(0); _assert_(element);
-		 Input2*  input   = element->GetInput2(observation_enum); _assert_(input);
+		 Input*  input   = element->GetInput(observation_enum); _assert_(input);
 		 input->GetInputAverage(&observation);
 
Index: /issm/trunk-jpl/src/c/classes/Radar.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Radar.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/Radar.cpp	(revision 25379)
@@ -128,6 +128,6 @@
 
 	/*Retrieve all inputs we will be needing: */
-	Input2* temp_input=element->GetInput2(TemperatureEnum); _assert_(temp_input);
-	Input2* ice_period_input=element->GetInput2(RadarIcePeriodEnum); _assert_(ice_period_input); 
+	Input* temp_input=element->GetInput(TemperatureEnum); _assert_(temp_input);
+	Input* ice_period_input=element->GetInput(RadarIcePeriodEnum); _assert_(ice_period_input); 
 
 	/* Start looping on the number of vertices: */
@@ -187,6 +187,6 @@
 
 		/*Add Attenuation rate results into inputs*/
-	   element->AddInput2(RadarAttenuationMacGregorEnum,&attenuation_rate_macgregor[0],P1Enum);
-		element->AddInput2(RadarAttenuationWolffEnum,&attenuation_rate_wolff[0],P1Enum);
+	   element->AddInput(RadarAttenuationMacGregorEnum,&attenuation_rate_macgregor[0],P1Enum);
+		element->AddInput(RadarAttenuationWolffEnum,&attenuation_rate_wolff[0],P1Enum);
 
 		/*Clean up*/
@@ -212,9 +212,9 @@
 	/* Get node coordinates*/
 	element->GetVerticesCoordinates(&xyz_list);
-	Input2 *atten_input_M07 = element->GetInput2(RadarAttenuationMacGregorEnum); _assert_(atten_input_M07);
-	Input2 *atten_input_W97 = element->GetInput2(RadarAttenuationWolffEnum);     _assert_(atten_input_W97);
-	Input2 *surf_input      = element->GetInput2(SurfaceEnum);                   _assert_(surf_input);
-	Input2 *thick_input     = element->GetInput2(ThicknessEnum);                 _assert_(thick_input);
-	Input2 *temp_input      = element->GetInput2(TemperatureEnum);               _assert_(temp_input);
+	Input *atten_input_M07 = element->GetInput(RadarAttenuationMacGregorEnum); _assert_(atten_input_M07);
+	Input *atten_input_W97 = element->GetInput(RadarAttenuationWolffEnum);     _assert_(atten_input_W97);
+	Input *surf_input      = element->GetInput(SurfaceEnum);                   _assert_(surf_input);
+	Input *thick_input     = element->GetInput(ThicknessEnum);                 _assert_(thick_input);
+	Input *temp_input      = element->GetInput(TemperatureEnum);               _assert_(temp_input);
 
 	/* Start looping on the number of vertices: */
@@ -269,6 +269,6 @@
 
 	    /*Add power results into inputs*/
-			element->AddInput2(RadarPowerMacGregorEnum,&power_M07[0],P1Enum);
-			element->AddInput2(RadarPowerWolffEnum,&power_W97[0],P1Enum);
+			element->AddInput(RadarPowerMacGregorEnum,&power_M07[0],P1Enum);
+			element->AddInput(RadarPowerWolffEnum,&power_W97[0],P1Enum);
 
 		/*Clean up and return*/
Index: /issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/classes.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/classes/classes.h	(revision 25379)
@@ -67,7 +67,7 @@
 #include "./Options/OptionUtilities.h"
 
-/*Inputs2*/
-#include "./Inputs2/Inputs2.h"
-#include "./Inputs2/Input2.h"
+/*Inputs*/
+#include "./Inputs/Inputs.h"
+#include "./Inputs/Input.h"
 
 /*ExternalResults: */
Index: /issm/trunk-jpl/src/c/cores/gia_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/cores/gia_core.cpp	(revision 25379)
@@ -6,6 +6,6 @@
 #include "../toolkits/toolkits.h"
 #include "../classes/classes.h"
-#include "../classes/Inputs2/TriaInput2.h"
-#include "../classes/Inputs2/DatasetInput2.h"
+#include "../classes/Inputs/TriaInput.h"
+#include "../classes/Inputs/DatasetInput.h"
 #include "../shared/shared.h"
 #include "../modules/modules.h"
@@ -76,17 +76,17 @@
 
 		/*find the Ngia and Ugia dataset:*/
-		DatasetInput2* dataset_input_ngia=femmodel->inputs2->GetDatasetInput2(GiaMmeNgiaEnum);
-		DatasetInput2* dataset_input_ugia=femmodel->inputs2->GetDatasetInput2(GiaMmeUgiaEnum);
+		DatasetInput* dataset_input_ngia=femmodel->inputs->GetDatasetInput(GiaMmeNgiaEnum);
+		DatasetInput* dataset_input_ugia=femmodel->inputs->GetDatasetInput(GiaMmeUgiaEnum);
 		/*Go find the modelid'th input:*/
-		TriaInput2* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
-		TriaInput2* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
+		TriaInput* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
+		TriaInput* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
 
 		/*Plug into SealevelUGiaRate and SealevelNGiaRate inputs:*/
-		Input2* tria_input_copy_ngia=tria_input_ngia->copy();
-		Input2* tria_input_copy_ugia=tria_input_ugia->copy();
+		Input* tria_input_copy_ngia=tria_input_ngia->copy();
+		Input* tria_input_copy_ugia=tria_input_ugia->copy();
 		tria_input_copy_ngia->ChangeEnum(NGiaRateEnum);
 		tria_input_copy_ugia->ChangeEnum(UGiaRateEnum);
-		femmodel->inputs2->AddInput(tria_input_copy_ngia);
-		femmodel->inputs2->AddInput(tria_input_copy_ugia);
+		femmodel->inputs->AddInput(tria_input_copy_ngia);
+		femmodel->inputs->AddInput(tria_input_copy_ugia);
 	}
 	
Index: /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp	(revision 25379)
@@ -6,7 +6,7 @@
 #include "../toolkits/toolkits.h"
 #include "../classes/classes.h"
-#include "../classes/Inputs2/TriaInput2.h"
-#include "../classes/Inputs2/TransientInput2.h"
-#include "../classes/Inputs2/DatasetInput2.h"
+#include "../classes/Inputs/TriaInput.h"
+#include "../classes/Inputs/TransientInput.h"
+#include "../classes/Inputs/DatasetInput.h"
 #include "../shared/shared.h"
 #include "../modules/modules.h"
@@ -71,5 +71,5 @@
 		if(VerboseSolution()) _printf0_("   saving results\n");
 		femmodel->parameters->FindParam(&requested_outputs,&numoutputs,SealevelriseRequestedOutputsEnum);
-		femmodel->inputs2->Echo();
+		femmodel->inputs->Echo();
 		femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
 		if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
@@ -226,5 +226,5 @@
 
 		//reset cumdeltathickness  to 0: 
-		InputUpdateFromConstantx(femmodel->inputs2,femmodel->elements,0.,SealevelriseCumDeltathicknessEnum);
+		InputUpdateFromConstantx(femmodel->inputs,femmodel->elements,0.,SealevelriseCumDeltathicknessEnum);
 	}
 
@@ -668,9 +668,9 @@
 	femmodel->parameters->FindParam(&time,TimeEnum);
 	if(dslmodel==1){
-		TransientInput2* transient_input  = femmodel->inputs2->GetTransientInput(DslSeaSurfaceHeightChangeAboveGeoidEnum);
-		TriaInput2* tria_input=transient_input->GetTriaInput(time);
-		Input2* tria_input_copy=tria_input->copy();
+		TransientInput* transient_input  = femmodel->inputs->GetTransientInput(DslSeaSurfaceHeightChangeAboveGeoidEnum);
+		TriaInput* tria_input=transient_input->GetTriaInput(time);
+		Input* tria_input_copy=tria_input->copy();
 		tria_input_copy->ChangeEnum(DslDynamicRateEnum);
-		femmodel->inputs2->AddInput(tria_input_copy);
+		femmodel->inputs->AddInput(tria_input_copy);
 	}
 	else if(dslmodel==2){
@@ -683,13 +683,13 @@
 		
 		/*find the DslSeaSurfaceHeightChangeAboveGeoidEnum dataset of transient inputs:*/
-		DatasetInput2* dataset_input=femmodel->inputs2->GetDatasetInput2(DslSeaSurfaceHeightChangeAboveGeoidEnum);
+		DatasetInput* dataset_input=femmodel->inputs->GetDatasetInput(DslSeaSurfaceHeightChangeAboveGeoidEnum);
 		
 		/*Go find the modelid'th transient input:*/
-		TriaInput2* tria_input=dataset_input->GetTriaInputByOffset(reCast<int, IssmDouble>(modelid));
+		TriaInput* tria_input=dataset_input->GetTriaInputByOffset(reCast<int, IssmDouble>(modelid));
 		
 		/*Plug into DslDynamicRate input: */
-		Input2* tria_input_copy=tria_input->copy();
+		Input* tria_input_copy=tria_input->copy();
 		tria_input_copy->ChangeEnum(DslDynamicRateEnum);
-		femmodel->inputs2->AddInput(tria_input_copy);
+		femmodel->inputs->AddInput(tria_input_copy);
 	}
 	else _error_("not implemented yet");
@@ -711,9 +711,9 @@
 	femmodel->parameters->FindParam(&time,TimeEnum);
 	if(dslmodel==1){
-		TransientInput2* transient_input  = femmodel->inputs2->GetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
-		TriaInput2* tria_input=transient_input->GetTriaInput(time);
-		Input2* tria_input_copy=tria_input->copy();
+		TransientInput* transient_input  = femmodel->inputs->GetTransientInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
+		TriaInput* tria_input=transient_input->GetTriaInput(time);
+		Input* tria_input_copy=tria_input->copy();
 		tria_input_copy->ChangeEnum(DslStericRateEnum);
-		femmodel->inputs2->AddInput(tria_input_copy);
+		femmodel->inputs->AddInput(tria_input_copy);
 	}
 	else if (dslmodel==2){
@@ -726,13 +726,13 @@
 		
 		/*find the DslGlobalAverageThermostericSeaLevelChangeEnum dataset of transient inputs:*/
-		DatasetInput2* dataset_input=femmodel->inputs2->GetDatasetInput2(DslGlobalAverageThermostericSeaLevelChangeEnum);
+		DatasetInput* dataset_input=femmodel->inputs->GetDatasetInput(DslGlobalAverageThermostericSeaLevelChangeEnum);
 		
 		/*Go find the modelid'th transient input:*/
-		TriaInput2* tria_input=dataset_input->GetTriaInputByOffset(reCast<int, IssmDouble>(modelid));
+		TriaInput* tria_input=dataset_input->GetTriaInputByOffset(reCast<int, IssmDouble>(modelid));
 		
 		/*Plug into DslStericRate input: */
-		Input2* tria_input_copy=tria_input->copy();
+		Input* tria_input_copy=tria_input->copy();
 		tria_input_copy->ChangeEnum(DslStericRateEnum);
-		femmodel->inputs2->AddInput(tria_input_copy);
+		femmodel->inputs->AddInput(tria_input_copy);
 	}
 	else _error_("not implemented yet");
@@ -753,10 +753,10 @@
 		IssmDouble modelid;
 		/*figure out the type of DslSeaWaterPressureChangeAtSeaFloor input:*/
-		type=femmodel->inputs2->GetInputObjectEnum(DslSeaWaterPressureChangeAtSeaFloorEnum);
-
-		if(type==DatasetInput2Enum){
+		type=femmodel->inputs->GetInputObjectEnum(DslSeaWaterPressureChangeAtSeaFloorEnum);
+
+		if(type==DatasetInputEnum){
 		
 			/*find the DslSeaWaterPressureChangeAtSeaFloor dataset of transient inputs:*/
-			DatasetInput2* dataset_input=femmodel->inputs2->GetDatasetInput2(DslSeaWaterPressureChangeAtSeaFloorEnum);
+			DatasetInput* dataset_input=femmodel->inputs->GetDatasetInput(DslSeaWaterPressureChangeAtSeaFloorEnum);
 		
 			/*Recover modelid:*/
@@ -765,10 +765,10 @@
 		
 			/*Go find the modelid'th transient input:*/
-			TransientInput2* transient_input=dataset_input->GetTransientInputByOffset(reCast<int, IssmDouble>(modelid));
+			TransientInput* transient_input=dataset_input->GetTransientInputByOffset(reCast<int, IssmDouble>(modelid));
 
 			/*Plug into DslSeaWaterPressureChangeAtSeaFloor input: */
-			Input2* transient_input_copy=transient_input->copy();
+			Input* transient_input_copy=transient_input->copy();
 			transient_input_copy->ChangeEnum(DslSeaWaterPressureChangeAtSeaFloorEnum);
-			femmodel->inputs2->AddInput(transient_input_copy);
+			femmodel->inputs->AddInput(transient_input_copy);
 		}
 	}
Index: /issm/trunk-jpl/src/c/main/esmfbinders.cpp
===================================================================
--- /issm/trunk-jpl/src/c/main/esmfbinders.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/main/esmfbinders.cpp	(revision 25379)
@@ -114,5 +114,5 @@
 
 						/*Recover surface from the ISSM element: */
-						Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input);
+						Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);
 						surface_input->GetInputAverage(&surface);
 
Index: /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 25379)
@@ -9,5 +9,5 @@
 #include "../../classes/classes.h"
 
-int	ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs2* inputs2){
+int	ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs* inputs){
 
 	/*Get analysis type: */
@@ -18,5 +18,5 @@
 	for(int i=0;i<elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs2);
+		element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs);
 	}
 	if(VerboseMProcessor()) _printf0_("      Configuring loads...\n");
@@ -31,5 +31,5 @@
 	}
 	if(VerboseMProcessor()) _printf0_("      Configuring inputs...\n");
-	inputs2->Configure(parameters);
+	inputs->Configure(parameters);
 
 	return 1;
Index: /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h	(revision 25379)
@@ -9,5 +9,5 @@
 
 /* local prototypes: */
-int ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials, Parameters* parameters,Inputs2* inputs2);
+int ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials, Parameters* parameters,Inputs* inputs);
 
 #endif  /* _CONFIGUREOBJECTSX_H */
Index: /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void DragCoefficientAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -61,16 +61,16 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
+	DatasetInput* weights_input=basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum);   _assert_(weights_input);
 
 	/* get the friction law: if 11-Schoof, which has a different name of C */
 	element->FindParam(&frictionlaw, FrictionLawEnum);
-	Input2* drag_input;
+	Input* drag_input;
 	switch(frictionlaw) {
 		case 2:
 		case 11:
-			drag_input = basalelement->GetInput2(FrictionCEnum); _assert_(drag_input);
+			drag_input = basalelement->GetInput(FrictionCEnum); _assert_(drag_input);
 			break;
 		default:
-			drag_input = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(drag_input);
+			drag_input = basalelement->GetInput(FrictionCoefficientEnum); _assert_(drag_input);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 25379)
@@ -18,5 +18,5 @@
 		int numvertices = element->GetNumberOfVertices();
 		IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices);
-		element->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
+		element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
 		xDelete<IssmDouble>(values);
 	}
@@ -169,6 +169,6 @@
 		if(el_boxid!=boxid) continue;
 
-		Input2* tocs_input=basalelement->GetInput2(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(tocs_input); 
-		Input2* socs_input=basalelement->GetInput2(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(socs_input);
+		Input* tocs_input=basalelement->GetInput(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(tocs_input); 
+		Input* socs_input=basalelement->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(socs_input);
 
 		basalelement->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
@@ -210,5 +210,5 @@
 			if(el_boxid!=boxid) continue;
 
-	     	Input2* overturnings_input=basalelement->GetInput2(BasalforcingsPicoSubShelfOceanOverturningEnum); _assert_(overturnings_input);
+	     	Input* overturnings_input=basalelement->GetInput(BasalforcingsPicoSubShelfOceanOverturningEnum); _assert_(overturnings_input);
 
 			basalelement->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 25379)
@@ -6,5 +6,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "./../../classes/Inputs2/DatasetInput2.h"
+#include "./../../classes/Inputs/DatasetInput.h"
 
 void FloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/
@@ -103,6 +103,6 @@
 		if(!element->IsIceInElement() || !element->IsFloating() || !element->IsOnBase()){
 			IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices);
-			element->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1DGEnum);
-			element->AddInput2(BasalforcingsIsmip6TfShelfEnum,values,P1DGEnum);
+			element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1DGEnum);
+			element->AddInput(BasalforcingsIsmip6TfShelfEnum,values,P1DGEnum);
 			xDelete<IssmDouble>(values);
 			continue;
@@ -112,5 +112,5 @@
 		IssmDouble*    tf_test        = xNew<IssmDouble>(numvertices);
 		IssmDouble*    depth_vertices = xNew<IssmDouble>(numvertices);
-		DatasetInput2* tf_input = element->GetDatasetInput2(BasalforcingsIsmip6TfEnum); _assert_(tf_input);
+		DatasetInput* tf_input = element->GetDatasetInput(BasalforcingsIsmip6TfEnum); _assert_(tf_input);
 
 		element->GetInputListOnVertices(&depth_vertices[0],BaseEnum);
@@ -149,5 +149,5 @@
 		}
 
-		element->AddInput2(BasalforcingsIsmip6TfShelfEnum,tf_test,P1DGEnum);
+		element->AddInput(BasalforcingsIsmip6TfShelfEnum,tf_test,P1DGEnum);
 		xDelete<IssmDouble>(tf_test);
 		xDelete<IssmDouble>(depth_vertices);
@@ -162,5 +162,5 @@
 			/*Spawn basal element if on base to compute element area*/
 			Element* basalelement = element->SpawnBasalElement();
-			Input2* tf_input=basalelement->GetInput2(BasalforcingsIsmip6TfShelfEnum); _assert_(tf_input);
+			Input* tf_input=basalelement->GetInput(BasalforcingsIsmip6TfShelfEnum); _assert_(tf_input);
 			basalelement->GetInputValue(&basinid,BasalforcingsIsmip6BasinIdEnum);
 			Gauss* gauss=basalelement->NewGauss(1); gauss->GaussPoint(0);
Index: /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 25379)
@@ -87,5 +87,5 @@
 	/*We go find the input of the first element, and query its interpolation type: */
 	Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(0));
-	Input2* input=element->GetInput2(name); 
+	Input* input=element->GetInput(name); 
 	if (!input) _error_("could not find input: " << name);
 
Index: /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 25379)
@@ -9,4 +9,4 @@
 
 void InputDuplicatex(FemModel* femmodel,int original_enum, int new_enum){
-	femmodel->inputs2->DuplicateInput(original_enum,new_enum);
+	femmodel->inputs->DuplicateInput(original_enum,new_enum);
 }
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 25379)
@@ -6,5 +6,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/Inputs2.h"
+#include "../../classes/Inputs/Inputs.h"
 
 void InputUpdateFromConstantx(FemModel* femmodel,bool constant, int name){
@@ -50,5 +50,5 @@
 	}
 }
-void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmDouble constant, int name){
+void InputUpdateFromConstantx(Inputs* inputs,Elements* elements,IssmDouble constant, int name){
 
 	if(VerboseModule()) _printf0_("   Input updates from constant\n");
@@ -57,8 +57,8 @@
 	for(int i=0;i<elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		element->SetElementInput(inputs2,name,constant);
+		element->SetElementInput(inputs,name,constant);
 	}
 }
-void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,bool constant, int name){
+void InputUpdateFromConstantx(Inputs* inputs,Elements* elements,bool constant, int name){
 
 	if(VerboseModule()) _printf0_("   Input updates from constant\n");
@@ -67,9 +67,9 @@
 	for(int i=0;i<elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		element->SetBoolInput(inputs2,name,constant);
+		element->SetBoolInput(inputs,name,constant);
 	}
 }
 #ifdef _HAVE_AD_
-void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmPDouble constant, int name){
+void InputUpdateFromConstantx(Inputs* inputs,Elements* elements,IssmPDouble constant, int name){
 
 	if(VerboseModule()) _printf0_("   Input updates from constant\n");
@@ -81,5 +81,5 @@
 	for(int i=0;i<elements->Size();i++){
 		Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));
-		element->SetElementInput(inputs2,name,constant2);
+		element->SetElementInput(inputs,name,constant2);
 	}
 }
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h	(revision 25379)
@@ -7,5 +7,5 @@
 
 #include "../../classes/classes.h"
-class Inputs2;
+class Inputs;
 
 /* local prototypes: */
@@ -14,8 +14,8 @@
 void InputUpdateFromConstantx(FemModel* femmodel,IssmDouble constant,int name);
 #ifdef _HAVE_AD_
-void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmPDouble constant,int name);
+void InputUpdateFromConstantx(Inputs* inputs,Elements* elements,IssmPDouble constant,int name);
 #endif
-void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmDouble constant,int name);
-void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,bool       constant,int name);
+void InputUpdateFromConstantx(Inputs* inputs,Elements* elements,IssmDouble constant,int name);
+void InputUpdateFromConstantx(Inputs* inputs,Elements* elements,bool       constant,int name);
 
 #endif  /* _UPDATEINPUTSFROMCONSTANTXX_H */
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp	(revision 25379)
@@ -6,7 +6,7 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/TransientInput2.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
-#include "../../classes/Inputs2/TriaInput2.h"
+#include "../../classes/Inputs/TransientInput.h"
+#include "../../classes/Inputs/DatasetInput.h"
+#include "../../classes/Inputs/TriaInput.h"
 #include "../InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.h"
 #include "../InputUpdateFromConstantx/InputUpdateFromConstantx.h"
@@ -169,11 +169,11 @@
 
 
-		if (femmodel->inputs2->GetInputObjectEnum(SurfaceloadIceThicknessChangeEnum)==DatasetInput2Enum)
+		if (femmodel->inputs->GetInputObjectEnum(SurfaceloadIceThicknessChangeEnum)==DatasetInputEnum)
 			MmeToInput(femmodel,distributed_values,variable_partition,npart,SurfaceloadIceThicknessChangeEnum, P0Enum);
 
-		if (femmodel->inputs2->GetInputObjectEnum(MaskIceLevelsetEnum)==DatasetInput2Enum)
+		if (femmodel->inputs->GetInputObjectEnum(MaskIceLevelsetEnum)==DatasetInputEnum)
 			MmeToInput(femmodel,distributed_values,variable_partition,npart,MaskIceLevelsetEnum, P1Enum);
 
-		if (femmodel->inputs2->GetInputObjectEnum(MaskOceanLevelsetEnum)==DatasetInput2Enum)
+		if (femmodel->inputs->GetInputObjectEnum(MaskOceanLevelsetEnum)==DatasetInputEnum)
 			MmeToInput(femmodel,distributed_values,variable_partition,npart,MaskOceanLevelsetEnum, P1Enum);
 
@@ -184,6 +184,6 @@
 void  MmeToInput(FemModel* femmodel,IssmDouble* distributed_values,IssmDouble* variable_partition,int npart,int rootenum, int interpolationenum){ /*{{{*/
 
-	TransientInput2* transientinput  = NULL;
-	TransientInput2* transientinput2 = NULL;
+	TransientInput* transientinput  = NULL;
+	TransientInput* transientinput2 = NULL;
 	Tria* element                    = NULL;
 	IssmDouble value;
@@ -194,11 +194,11 @@
 
 	/*find thickness dataset: */
-	DatasetInput2* datasetinput = femmodel->inputs2->GetDatasetInput2(rootenum);
+	DatasetInput* datasetinput = femmodel->inputs->GetDatasetInput(rootenum);
 
 	/*Initialize new transient input: */
 	transientinput = datasetinput->GetTransientInputByOffset(0); _assert_(transientinput);
 	transientinput->GetAllTimes(&times,&N);
-	femmodel->inputs2->SetTransientInput(DummyEnum,times,N);
-	transientinput2 = femmodel->inputs2->GetTransientInput(DummyEnum);
+	femmodel->inputs->SetTransientInput(DummyEnum,times,N);
+	transientinput2 = femmodel->inputs->GetTransientInput(DummyEnum);
 		
 	for (int i=0;i<femmodel->elements->Size();i++){
@@ -214,5 +214,5 @@
 		/*copy values from the transientinput to the final transientinput2: */
 		for (int j=0;j<N;j++){
-			TriaInput2* tria_input=transientinput->GetTriaInput(j);
+			TriaInput* tria_input=transientinput->GetTriaInput(j);
 			element->InputServe(tria_input);
 			if(interpolationenum==P0Enum){
@@ -237,5 +237,5 @@
 
 	/*wipe out existing SurfaceloadIceThicknessChangeEnum dataset:*/
-	femmodel->inputs2->ChangeEnum(DummyEnum,rootenum);
+	femmodel->inputs->ChangeEnum(DummyEnum,rootenum);
 
 	//reconfigure:
@@ -245,5 +245,5 @@
 
 	/*Copy input:*/
-	femmodel->inputs2->DuplicateInput(name,DummyEnum);
+	femmodel->inputs->DuplicateInput(name,DummyEnum);
 
 	/*Go through elements, copy input name to dummy, and scale it using the distributed_values and the partition vector:*/
@@ -255,10 +255,10 @@
 	/*We created a dummy input, which was a scaled copy of the name input. Now wipe 
 	 * out the name input with the new input:*/
-	femmodel->inputs2->ChangeEnum(DummyEnum,name);
+	femmodel->inputs->ChangeEnum(DummyEnum,name);
 
 	/*Some specialty code:*/
 	switch(name){
 		case MaterialsRheologyBEnum:
-			femmodel->inputs2->DuplicateInput(name,MaterialsRheologyBbarEnum);
+			femmodel->inputs->DuplicateInput(name,MaterialsRheologyBbarEnum);
 			break;
 	}
Index: /issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp	(revision 25379)
@@ -114,5 +114,5 @@
 				IssmDouble* values = xNew<IssmDouble>(numvertices);
 				for(int j=0;j<numvertices;j++) values[j] = 1.; /*Anything >0 = no ice*/
-				element->AddInput2(MaskIceLevelsetEnum,values,P1Enum);
+				element->AddInput(MaskIceLevelsetEnum,values,P1Enum);
 				xDelete<IssmDouble>(values);
 			}
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp	(revision 25379)
@@ -9,5 +9,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel){
+void	UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Inputs* inputs,Materials* materials, IoModel* iomodel){
 	/*Intermediary*/
 	bool       control_analysis;
@@ -34,5 +34,5 @@
 	iomodel->FindConstant(&isautodiff,"md.autodiff.isautodiff");
 	if(isautodiff){
-		UpdateElementsAndMaterialsControlAD(elements,parameters,inputs2,materials,iomodel);
+		UpdateElementsAndMaterialsControlAD(elements,parameters,inputs,materials,iomodel);
 		return;
 	}
@@ -72,7 +72,7 @@
 	for(int i=0;i<num_cost_functions;i++){
 		cost_function=cost_function_enums[i];
-		if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.inversion.thickness_obs",InversionThicknessObsEnum);
-		else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(inputs2,elements,"md.inversion.surface_obs",InversionSurfaceObsEnum);
-		else if(cost_function==RheologyBInitialguessMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",RheologyBInitialguessEnum);
+		if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(inputs,elements,"md.inversion.thickness_obs",InversionThicknessObsEnum);
+		else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(inputs,elements,"md.inversion.surface_obs",InversionSurfaceObsEnum);
+		else if(cost_function==RheologyBInitialguessMisfitEnum) iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",RheologyBInitialguessEnum);
 		else if(cost_function==SurfaceAbsVelMisfitEnum
 			  || cost_function==SurfaceRelVelMisfitEnum
@@ -80,10 +80,10 @@
 			  || cost_function==SurfaceLogVxVyMisfitEnum
 			  || cost_function==SurfaceAverageVelMisfitEnum){
-			iomodel->FetchDataToInput(inputs2,elements,"md.inversion.vx_obs",InversionVxObsEnum);
-			if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs2,elements,"md.inversion.vy_obs",InversionVyObsEnum); 
+			iomodel->FetchDataToInput(inputs,elements,"md.inversion.vx_obs",InversionVxObsEnum);
+			if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs,elements,"md.inversion.vy_obs",InversionVyObsEnum); 
 		}
 		for(int j=0;j<elements->Size();j++){
 			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
-			element->DatasetInputAdd(InversionCostFunctionsCoefficientsEnum,&weights[i*iomodel->numberofvertices],inputs2,iomodel,M,1,1,cost_function,7,cost_function);
+			element->DatasetInputAdd(InversionCostFunctionsCoefficientsEnum,&weights[i*iomodel->numberofvertices],inputs,iomodel,M,1,1,cost_function,7,cost_function);
 		}
 	}
@@ -162,5 +162,5 @@
 		for(int j=0;j<elements->Size();j++){
 			Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
-			element->ControlInputCreate(independent,&independents_min[offset],&independents_max[offset],inputs2,iomodel,M,N,scale,control,i+1);
+			element->ControlInputCreate(independent,&independents_min[offset],&independents_max[offset],inputs,iomodel,M,N,scale,control,i+1);
 		}
 		xDelete<IssmDouble>(independent);
@@ -207,5 +207,5 @@
 	xDelete<char*>(controls);
 }
-void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel){
+void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Inputs* inputs,Materials* materials, IoModel* iomodel){
 
 	#if defined(_HAVE_AD_)
@@ -292,5 +292,5 @@
 			for(int j=0;j<elements->Size();j++){
 				Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j));
-				element->ControlInputCreate(independent,independents_min,independents_max,inputs2,iomodel,M,N,1.,input_enum,i+1);
+				element->ControlInputCreate(independent,independents_min,independents_max,inputs,iomodel,M,N,1.,input_enum,i+1);
 			}
 			xDelete<IssmDouble>(independent);
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp	(revision 25379)
@@ -85,5 +85,5 @@
 
 }/*}}}*/
-void CreateMaterials(Elements* elements,Inputs2* inputs2,Materials* materials,IoModel* iomodel,const int nummodels){/*{{{*/
+void CreateMaterials(Elements* elements,Inputs* inputs,Materials* materials,IoModel* iomodel,const int nummodels){/*{{{*/
 
 	/*Intermediary*/
@@ -102,10 +102,10 @@
 	switch(materials_type){
 		case MaticeEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 			switch(iomodel->domaindim){
 				case 2:
-					inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
 					break;
 				case 3:
@@ -116,12 +116,12 @@
 			break;
 		case MatenhancediceEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 			switch(iomodel->domaindim){
 				case 2:
-					inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-					inputs2->DuplicateInput(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
 					break;
 				case 3:
@@ -132,12 +132,12 @@
 			break;
 		case MatdamageiceEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.damage.D",DamageDEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.damage.D",DamageDEnum);
 			for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 			switch(iomodel->domaindim){
 				case 2:
-					inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-					inputs2->DuplicateInput(DamageDEnum,DamageDbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+					inputs->DuplicateInput(DamageDEnum,DamageDbarEnum);
 					break;
 				case 3:
@@ -148,13 +148,13 @@
 			break;
 		case MatestarEnum:
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
-			iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
+			iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
 			for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel));
 			switch(iomodel->domaindim){
 				case 2:
-					inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-					inputs2->DuplicateInput(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
-					inputs2->DuplicateInput(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
+					inputs->DuplicateInput(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
 					break;
 				case 3:
@@ -182,10 +182,10 @@
 				switch(IoCodeToEnumNature(nature[i])){ //{{{
 					case MaticeEnum:
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
 						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 						switch(iomodel->domaindim){
 							case 2:
-								inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
 								break;
 							case 3:
@@ -234,12 +234,12 @@
 
 					case MatenhancediceEnum:
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_E",MaterialsRheologyEEnum);
 						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 						switch(iomodel->domaindim){
 							case 2:
-								inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-								inputs2->DuplicateInput(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);
 								break;
 							case 3:
@@ -250,12 +250,12 @@
 						break;
 					case MatdamageiceEnum:
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.damage.D",DamageDEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_n",MaterialsRheologyNEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.damage.D",DamageDEnum);
 						for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel));
 						switch(iomodel->domaindim){
 							case 2:
-								inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-								inputs2->DuplicateInput(DamageDEnum,DamageDbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+								inputs->DuplicateInput(DamageDEnum,DamageDbarEnum);
 								break;
 							case 3:
@@ -266,13 +266,13 @@
 						break;
 					case MatestarEnum:
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
-						iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_B",MaterialsRheologyBEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);
 						for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel));
 						switch(iomodel->domaindim){
 							case 2:
-								inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
-								inputs2->DuplicateInput(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
-								inputs2->DuplicateInput(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);
+								inputs->DuplicateInput(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);
 								break;
 							case 3:
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 25379)
@@ -8,5 +8,5 @@
 #include "./ModelProcessorx.h"
 
-void CreateOutputDefinitions(Elements* elements,Parameters* parameters,Inputs2* inputs2,IoModel* iomodel){
+void CreateOutputDefinitions(Elements* elements,Parameters* parameters,Inputs* inputs,IoModel* iomodel){
 
 	int i,j;
@@ -120,6 +120,6 @@
 					for(int k=0;k<elements->Size();k++){
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
-						element->InputCreate(misfit_observation_s[j],inputs2,iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],obs_vector_type,StringToEnumx(misfit_observation_string_s[j]),7);
-						element->InputCreate(misfit_weights_s[j],inputs2,iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],weight_vector_type,StringToEnumx(misfit_weights_string_s[j]),7);
+						element->InputCreate(misfit_observation_s[j],inputs,iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],obs_vector_type,StringToEnumx(misfit_observation_string_s[j]),7);
+						element->InputCreate(misfit_weights_s[j],inputs,iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],weight_vector_type,StringToEnumx(misfit_weights_string_s[j]),7);
 					}
 
@@ -210,6 +210,6 @@
 					for(int k=0;k<elements->Size();k++){
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
-						element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j],inputs2,iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),7,SurfaceObservationEnum);
-						element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j],inputs2,iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
+						element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j],inputs,iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),7,SurfaceObservationEnum);
+						element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j],inputs,iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
 
 					}
@@ -282,5 +282,5 @@
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
 
-						element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j],inputs2,iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
+						element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j],inputs,iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),7,WeightsSurfaceObservationEnum);
 
 					}
@@ -365,7 +365,7 @@
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
 
-						element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j],inputs2,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]),7,VxObsEnum);
-							element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j],inputs2,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vyobs_string[j]),7,VyObsEnum);
-						element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j],inputs2,iomodel,cfsurfacelogvel_weights_M[j],cfsurfacelogvel_weights_N[j],weight_vector_type,StringToEnumx(cfsurfacelogvel_weightstring[j]),7,WeightsSurfaceObservationEnum);
+						element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]),7,VxObsEnum);
+							element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j],inputs,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vyobs_string[j]),7,VyObsEnum);
+						element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j],inputs,iomodel,cfsurfacelogvel_weights_M[j],cfsurfacelogvel_weights_N[j],weight_vector_type,StringToEnumx(cfsurfacelogvel_weightstring[j]),7,WeightsSurfaceObservationEnum);
 
 					}
@@ -591,6 +591,6 @@
 				for(int i=0;i<num_cost_functions;i++){
 					cost_function=cost_function_enums[i];
-					if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum);
-					else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum);
+					if(     cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(inputs,elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum);
+					else if(cost_function==SurfaceAbsMisfitEnum)   iomodel->FetchDataToInput(inputs,elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum);
 					else if(cost_function==SurfaceAbsVelMisfitEnum
 							|| cost_function==SurfaceRelVelMisfitEnum
@@ -598,6 +598,6 @@
 							|| cost_function==SurfaceLogVxVyMisfitEnum
 							|| cost_function==SurfaceAverageVelMisfitEnum){
-						iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum);
-						if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum);
+						iomodel->FetchDataToInput(inputs,elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum);
+						if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs,elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum);
 					}
 				}
@@ -608,5 +608,5 @@
 					for(int k=0;k<elements->Size();k++){
 						Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k));
-						element->DatasetInputCreate(cost_functions_weights[j],cost_functions_weights_M[j],cost_functions_weights_N[j],cost_function_enums,num_cost_functions,inputs2,iomodel,InversionCostFunctionsCoefficientsEnum);
+						element->DatasetInputCreate(cost_functions_weights[j],cost_functions_weights_M[j],cost_functions_weights_N[j],cost_function_enums,num_cost_functions,inputs,iomodel,InversionCostFunctionsCoefficientsEnum);
 					}
 					output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_cost_functions,cost_function_enums));
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp	(revision 25379)
@@ -9,5 +9,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsAndMaterialsDakota(Elements* elements,Inputs2* inputs2,Materials* materials, IoModel* iomodel){
+void	UpdateElementsAndMaterialsDakota(Elements* elements,Inputs* inputs,Materials* materials, IoModel* iomodel){
 
 	/*recover parameters: */
@@ -15,4 +15,4 @@
 	iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota");
 
-	if(dakota_analysis) iomodel->FetchDataToInput(inputs2,elements,"md.geometry.hydrostatic_ratio",GeometryHydrostaticRatioEnum,0.);
+	if(dakota_analysis) iomodel->FetchDataToInput(inputs,elements,"md.geometry.hydrostatic_ratio",GeometryHydrostaticRatioEnum,0.);
 }
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp	(revision 25379)
@@ -13,5 +13,5 @@
 #include "./ModelProcessorx.h"
 
-void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,Inputs2** pinputs2,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_enum_list){
+void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,Inputs** pinputs,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_enum_list){
 	_assert_(nummodels>0);
 
@@ -43,10 +43,10 @@
 	CreateParameters(parameters,iomodel,rootpath,toolkitfile,solution_enum);
 
-	/*Should move to CreateInputs2*/
-	Inputs2 *inputs2 = new Inputs2(elements->Size(),vertices->Size());
-	if (iomodel->domaintype != Domain3DsurfaceEnum) iomodel->FetchDataToInput(inputs2,elements,"md.mesh.scale_factor",MeshScaleFactorEnum,1.);
+	/*Should move to CreateInputs*/
+	Inputs *inputs = new Inputs(elements->Size(),vertices->Size());
+	if (iomodel->domaintype != Domain3DsurfaceEnum) iomodel->FetchDataToInput(inputs,elements,"md.mesh.scale_factor",MeshScaleFactorEnum,1.);
 
 	/*Can now do Materials since we have created Inputs*/
-	CreateMaterials(elements,inputs2,materials,iomodel,nummodels);
+	CreateMaterials(elements,inputs,materials,iomodel,nummodels);
 
 	/*Update datasets based on each analysis (and add nodes, constrains and loads)*/
@@ -60,5 +60,5 @@
 		analysis->UpdateParameters(parameters,iomodel,solution_enum,analysis_enum);
 		analysis->CreateNodes(nodes[i],iomodel);
-		analysis->UpdateElements(elements,inputs2,iomodel,i,analysis_enum);
+		analysis->UpdateElements(elements,inputs,iomodel,i,analysis_enum);
 		analysis->CreateConstraints(constraints[i],iomodel);
 		analysis->CreateLoads(loads[i],iomodel);
@@ -76,14 +76,14 @@
 	/*Solution specific updates*/
 	if(VerboseMProcessor()) _printf0_("   updating elements and materials for control parameters" << "\n");
-	UpdateElementsAndMaterialsControl(elements,parameters,inputs2,materials,iomodel);
+	UpdateElementsAndMaterialsControl(elements,parameters,inputs,materials,iomodel);
 	#ifdef _HAVE_DAKOTA_
 	if(VerboseMProcessor()) _printf0_("   updating elements and materials for uncertainty quantification" << "\n");
-	UpdateElementsAndMaterialsDakota(elements,inputs2,materials,iomodel);
+	UpdateElementsAndMaterialsDakota(elements,inputs,materials,iomodel);
 	#endif
-	if(solution_enum==TransientSolutionEnum) UpdateElementsTransient(elements,parameters,inputs2,iomodel);
+	if(solution_enum==TransientSolutionEnum) UpdateElementsTransient(elements,parameters,inputs,iomodel);
 
 	/*Output definitions dataset: */
 	if(VerboseMProcessor()) _printf0_("   creating output definitions" << "\n");
-	CreateOutputDefinitions(elements,parameters,inputs2,iomodel);
+	CreateOutputDefinitions(elements,parameters,inputs,iomodel);
 
 	/* Sort datasets:
@@ -103,5 +103,5 @@
 	*ploads       = loads;
 	*pparameters  = parameters;
-	*pinputs2     = inputs2;
+	*pinputs     = inputs;
 
 	if(VerboseMProcessor()) _printf0_("   done with model processor \n");
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h	(revision 25379)
@@ -9,9 +9,9 @@
 #include "../../analyses/analyses.h"
 
-void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,Inputs2** pinputs2,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
+void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,Inputs** pinputs,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);
 
 /*Creation of fem datasets: general drivers*/
 void CreateElements(Elements* elements,IoModel* iomodel,int nummodels);
-void CreateMaterials(Elements* elements,Inputs2* inputs2,Materials* materials,IoModel* iomodel,int nummodels);
+void CreateMaterials(Elements* elements,Inputs* inputs,Materials* materials,IoModel* iomodel,int nummodels);
 void CreateVertices(Elements* elements,Vertices* vertices,IoModel* iomodel,int solution_type,bool isamr=false);
 void CreateParameters(Parameters*parameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type);
@@ -19,9 +19,9 @@
 void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type);
 void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath);
-void CreateOutputDefinitions(Elements* elements, Parameters* parameters,Inputs2* inputs2,IoModel* iomodel);
-void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel);
-void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel);
-void UpdateElementsAndMaterialsDakota(Elements* elements,Inputs2* inputs2,Materials* materials, IoModel* iomodel);
-void UpdateElementsTransient(Elements* elements,Parameters* parameters,Inputs2* inputs2,IoModel* iomodel);
+void CreateOutputDefinitions(Elements* elements, Parameters* parameters,Inputs* inputs,IoModel* iomodel);
+void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Inputs* inputs,Materials* materials, IoModel* iomodel);
+void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Inputs* inputs,Materials* materials, IoModel* iomodel);
+void UpdateElementsAndMaterialsDakota(Elements* elements,Inputs* inputs,Materials* materials, IoModel* iomodel);
+void UpdateElementsTransient(Elements* elements,Parameters* parameters,Inputs* inputs,IoModel* iomodel);
 void CreateNodes(Nodes*nodes, IoModel* iomodel,int analysis,int finite_element,bool isamr=false,int approximation=NoneApproximationEnum,int* approximations=NULL);
 
Index: /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp	(revision 25379)
@@ -9,5 +9,5 @@
 #include "../ModelProcessorx.h"
 
-void	UpdateElementsTransient(Elements* elements, Parameters* parameters,Inputs2* inputs2,IoModel* iomodel){
+void	UpdateElementsTransient(Elements* elements, Parameters* parameters,Inputs* inputs,IoModel* iomodel){
 
 	/*FIXME: this should go into parameterization update*/
@@ -17,5 +17,5 @@
 
 	if(isgroundingline){
-		iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum);
+		iomodel->FetchDataToInput(inputs,elements,"md.geometry.bed",BedEnum);
 	}
 }
Index: /issm/trunk-jpl/src/c/modules/RheologyBAbsGradientx/RheologyBAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/RheologyBAbsGradientx/RheologyBAbsGradientx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/RheologyBAbsGradientx/RheologyBAbsGradientx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void RheologyBAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -54,6 +54,6 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* rheologyb_input=element->GetInput2(MaterialsRheologyBEnum);                  _assert_(rheologyb_input);
+	DatasetInput* weights_input=element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* rheologyb_input=element->GetInput(MaterialsRheologyBEnum);                  _assert_(rheologyb_input);
 
 	/* Start  looping on the number of gaussian points: */
@@ -125,7 +125,7 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* rheologyb_input=element->GetInput2(MaterialsRheologyBbarEnum);            _assert_(rheologyb_input);
-	Input2* rheologyb0_input=element->GetInput2(RheologyBInitialguessEnum);           _assert_(rheologyb0_input);
+	DatasetInput* weights_input=element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* rheologyb_input=element->GetInput(MaterialsRheologyBbarEnum);            _assert_(rheologyb_input);
+	Input* rheologyb0_input=element->GetInput(RheologyBInitialguessEnum);           _assert_(rheologyb0_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void RheologyBbarAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -60,6 +60,6 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* rheologyb_input=basalelement->GetInput2(MaterialsRheologyBbarEnum);                  _assert_(rheologyb_input);
+	DatasetInput* weights_input=basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* rheologyb_input=basalelement->GetInput(MaterialsRheologyBbarEnum);                  _assert_(rheologyb_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 25379)
@@ -27,5 +27,5 @@
 			case TaylorHoodEnum:case XTaylorHoodEnum:case LATaylorHoodEnum:
 			case CrouzeixRaviartEnum:case LACrouzeixRaviartEnum:case OneLayerP4zEnum:{
-				Input2* input=element->GetInput2(IceMaskNodeActivationEnum);
+				Input* input=element->GetInput(IceMaskNodeActivationEnum);
 				if(!input) _error_("Input " << EnumToStringx(IceMaskNodeActivationEnum) << " not found in element");
 
Index: /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void SurfaceAbsVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -60,12 +60,12 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input     =topelement->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vxobs_input  =topelement->GetInput2(InversionVxObsEnum);                     _assert_(vxobs_input);
-	Input2* vy_input     = NULL;
-	Input2* vyobs_input  = NULL;
+	DatasetInput* weights_input=topelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+	Input* vy_input     = NULL;
+	Input* vyobs_input  = NULL;
 	if(numcomponents==2){
-		vy_input    =topelement->GetInput2(VyEnum);              _assert_(vy_input);
-		vyobs_input =topelement->GetInput2(InversionVyObsEnum);  _assert_(vyobs_input);
+		vy_input    =topelement->GetInput(VyEnum);              _assert_(vy_input);
+		vyobs_input =topelement->GetInput(InversionVyObsEnum);  _assert_(vyobs_input);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 25379)
@@ -8,5 +8,5 @@
 #include "../../toolkits/toolkits.h"
 #include "../SurfaceAreax/SurfaceAreax.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel){
@@ -67,13 +67,13 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* S_input      = topelement->GetInput2(SurfaceAreaEnum);     _assert_(S_input);
-	Input2* vx_input     = topelement->GetInput2(VxEnum);              _assert_(vx_input);
-	Input2* vxobs_input  = topelement->GetInput2(InversionVxObsEnum);  _assert_(vxobs_input);
-	Input2* vy_input     = NULL;
-	Input2* vyobs_input  = NULL;
+	DatasetInput* weights_input=topelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* S_input      = topelement->GetInput(SurfaceAreaEnum);     _assert_(S_input);
+	Input* vx_input     = topelement->GetInput(VxEnum);              _assert_(vx_input);
+	Input* vxobs_input  = topelement->GetInput(InversionVxObsEnum);  _assert_(vxobs_input);
+	Input* vy_input     = NULL;
+	Input* vyobs_input  = NULL;
 	if(numcomponents==2){
-		vy_input    =topelement->GetInput2(VyEnum);              _assert_(vy_input);
-		vyobs_input =topelement->GetInput2(InversionVyObsEnum);  _assert_(vyobs_input);
+		vy_input    =topelement->GetInput(VyEnum);              _assert_(vy_input);
+		vyobs_input =topelement->GetInput(InversionVyObsEnum);  _assert_(vyobs_input);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 25379)
@@ -6,5 +6,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -62,12 +62,12 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input     =topelement->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vxobs_input  =topelement->GetInput2(InversionVxObsEnum);                     _assert_(vxobs_input);
-	Input2* vy_input     = NULL;
-	Input2* vyobs_input  = NULL;
+	DatasetInput* weights_input=topelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+	Input* vy_input     = NULL;
+	Input* vyobs_input  = NULL;
 	if(numcomponents==2){
-		vy_input    =topelement->GetInput2(VyEnum);              _assert_(vy_input);
-		vyobs_input =topelement->GetInput2(InversionVyObsEnum);  _assert_(vyobs_input);
+		vy_input    =topelement->GetInput(VyEnum);              _assert_(vy_input);
+		vyobs_input =topelement->GetInput(InversionVyObsEnum);  _assert_(vyobs_input);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void SurfaceLogVxVyMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -62,12 +62,12 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input     =topelement->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vxobs_input  =topelement->GetInput2(InversionVxObsEnum);                     _assert_(vxobs_input);
-	Input2* vy_input     = NULL;
-	Input2* vyobs_input  = NULL;
+	DatasetInput* weights_input=topelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+	Input* vy_input     = NULL;
+	Input* vyobs_input  = NULL;
 	if(numcomponents==2){
-		vy_input    =topelement->GetInput2(VyEnum);              _assert_(vy_input);
-		vyobs_input =topelement->GetInput2(InversionVyObsEnum);  _assert_(vyobs_input);
+		vy_input    =topelement->GetInput(VyEnum);              _assert_(vy_input);
+		vyobs_input =topelement->GetInput(InversionVyObsEnum);  _assert_(vyobs_input);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../toolkits/toolkits.h"
 #include "../modules.h"
-#include "../../classes/Inputs2/TransientInput2.h"
+#include "../../classes/Inputs/TransientInput.h"
 
 const double Pi = 3.141592653589793;
@@ -65,5 +65,5 @@
 			if (isclimatology){
 				//If this is a climatology, we need to repeat the forcing after the final time
-				TransientInput2* Ta_input_tr  = element->inputs2->GetTransientInput(SmbTaEnum);    _assert_(Ta_input_tr);
+				TransientInput* Ta_input_tr  = element->inputs->GetTransientInput(SmbTaEnum);    _assert_(Ta_input_tr);
 
 				/*Get temperature climatology value*/
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../toolkits/toolkits.h"
 #include "../modules.h"
-#include "../../classes/Inputs2/TransientInput2.h"
+#include "../../classes/Inputs/TransientInput.h"
 
 void SmbForcingx(FemModel* femmodel){/*{{{*/
@@ -29,9 +29,9 @@
 			/*FIXME: this is wrong, should be done at the ElementUpdate step of analysis, not here!*/
 			InputDuplicatex(femmodel,SmbMassBalanceEnum,SmbMassBalanceClimateEnum);
-			femmodel->inputs2->DeleteInput(SmbMassBalanceEnum);
+			femmodel->inputs->DeleteInput(SmbMassBalanceEnum);
 		}
 
 		/*If this is a climatology, we need to repeat the forcing after the final time*/
-		TransientInput2* smb_input=femmodel->inputs2->GetTransientInput(SmbMassBalanceClimateEnum); _assert_(smb_input);
+		TransientInput* smb_input=femmodel->inputs->GetTransientInput(SmbMassBalanceClimateEnum); _assert_(smb_input);
 
 		/*Get accumulation climatology value*/
@@ -62,5 +62,5 @@
 
 			/*Add input to element and Free memory*/
-			element->AddInput2(SmbMassBalanceEnum,smb,P1Enum);
+			element->AddInput(SmbMassBalanceEnum,smb,P1Enum);
 			xDelete<IssmDouble>(smb);
 		}
@@ -121,5 +121,5 @@
 
 		/*Add input to element and Free memory*/
-		element->AddInput2(SmbMassBalanceEnum,smb,P1Enum);
+		element->AddInput(SmbMassBalanceEnum,smb,P1Enum);
 		xDelete<IssmDouble>(Href);
 		xDelete<IssmDouble>(Smbref);
@@ -185,5 +185,5 @@
 
 		/*Add input to element and Free memory*/
-		element->AddInput2(SmbMassBalanceEnum,smb,P1Enum);
+		element->AddInput(SmbMassBalanceEnum,smb,P1Enum);
 		xDelete<IssmDouble>(ela);
 		xDelete<IssmDouble>(b_pos);
@@ -395,5 +395,5 @@
 
 		/*Add input to element and Free memory*/
-		element->AddInput2(SmbMassBalanceEnum,smblist,P1Enum);
+		element->AddInput(SmbMassBalanceEnum,smblist,P1Enum);
 		xDelete<IssmDouble>(surfacelist);
 		xDelete<IssmDouble>(smblistref);
@@ -437,7 +437,7 @@
 
 			//If this is a climatology, we need to repeat the forcing after the final time
-			TransientInput2* acc_input    = element->inputs2->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input);
-			TransientInput2* evap_input   = element->inputs2->GetTransientInput(SmbEvaporationEnum);  _assert_(evap_input);
-			TransientInput2* runoff_input = element->inputs2->GetTransientInput(SmbRunoffEnum);       _assert_(runoff_input);
+			TransientInput* acc_input    = element->inputs->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input);
+			TransientInput* evap_input   = element->inputs->GetTransientInput(SmbEvaporationEnum);  _assert_(evap_input);
+			TransientInput* runoff_input = element->inputs->GetTransientInput(SmbRunoffEnum);       _assert_(runoff_input);
 
 			//Get accumulation climatology value
@@ -493,5 +493,5 @@
 
 		/*Add input to element and Free memory*/
-		element->AddInput2(SmbMassBalanceEnum,smb,P1Enum);
+		element->AddInput(SmbMassBalanceEnum,smb,P1Enum);
 		xDelete<IssmDouble>(acc);
 		xDelete<IssmDouble>(evap);
@@ -537,8 +537,8 @@
 
 			//If this is a climatology, we need to repeat the forcing after the final time
-			TransientInput2* acc_input      = element->inputs2->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input);
-			TransientInput2* evap_input     = element->inputs2->GetTransientInput(SmbEvaporationEnum);  _assert_(evap_input);
-			TransientInput2* melt_input     = element->inputs2->GetTransientInput(SmbMeltEnum);         _assert_(melt_input);
-			TransientInput2* refreeze_input = element->inputs2->GetTransientInput(SmbRefreezeEnum);     _assert_(refreeze_input);
+			TransientInput* acc_input      = element->inputs->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input);
+			TransientInput* evap_input     = element->inputs->GetTransientInput(SmbEvaporationEnum);  _assert_(evap_input);
+			TransientInput* melt_input     = element->inputs->GetTransientInput(SmbMeltEnum);         _assert_(melt_input);
+			TransientInput* refreeze_input = element->inputs->GetTransientInput(SmbRefreezeEnum);     _assert_(refreeze_input);
 
 			//Get accumulation climatology value
@@ -609,5 +609,5 @@
 
 		/*Add input to element and Free memory*/
-		element->AddInput2(SmbMassBalanceEnum,smb,P1Enum);
+		element->AddInput(SmbMassBalanceEnum,smb,P1Enum);
 		xDelete<IssmDouble>(acc);
 		xDelete<IssmDouble>(evap);
Index: /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -62,12 +62,12 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* vx_input     =topelement->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vxobs_input  =topelement->GetInput2(InversionVxObsEnum);                     _assert_(vxobs_input);
-	Input2* vy_input     = NULL;
-	Input2* vyobs_input  = NULL;
+	DatasetInput* weights_input=topelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* vx_input     =topelement->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vxobs_input  =topelement->GetInput(InversionVxObsEnum);                     _assert_(vxobs_input);
+	Input* vy_input     = NULL;
+	Input* vyobs_input  = NULL;
 	if(numcomponents==2){
-		vy_input    =topelement->GetInput2(VyEnum);              _assert_(vy_input);
-		vyobs_input =topelement->GetInput2(InversionVyObsEnum);  _assert_(vyobs_input);
+		vy_input    =topelement->GetInput(VyEnum);              _assert_(vy_input);
+		vyobs_input =topelement->GetInput(InversionVyObsEnum);  _assert_(vyobs_input);
 	}
 
Index: /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void ThicknessAbsMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -44,7 +44,7 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input     =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* thickness_input   =element->GetInput2(ThicknessEnum);                          _assert_(thickness_input);
-	Input2* thicknessobs_input=element->GetInput2(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
+	DatasetInput* weights_input     =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* thickness_input   =element->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+	Input* thicknessobs_input=element->GetInput(InversionThicknessObsEnum);              _assert_(thicknessobs_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void ThicknessAcrossGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -46,8 +46,8 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input   =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* thickness_input =element->GetInput2(ThicknessEnum);                          _assert_(thickness_input);
-	Input2* vx_input        =element->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vy_input        =element->GetInput2(VyEnum);                                 _assert_(vy_input);
+	DatasetInput* weights_input   =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* thickness_input =element->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+	Input* vx_input        =element->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vy_input        =element->GetInput(VyEnum);                                 _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 25379)
@@ -7,5 +7,5 @@
 #include "../../shared/shared.h"
 #include "../../toolkits/toolkits.h"
-#include "../../classes/Inputs2/DatasetInput2.h"
+#include "../../classes/Inputs/DatasetInput.h"
 
 void ThicknessAlongGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){
@@ -46,8 +46,8 @@
 
 	/*Retrieve all inputs we will be needing: */
-	DatasetInput2* weights_input   =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
-	Input2* thickness_input =element->GetInput2(ThicknessEnum);                          _assert_(thickness_input);
-	Input2* vx_input        =element->GetInput2(VxEnum);                                 _assert_(vx_input);
-	Input2* vy_input        =element->GetInput2(VyEnum);                                 _assert_(vy_input);
+	DatasetInput* weights_input   =element->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);
+	Input* thickness_input =element->GetInput(ThicknessEnum);                          _assert_(thickness_input);
+	Input* vx_input        =element->GetInput(VxEnum);                                 _assert_(vx_input);
+	Input* vy_input        =element->GetInput(VyEnum);                                 _assert_(vy_input);
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25378)
+++ /issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 25379)
@@ -996,7 +996,6 @@
 syn keyword cConstant BoolExternalResultEnum
 syn keyword cConstant BoolInputEnum
-syn keyword cConstant BoolInput2Enum
-syn keyword cConstant IntInput2Enum
-syn keyword cConstant DoubleInput2Enum
+syn keyword cConstant IntInputEnum
+syn keyword cConstant DoubleInputEnum
 syn keyword cConstant BoolParamEnum
 syn keyword cConstant BoundaryEnum
@@ -1019,5 +1018,4 @@
 syn keyword cConstant ContoursEnum
 syn keyword cConstant ControlInputEnum
-syn keyword cConstant ControlInput2Enum
 syn keyword cConstant ControlInputGradEnum
 syn keyword cConstant ControlInputMaxsEnum
@@ -1032,5 +1030,4 @@
 syn keyword cConstant DataSetParamEnum
 syn keyword cConstant DatasetInputEnum
-syn keyword cConstant DatasetInput2Enum
 syn keyword cConstant DefaultAnalysisEnum
 syn keyword cConstant DefaultCalvingEnum
@@ -1042,7 +1039,6 @@
 syn keyword cConstant Domain3DsurfaceEnum
 syn keyword cConstant DoubleArrayInputEnum
-syn keyword cConstant ArrayInput2Enum
+syn keyword cConstant ArrayInputEnum
 syn keyword cConstant DoubleExternalResultEnum
-syn keyword cConstant DoubleInputEnum
 syn keyword cConstant DoubleMatArrayParamEnum
 syn keyword cConstant DoubleMatExternalResultEnum
@@ -1122,14 +1118,10 @@
 syn keyword cConstant IndexedEnum
 syn keyword cConstant IntExternalResultEnum
-syn keyword cConstant IntInputEnum
-syn keyword cConstant ElementInput2Enum
-syn keyword cConstant SegInput2Enum
-syn keyword cConstant TriaInput2Enum
-syn keyword cConstant PentaInput2Enum
+syn keyword cConstant ElementInputEnum
 syn keyword cConstant IntMatExternalResultEnum
 syn keyword cConstant IntMatParamEnum
 syn keyword cConstant IntParamEnum
 syn keyword cConstant IntVecParamEnum
-syn keyword cConstant Inputs2Enum
+syn keyword cConstant InputsEnum
 syn keyword cConstant InternalEnum
 syn keyword cConstant IntersectEnum
@@ -1316,5 +1308,4 @@
 syn keyword cConstant TransientArrayParamEnum
 syn keyword cConstant TransientInputEnum
-syn keyword cConstant TransientInput2Enum
 syn keyword cConstant TransientParamEnum
 syn keyword cConstant TransientSolutionEnum
@@ -1356,6 +1347,6 @@
 syn keyword cType AdaptiveMeshRefinement
 syn keyword cType AmrBamg
-syn keyword cType ArrayInput2
-syn keyword cType BoolInput2
+syn keyword cType ArrayInput
+syn keyword cType BoolInput
 syn keyword cType BoolParam
 syn keyword cType Cfdragcoeffabsgrad
@@ -1368,11 +1359,11 @@
 syn keyword cType Contour
 syn keyword cType Contours
-syn keyword cType ControlInput2
+syn keyword cType ControlInput
 syn keyword cType Covertree
-syn keyword cType DatasetInput2
+syn keyword cType DatasetInput
 syn keyword cType DataSetParam
 syn keyword cType Definition
 syn keyword cType DependentObject
-syn keyword cType DoubleInput2
+syn keyword cType DoubleInput
 syn keyword cType DoubleMatArrayParam
 syn keyword cType DoubleMatParam
@@ -1382,5 +1373,5 @@
 syn keyword cType Element
 syn keyword cType ElementHook
-syn keyword cType ElementInput2
+syn keyword cType ElementInput
 syn keyword cType ElementMatrix
 syn keyword cType Elements
@@ -1403,7 +1394,7 @@
 syn keyword cType GiaDeflectionCoreArgs
 syn keyword cType Hook
-syn keyword cType Input2
-syn keyword cType Inputs2
-syn keyword cType IntInput2
+syn keyword cType Input
+syn keyword cType Inputs
+syn keyword cType IntInput
 syn keyword cType IntMatParam
 syn keyword cType IntParam
@@ -1443,5 +1434,5 @@
 syn keyword cType Penpair
 syn keyword cType Penta
-syn keyword cType PentaInput2
+syn keyword cType PentaInput
 syn keyword cType PentaRef
 syn keyword cType PowerVariogram
@@ -1455,5 +1446,5 @@
 syn keyword cType SealevelMasks
 syn keyword cType Seg
-syn keyword cType SegInput2
+syn keyword cType SegInput
 syn keyword cType Segment
 syn keyword cType SegRef
@@ -1467,8 +1458,8 @@
 syn keyword cType TetraRef
 syn keyword cType TransientArrayParam
-syn keyword cType TransientInput2
+syn keyword cType TransientInput
 syn keyword cType TransientParam
 syn keyword cType Tria
-syn keyword cType TriaInput2
+syn keyword cType TriaInput
 syn keyword cType TriaRef
 syn keyword cType Variogram
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25378)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 25379)
@@ -995,7 +995,6 @@
 	BoolExternalResultEnum,
 	BoolInputEnum,
-	BoolInput2Enum,
-	IntInput2Enum,
-	DoubleInput2Enum,
+	IntInputEnum,
+	DoubleInputEnum,
 	BoolParamEnum,
 	BoundaryEnum,
@@ -1018,5 +1017,4 @@
 	ContoursEnum,
 	ControlInputEnum,
-	ControlInput2Enum,
 	ControlInputGradEnum,
 	ControlInputMaxsEnum,
@@ -1031,5 +1029,4 @@
 	DataSetParamEnum,
 	DatasetInputEnum,
-	DatasetInput2Enum,
 	DefaultAnalysisEnum,
 	DefaultCalvingEnum,
@@ -1041,7 +1038,6 @@
 	Domain3DsurfaceEnum,
 	DoubleArrayInputEnum,
-	ArrayInput2Enum,
+	ArrayInputEnum,
 	DoubleExternalResultEnum,
-	DoubleInputEnum,
 	DoubleMatArrayParamEnum,
 	DoubleMatExternalResultEnum,
@@ -1121,14 +1117,10 @@
 	IndexedEnum,
 	IntExternalResultEnum,
-	IntInputEnum,
-	ElementInput2Enum,
-	SegInput2Enum,
-	TriaInput2Enum,
-	PentaInput2Enum,
+	ElementInputEnum,
 	IntMatExternalResultEnum,
 	IntMatParamEnum,
 	IntParamEnum,
 	IntVecParamEnum,
-	Inputs2Enum,
+	InputsEnum,
 	InternalEnum,
 	IntersectEnum,
@@ -1315,5 +1307,4 @@
 	TransientArrayParamEnum,
 	TransientInputEnum,
-	TransientInput2Enum,
 	TransientParamEnum,
 	TransientSolutionEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 25379)
@@ -998,7 +998,6 @@
 		case BoolExternalResultEnum : return "BoolExternalResult";
 		case BoolInputEnum : return "BoolInput";
-		case BoolInput2Enum : return "BoolInput2";
-		case IntInput2Enum : return "IntInput2";
-		case DoubleInput2Enum : return "DoubleInput2";
+		case IntInputEnum : return "IntInput";
+		case DoubleInputEnum : return "DoubleInput";
 		case BoolParamEnum : return "BoolParam";
 		case BoundaryEnum : return "Boundary";
@@ -1021,5 +1020,4 @@
 		case ContoursEnum : return "Contours";
 		case ControlInputEnum : return "ControlInput";
-		case ControlInput2Enum : return "ControlInput2";
 		case ControlInputGradEnum : return "ControlInputGrad";
 		case ControlInputMaxsEnum : return "ControlInputMaxs";
@@ -1034,5 +1032,4 @@
 		case DataSetParamEnum : return "DataSetParam";
 		case DatasetInputEnum : return "DatasetInput";
-		case DatasetInput2Enum : return "DatasetInput2";
 		case DefaultAnalysisEnum : return "DefaultAnalysis";
 		case DefaultCalvingEnum : return "DefaultCalving";
@@ -1044,7 +1041,6 @@
 		case Domain3DsurfaceEnum : return "Domain3Dsurface";
 		case DoubleArrayInputEnum : return "DoubleArrayInput";
-		case ArrayInput2Enum : return "ArrayInput2";
+		case ArrayInputEnum : return "ArrayInput";
 		case DoubleExternalResultEnum : return "DoubleExternalResult";
-		case DoubleInputEnum : return "DoubleInput";
 		case DoubleMatArrayParamEnum : return "DoubleMatArrayParam";
 		case DoubleMatExternalResultEnum : return "DoubleMatExternalResult";
@@ -1124,14 +1120,10 @@
 		case IndexedEnum : return "Indexed";
 		case IntExternalResultEnum : return "IntExternalResult";
-		case IntInputEnum : return "IntInput";
-		case ElementInput2Enum : return "ElementInput2";
-		case SegInput2Enum : return "SegInput2";
-		case TriaInput2Enum : return "TriaInput2";
-		case PentaInput2Enum : return "PentaInput2";
+		case ElementInputEnum : return "ElementInput";
 		case IntMatExternalResultEnum : return "IntMatExternalResult";
 		case IntMatParamEnum : return "IntMatParam";
 		case IntParamEnum : return "IntParam";
 		case IntVecParamEnum : return "IntVecParam";
-		case Inputs2Enum : return "Inputs2";
+		case InputsEnum : return "Inputs";
 		case InternalEnum : return "Internal";
 		case IntersectEnum : return "Intersect";
@@ -1318,5 +1310,4 @@
 		case TransientArrayParamEnum : return "TransientArrayParam";
 		case TransientInputEnum : return "TransientInput";
-		case TransientInput2Enum : return "TransientInput2";
 		case TransientParamEnum : return "TransientParam";
 		case TransientSolutionEnum : return "TransientSolution";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25378)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 25379)
@@ -629,9 +629,9 @@
 	      else if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum;
 	      else if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum;
-	      else if (strcmp(name,"HydrologyDrainageRate")==0) return HydrologyDrainageRateEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum;
+	      if (strcmp(name,"HydrologyDrainageRate")==0) return HydrologyDrainageRateEnum;
+	      else if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum;
 	      else if (strcmp(name,"HydrologyGapHeight")==0) return HydrologyGapHeightEnum;
 	      else if (strcmp(name,"HydrologyHead")==0) return HydrologyHeadEnum;
@@ -752,9 +752,9 @@
 	      else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum;
 	      else if (strcmp(name,"SmbDzTop")==0) return SmbDzTopEnum;
-	      else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
+	      if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum;
+	      else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
 	      else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
 	      else if (strcmp(name,"SmbECDt")==0) return SmbECDtEnum;
@@ -875,9 +875,9 @@
 	      else if (strcmp(name,"Vy")==0) return VyEnum;
 	      else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
-	      else if (strcmp(name,"VyObs")==0) return VyObsEnum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"Vz")==0) return VzEnum;
+	      if (strcmp(name,"VyObs")==0) return VyObsEnum;
+	      else if (strcmp(name,"Vz")==0) return VzEnum;
 	      else if (strcmp(name,"VzFS")==0) return VzFSEnum;
 	      else if (strcmp(name,"VzHO")==0) return VzHOEnum;
@@ -998,9 +998,9 @@
 	      else if (strcmp(name,"AdjointHorizAnalysis")==0) return AdjointHorizAnalysisEnum;
 	      else if (strcmp(name,"AggressiveMigration")==0) return AggressiveMigrationEnum;
-	      else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
+	      if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum;
+	      else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum;
 	      else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
 	      else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
@@ -1022,7 +1022,6 @@
 	      else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
 	      else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
-	      else if (strcmp(name,"BoolInput2")==0) return BoolInput2Enum;
-	      else if (strcmp(name,"IntInput2")==0) return IntInput2Enum;
-	      else if (strcmp(name,"DoubleInput2")==0) return DoubleInput2Enum;
+	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
 	      else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
 	      else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
@@ -1045,5 +1044,4 @@
 	      else if (strcmp(name,"Contours")==0) return ContoursEnum;
 	      else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
-	      else if (strcmp(name,"ControlInput2")==0) return ControlInput2Enum;
 	      else if (strcmp(name,"ControlInputGrad")==0) return ControlInputGradEnum;
 	      else if (strcmp(name,"ControlInputMaxs")==0) return ControlInputMaxsEnum;
@@ -1058,5 +1056,4 @@
 	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
 	      else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
-	      else if (strcmp(name,"DatasetInput2")==0) return DatasetInput2Enum;
 	      else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum;
 	      else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
@@ -1068,7 +1065,6 @@
 	      else if (strcmp(name,"Domain3Dsurface")==0) return Domain3DsurfaceEnum;
 	      else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum;
-	      else if (strcmp(name,"ArrayInput2")==0) return ArrayInput2Enum;
+	      else if (strcmp(name,"ArrayInput")==0) return ArrayInputEnum;
 	      else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
-	      else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
 	      else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
 	      else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
@@ -1122,11 +1118,11 @@
 	      else if (strcmp(name,"Gset")==0) return GsetEnum;
 	      else if (strcmp(name,"Gsl")==0) return GslEnum;
+	      else if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
+	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
+	      else if (strcmp(name,"Hook")==0) return HookEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"HOApproximation")==0) return HOApproximationEnum;
-	      else if (strcmp(name,"HOFSApproximation")==0) return HOFSApproximationEnum;
-	      else if (strcmp(name,"Hook")==0) return HookEnum;
-	      else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
+	      if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
 	      else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
 	      else if (strcmp(name,"HydrologyGlaDSAnalysis")==0) return HydrologyGlaDSAnalysisEnum;
@@ -1151,14 +1147,10 @@
 	      else if (strcmp(name,"Indexed")==0) return IndexedEnum;
 	      else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
-	      else if (strcmp(name,"IntInput")==0) return IntInputEnum;
-	      else if (strcmp(name,"ElementInput2")==0) return ElementInput2Enum;
-	      else if (strcmp(name,"SegInput2")==0) return SegInput2Enum;
-	      else if (strcmp(name,"TriaInput2")==0) return TriaInput2Enum;
-	      else if (strcmp(name,"PentaInput2")==0) return PentaInput2Enum;
+	      else if (strcmp(name,"ElementInput")==0) return ElementInputEnum;
 	      else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum;
 	      else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum;
 	      else if (strcmp(name,"IntParam")==0) return IntParamEnum;
 	      else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum;
-	      else if (strcmp(name,"Inputs2")==0) return Inputs2Enum;
+	      else if (strcmp(name,"Inputs")==0) return InputsEnum;
 	      else if (strcmp(name,"Internal")==0) return InternalEnum;
 	      else if (strcmp(name,"Intersect")==0) return IntersectEnum;
@@ -1245,8 +1237,5 @@
 	      else if (strcmp(name,"P0Array")==0) return P0ArrayEnum;
 	      else if (strcmp(name,"P0DG")==0) return P0DGEnum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"P1DG")==0) return P1DGEnum;
+	      else if (strcmp(name,"P1DG")==0) return P1DGEnum;
 	      else if (strcmp(name,"P1P1")==0) return P1P1Enum;
 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
@@ -1255,5 +1244,8 @@
 	      else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
 	      else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
-	      else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
+         else stage=11;
+   }
+   if(stage==11){
+	      if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
 	      else if (strcmp(name,"P2")==0) return P2Enum;
 	      else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
@@ -1348,5 +1340,4 @@
 	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
 	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
-	      else if (strcmp(name,"TransientInput2")==0) return TransientInput2Enum;
 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
 	      else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
@@ -1368,8 +1359,5 @@
 	      else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum;
 	      else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
-         else stage=12;
-   }
-   if(stage==12){
-	      if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
+	      else if (strcmp(name,"CalvingdevCoeff")==0) return CalvingdevCoeffEnum;
 	      else if (strcmp(name,"DeviatoricStress")==0) return DeviatoricStressEnum;
 	      else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
@@ -1379,5 +1367,8 @@
 	      else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
 	      else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
-	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
+         else stage=12;
+   }
+   if(stage==12){
+	      if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
 	      else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
 	      else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
