Index: trunk/psphot/src/psphotModelTestReadout.c
===================================================================
--- trunk/psphot/src/psphotModelTestReadout.c	(revision 35559)
+++ trunk/psphot/src/psphotModelTestReadout.c	(revision 35769)
@@ -161,4 +161,9 @@
     // get the initial model parameter guess
     pmModel *model = pmSourceModelGuess (source, modelType, maskVal, markVal);
+    if (!model) {
+      fprintf (stderr, "failed to generate model guess\n");
+      exit (2);
+    }
+
     source->modelEXT = model;
 
@@ -186,11 +191,7 @@
 	fprintf (stderr, "guess: %f @ (%f, %f)\n", params[6]*180/M_PI, params[4], params[5]);
     } else {
-	// list model input shape
-	psEllipseShape shape;
-	shape.sx  = 1.4 / model->params->data.F32[4];
-	shape.sy  = 1.4 / model->params->data.F32[5];
-	shape.sxy = model->params->data.F32[6];
-	axes = psEllipseShapeToAxes (shape, 20.0);
-	fprintf (stderr, "guess: %f @ (%f, %f)\n", axes.theta*180/M_PI, axes.major, axes.minor);
+	bool useReff = pmModelUseReff (modelType);
+	pmModelParamsToAxes (&axes, params[PM_PAR_SXX], params[PM_PAR_SXY], params[PM_PAR_SYY], useReff);
+	fprintf (stderr, "guess: %f @ (%f, %f) : %f\n", axes.theta*180/M_PI, axes.major, axes.minor, params[PM_PAR_SXY]);
     }
 
@@ -217,4 +218,12 @@
     fitOptions->covarFactor   = psImageCovarianceFactorForAperture(readout->covariance, 10.0); // Covariance matrix
 
+    bool chisqConvergence = psMetadataLookupBool (&status, recipe, "LMM_FIT_CHISQ_CONVERGENCE"); // Fit tolerance
+    if (!status) chisqConvergence = true;
+    fitOptions->chisqConvergence = chisqConvergence;
+
+    int gainFactorMode = psMetadataLookupS32 (&status, recipe, "LMM_FIT_GAIN_FACTOR_MODE"); // Fit tolerance
+    if (!status) gainFactorMode = 0;
+    fitOptions->gainFactorMode = gainFactorMode;
+
     if (modelType == pmModelClassGetType("PS_MODEL_SERSIC")) {
 	fitOptions->mode = PM_SOURCE_FIT_NO_INDEX;
@@ -231,4 +240,18 @@
 	pmSourceModelGuessPCM (pcm, source, maskVal, markVal);
       }
+
+      // if we provide a test guess value we want to use that value!
+      for (int i = 0; i < nParams; i++) {
+	  if (i == PM_PAR_XPOS) continue;
+	  if (i == PM_PAR_YPOS) continue;
+
+	  char name[32];
+	  sprintf (name, "TEST_FIT_PAR%d", i);
+	  float value = psMetadataLookupF32 (&status, recipe, name);
+	  if (status && isfinite (value)) {
+	      params[i] = value;
+	  }
+      }
+
       pmPCMupdate(pcm, source, fitOptions, model);
       pmSourceFitPCM (pcm, source, fitOptions, maskVal, markVal, psfSize);
@@ -258,4 +281,12 @@
     }
 
+    if (modelType == pmModelClassGetType("PS_MODEL_TRAIL")) {
+	fprintf (stderr, "result: %f @ (%f, %f)\n", params[6]*180/M_PI, params[4], params[5]);
+    } else {
+	bool useReff = pmModelUseReff (modelType);
+	pmModelParamsToAxes (&axes, params[PM_PAR_SXX], params[PM_PAR_SXY], params[PM_PAR_SYY], useReff);
+	fprintf (stderr, "result: %f @ (%f, %f) : %f\n", axes.theta*180/M_PI, axes.major, axes.minor, params[PM_PAR_SXY]);
+    }
+
     // write out
     psphotSaveImage (NULL, source->pixels, "resid.fits");
