Index: /issm/trunk/src/c/objects/Elements/Element.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Element.h	(revision 4969)
+++ /issm/trunk/src/c/objects/Elements/Element.h	(revision 4970)
@@ -71,7 +71,5 @@
 		virtual void   InputScale(int enum_type,double scale_factor)=0;
 		virtual void   GetVectorFromInputs(Vec vector,int NameEnum)=0;
-		virtual void   InputAXPY(int YEnum, double scalar, int XEnum)=0;
 		virtual void   InputControlUpdate(double scalar,bool save_parameter)=0;
-		virtual void   InputControlConstrain(int control_type,double cm_min, double cm_max)=0;
 		virtual bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
 
Index: /issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 4969)
+++ /issm/trunk/src/c/objects/Elements/Penta.cpp	(revision 4970)
@@ -954,43 +954,4 @@
 }
 /*}}}*/
-/*FUNCTION Penta::InputAXPY{{{1*/
-void  Penta::InputAXPY(int YEnum, double scalar, int XEnum){
-
-	Input* xinput=NULL;
-	Input* yinput=NULL;
-
-	/*Find x and y inputs: */
-	xinput=(Input*)this->inputs->GetInput(XEnum);
-	yinput=(Input*)this->inputs->GetInput(YEnum);
-
-	/*some checks: */
-	if(!xinput || !yinput)ISSMERROR("%s%s%s%s%s"," input ",EnumAsString(XEnum)," or input ",EnumAsString(YEnum)," could not be found!");
-	if(xinput->Enum()!=yinput->Enum())ISSMERROR("%s%s%s%s%s"," input ",EnumAsString(XEnum)," and input ",EnumAsString(YEnum)," are not of the same type!");
-
-	/*Scale: */
-	yinput->AXPY(xinput,scalar);
-
-	/*Move input to Material if required (needed if control method) TO BE IMPROVED*/
-	if (YEnum==RheologyBEnum){
-		this->matice->inputs->AddInput((Input*)yinput->copy());
-	}
-}
-/*}}}*/
-/*FUNCTION Penta::InputControlConstrain{{{1*/
-void  Penta::InputControlConstrain(int control_type, double cm_min, double cm_max){
-
-	Input* input=NULL;
-
-	/*Find input: */
-	input=(Input*)this->inputs->GetInput(control_type);
-	
-	/*Do nothing if we  don't find it: */
-	if(!input) return;
-
-	/*Constrain input using cm_min and cm_max: */
-	input->Constrain(cm_min,cm_max);
-
-}
-/*}}}*/
 /*FUNCTION Penta::InputConvergence{{{1*/
 bool Penta::InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums){
@@ -1187,5 +1148,5 @@
 
 	/*Call inputs method*/
-	inputs->DuplicateInput(original_enum,new_enum);
+	if (IsInput(original_enum)) inputs->DuplicateInput(original_enum,new_enum);
 
 }
@@ -1949,9 +1910,9 @@
 
 		/*Create New Surface: s = (1-rho_ice/rho_water) h*/
-		InputDuplicate(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
+		this->inputs->DuplicateInput(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
 		InputScale(SurfaceEnum,(1-rho_ice/rho_water)); //2: surface = surface * (1-di)
 
 		/*Create New Bed b = -rho_ice/rho_water h*/
-		InputDuplicate(ThicknessEnum,BedEnum);         //1: copy thickness into bed
+		this->inputs->DuplicateInput(ThicknessEnum,BedEnum);         //1: copy thickness into bed
 		InputScale(BedEnum, -rho_ice/rho_water);       //2: bed = bed * (-di)
 	}
@@ -1961,6 +1922,6 @@
 
 		/*The bed does not change, update surface only s = b + h*/
-		InputDuplicate(BedEnum,SurfaceEnum);          //1: copy bed into surface
-		InputAXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
+		this->inputs->DuplicateInput(BedEnum,SurfaceEnum);          //1: copy bed into surface
+		this->inputs->AXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
 	}
 
@@ -5443,4 +5404,7 @@
 				name==VyEnum ||
 				name==VzEnum ||
+				name==VxObsEnum ||
+				name==VyObsEnum ||
+				name==VzObsEnum ||
 				name==TemperatureEnum ||
 				name==ControlParameterEnum ||
