Index: /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 18649)
+++ /issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp	(revision 18650)
@@ -82,8 +82,8 @@
 	Input* omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);
 	Input* D0_input    = element->GetInput(BalancethicknessD0Enum);
-	//if(!D0_input){
+	if(!D0_input){
 		this->CreateD0(element);
 		D0_input = element->GetInput(BalancethicknessD0Enum); _assert_(D0_input);
-	//}
+	}
 
 	/* Start  looping on the number of gaussian points: */
Index: /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 18649)
+++ /issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp	(revision 18650)
@@ -113,5 +113,15 @@
 	}
 
-	/*Get solution*/
+	/*Constrain solution vector*/
+	IssmDouble  *XL = NULL;
+	IssmDouble  *XU = NULL;
+	GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");
+	GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");
+	if(num_controls!=1) _error_("not supported yet");
+	for(long i=0;i<n;i++){
+		X[i] = X[i]*scaling_factors[0];
+		if(X[i]>XU[i]) X[i]=XU[i];
+		if(X[i]<XL[i]) X[i]=XL[i];
+	}
 	SetControlInputsFromVectorx(femmodel,X);
 	ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,G);
@@ -130,4 +140,6 @@
 	xDelete<double>(X);
 	xDelete<double>(dz);
+	xDelete<double>(XU);
+	xDelete<double>(XL);
 }
 
