Index: trunk/psModules/src/objects/pmSourceFitModel.c
===================================================================
--- trunk/psModules/src/objects/pmSourceFitModel.c	(revision 29004)
+++ trunk/psModules/src/objects/pmSourceFitModel.c	(revision 31153)
@@ -40,4 +40,5 @@
 #include "pmSourceDiffStats.h"
 #include "pmSource.h"
+#include "pmSourcePhotometry.h"
 #include "pmSourceFitModel.h"
 
@@ -59,4 +60,5 @@
     opt->maxChisqDOF = NAN;
     opt->poissonErrors = true;
+    opt->saveCovariance = false;
 
     return opt;
@@ -231,12 +233,24 @@
         psTrace ("psModules.objects", 4, "%f +/- %f", params->data.F32[i], dparams->data.F32[i]);
     }
+    if (options->saveCovariance) {
+	model->covar = psMemIncrRefCounter(covar);
+    }
+    model->nIter = myMin->iter;
+    model->nPar = nParams;
+
     psTrace ("psModules.objects", 4, "niter: %d, chisq: %f", myMin->iter, myMin->value);
 
     // save the resulting chisq, nDOF, nIter
-    model->chisq = myMin->value;
-    model->nIter = myMin->iter;
-    model->nPix  = y->n;
-    model->nDOF  = y->n - nParams;
-    model->chisqNorm = model->chisq / model->nDOF;
+    // NOTE: if (!options->poissonErrors) chisq will be wrong : recalculate
+    if (options->poissonErrors) {
+	model->chisq = myMin->value;
+	model->nPix  = y->n;
+	model->nDOF  = y->n - model->nPar;
+	model->chisqNorm = model->chisq / model->nDOF;
+    } else {
+	pmSourceChisqUnsubtracted (source, model, maskVal);
+    }
+
+    // set the model success or failure status
     model->flags |= PM_MODEL_STATUS_FITTED;
     if (!fitStatus) model->flags |= PM_MODEL_STATUS_NONCONVERGE;