Index: /issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Penta.h	(revision 4969)
+++ /issm/trunk/src/c/objects/Elements/Penta.h	(revision 4970)
@@ -86,7 +86,5 @@
 		void   GradjB(Vec gradient);
 		void   GradjDrag(Vec gradient);
-		void   InputAXPY(int YEnum, double scalar, int XEnum);
 		void   InputControlUpdate(double scalar,bool save_parameter);
-		void   InputControlConstrain(int control_type,double cm_min, double cm_max);
 		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
Index: /issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4969)
+++ /issm/trunk/src/c/objects/Elements/Tria.cpp	(revision 4970)
@@ -1218,22 +1218,4 @@
 }
 /*}}}*/
-/*FUNCTION Tria::InputAXPY{{{1*/
-void  Tria::InputAXPY(int YEnum, double scalar, int XEnum){
-
-	Input* xinput=NULL;
-	Input* yinput=NULL;
-
-	/*Find x and y inputs: */
-	xinput=(Input*)this->inputs->GetInput(XEnum);
-	yinput=(Input*)this->inputs->GetInput(YEnum);
-
-	/*some checks: */
-	if(!xinput || !yinput) ISSMERROR("%s%s%s%s%s"," input ",EnumAsString(XEnum)," or input ",EnumAsString(YEnum)," could not be found!");
-
-	/*Scale: */
-	yinput->AXPY(xinput,scalar);
-
-}
-/*}}}*/
 /*FUNCTION Tria::InputControlUpdate{{{1*/
 void  Tria::InputControlUpdate(double scalar,bool save_parameter){
@@ -1289,20 +1271,4 @@
 		ISSMERROR("control type %s not implemented yet",EnumAsString(control_type));
 	}
-
-}
-/*}}}*/
-/*FUNCTION Tria::InputControlConstrain{{{1*/
-void  Tria::InputControlConstrain(int control_type, double cm_min, double cm_max){
-
-	Input* input=NULL;
-
-	/*Find input: */
-	input=(Input*)this->inputs->GetInput(control_type);
-	
-	/*Do nothing if we  don't find it: */
-	if(!input) return;
-
-	/*Constrain input using cm_min and cm_max: */
-	input->Constrain(cm_min,cm_max);
 
 }
@@ -2307,9 +2273,9 @@
 
 		/*Create New Surface: s = (1-rho_ice/rho_water) h*/
-		InputDuplicate(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
+		this->inputs->DuplicateInput(ThicknessEnum,SurfaceEnum);     //1: copy thickness into surface
 		InputScale(SurfaceEnum,(1.0-rho_ice/rho_water)); //2: surface = surface * (1-di)
 
 		/*Create New Bed b = -rho_ice/rho_water h*/
-		InputDuplicate(ThicknessEnum,BedEnum);         //1: copy thickness into bed
+		this->inputs->DuplicateInput(ThicknessEnum,BedEnum);         //1: copy thickness into bed
 		InputScale(BedEnum, -rho_ice/rho_water);       //2: bed = bed * (-di)
 	}
@@ -2319,6 +2285,6 @@
 
 		/*The bed does not change, update surface only s = b + h*/
-		InputDuplicate(BedEnum,SurfaceEnum);          //1: copy bed into surface
-		InputAXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
+		this->inputs->DuplicateInput(BedEnum,SurfaceEnum);          //1: copy bed into surface
+		this->inputs->AXPY(SurfaceEnum,1.0,ThicknessEnum);     //2: surface = surface + 1 * thickness
 	}
 
@@ -6098,4 +6064,6 @@
 				name==VxEnum ||
 				name==VyEnum ||
+				name==VxObsEnum ||
+				name==VyObsEnum ||
 				name==FitEnum ||
 				name==DragCoefficientEnum ||
Index: /issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- /issm/trunk/src/c/objects/Elements/Tria.h	(revision 4969)
+++ /issm/trunk/src/c/objects/Elements/Tria.h	(revision 4970)
@@ -82,7 +82,5 @@
 		void   GradjB(Vec gradient);
 		void   GradjDrag(Vec gradient);
-		void   InputAXPY(int YEnum, double scalar, int XEnum);
 		void   InputControlUpdate(double scalar,bool save_parameter);
-		void   InputControlConstrain(int control_type,double cm_min, double cm_max);
 		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum=ElementsEnum);
