Index: /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp
===================================================================
--- /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 9593)
+++ /issm/trunk/src/c/solutions/CorePointerFromSolutionEnum.cpp	(revision 9594)
@@ -71,20 +71,4 @@
 	}
 	
-	/*if control is being run on top of a solution, change core: */
-	if(control_analysis){
-		#ifdef _HAVE_TAO_
-		//solutioncore=&controltao_core;
-		solutioncore=&control_core;
-		#else
-		solutioncore=&control_core;
-		#endif
-	}	
-		
-	if(dakota_analysis){
-		#ifndef _HAVE_DAKOTA_ 
-		_error_(" Dakota not present, cannot do qmu!");
-		#endif
-	}
-
 	/*Assign output pointer:*/
 	_assert_(psolutioncore);
Index: /issm/trunk/src/c/solutions/issm.cpp
===================================================================
--- /issm/trunk/src/c/solutions/issm.cpp	(revision 9593)
+++ /issm/trunk/src/c/solutions/issm.cpp	(revision 9594)
@@ -15,5 +15,6 @@
 	FILE *petscoptionsfid  = NULL;
 	bool  waitonlock       = false;
-	bool  dakota_analysis  = false;
+	bool  dakota_analysis;
+	bool  control_analysis; 
 
 	/*FemModel: */
@@ -87,4 +88,5 @@
 	femmodel->parameters->FindParam(&waitonlock,WaitonlockEnum);
 	femmodel->parameters->FindParam(&dakota_analysis,DakotaAnalysisEnum);
+	femmodel->parameters->FindParam(&control_analysis,ControlAnalysisEnum);
 
 	MPI_Barrier(MPI_COMM_WORLD); finish_init=MPI_Wtime();
@@ -94,6 +96,18 @@
 	_printf_(true,"call computational core:\n");
 	MPI_Barrier(MPI_COMM_WORLD); start_core=MPI_Wtime( );
-	if(dakota_analysis) Dakotax(femmodel);
-	else                solutioncore(femmodel);
+	if(dakota_analysis){
+		Dakotax(femmodel);
+	}
+	else if(control_analysis){
+		#ifdef _HAVE_TAO_
+		//controltao_core(femmodel);
+		control_core(femmodel);
+		#else
+		control_core(femmodel);
+		#endif
+	}
+	else{
+		solutioncore(femmodel);
+	}
 	MPI_Barrier(MPI_COMM_WORLD); finish_core=MPI_Wtime( );
 
Index: /issm/trunk/src/m/solutions/CorePointerFromSolutionEnum.m
===================================================================
--- /issm/trunk/src/m/solutions/CorePointerFromSolutionEnum.m	(revision 9593)
+++ /issm/trunk/src/m/solutions/CorePointerFromSolutionEnum.m	(revision 9594)
@@ -4,7 +4,4 @@
 %   Usage:
 %      [solutioncore]=CorePointerFromSolutionEnum(parameters,solutiontype);
-
-control_analysis=parameters.ControlAnalysis;
-dakota_analysis=parameters.DakotaAnalysis;
 
 switch solutiontype,
@@ -25,5 +22,2 @@
 
 end
-
-%if control being run on top of solution, change core
-if(control_analysis)solutioncore='control_core';end
Index: /issm/trunk/src/m/solutions/control_core.m
===================================================================
--- /issm/trunk/src/m/solutions/control_core.m	(revision 9593)
+++ /issm/trunk/src/m/solutions/control_core.m	(revision 9594)
@@ -28,5 +28,5 @@
 
 	%Get core from solution type
-	solutioncore=CorePointerFromSolutionEnum(solution_type);
+	solutioncore=CorePointerFromSolutionEnum(femmodel.parameters,solution_type);
 	adjointcore=AdjointCorePointerFromSolutionEnum(solution_type);
 
Index: /issm/trunk/src/m/solutions/issm.m
===================================================================
--- /issm/trunk/src/m/solutions/issm.m	(revision 9593)
+++ /issm/trunk/src/m/solutions/issm.m	(revision 9594)
@@ -23,10 +23,12 @@
 	%retrieve parameters
 	dakota_analysis=femmodel.parameters.DakotaAnalysis;
+	control_analysis=femmodel.parameters.ControlAnalysis;
 
 	%compute solution
-
 	issmprintf(VerboseSolution,'%s',['call computational core']);
 	if dakota_analysis,
 		Dakota(femmodel);
+	elseif control_analysis
+		femmodel=control_core(femmodel);
 	else
 		eval(['femmodel=' solutioncore '(femmodel);']);
