diff --git a/minimize.cc b/minimize.cc
index 7380983407860753fee45d2f783401c5d6c17d09..f85e2c992b521fcdefd6be1de4c7a641f2471c12 100644
--- a/minimize.cc
+++ b/minimize.cc
@@ -171,7 +171,7 @@ ReturnMatrix gradient(const ColumnVector& x, const EvalFunction& func, float h,i
   return deriv;
 }
 
-ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, float h,int errorord)
+ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags, float h,int errorord)
 { //evaluates the hessian of function "eval" at x in parameter space
   
   //errorord=4 requires something like 8n^2-3n evaluations
@@ -191,7 +191,7 @@ ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, float h,in
 }
 
 
-void minsearch(ColumnVector& x, const EvalFunction& func){
+void minsearch(ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags){
   //perform generic function minimization without gradient info
   int n=x.Nrows(), maxiter=200*n,iter=0;
   int func_evals=0;
@@ -344,11 +344,10 @@ void minsearch(ColumnVector& x, const EvalFunction& func){
   } //closing while
  
   x=v[0].second;
-  
-  
+    
 }
 
-void scg(ColumnVector& x,const gEvalFunction& func, float tol, float eps, int niters){
+void scg(ColumnVector& x,const gEvalFunction& func, ColumnVector& paramstovaryflags, float tol, float eps, int niters){
   
   int fevals=0;
   int gevals=0;
diff --git a/minimize.h b/minimize.h
index 8716aef861d726721902de9dc0d1de3bcf137612..4b64eef651c95d562e8b1b4b1ee387aab50cb5ab 100644
--- a/minimize.h
+++ b/minimize.h
@@ -52,11 +52,11 @@ float diff2(const ColumnVector& x, const EvalFunction& func, int i,int j,float h
 
 ReturnMatrix gradient(const ColumnVector& x, const EvalFunction& func,float h,int errorord=4);// finite diff derivative vector 
 
-ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func,float h,int errorord=4);// finite diff hessian
+ReturnMatrix hessian(const ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags,float h,int errorord=4);// finite diff hessian
 
-void minsearch(ColumnVector& x, const EvalFunction& func);
+void minsearch(ColumnVector& x, const EvalFunction& func, ColumnVector& paramstovaryflags);
 
-void scg(ColumnVector& x, const gEvalFunction& func, float tol = 0.0000001, float eps=1e-16, int niters=100);
+void scg(ColumnVector& x, const gEvalFunction& func, ColumnVector& paramstovaryflags, float tol = 0.0000001, float eps=1e-16, int niters=100);
 
 class EvalFunction
 {//Function where gradient is not analytic (or you are too lazy to work it out) (required for fminsearch)
@@ -67,7 +67,14 @@ public:
 
   virtual void minimize(ColumnVector& x)
   {
-    minsearch(x,*this);
+    ColumnVector paramstovaryflags(x.Nrows());
+    paramstovaryflags = 1;
+    minsearch(x,*this,paramstovaryflags);
+  }
+
+  virtual void minimize(ColumnVector& x, ColumnVector& paramstovaryflags)
+  {
+    minsearch(x,*this,paramstovaryflags);
   }
 
 private:    
@@ -86,7 +93,14 @@ public:
 
   virtual void minimize(ColumnVector& x)
   {
-    scg(x,*this);
+    ColumnVector paramstovaryflags(x.Nrows());
+    paramstovaryflags = 1;
+    scg(x,*this,paramstovaryflags);
+  }
+
+  virtual void minimize(ColumnVector& x, ColumnVector& paramstovaryflags)
+  {
+    scg(x,*this,paramstovaryflags);
   }
 
 private: