Index: trunk/psphot/src/psphotMarkPSF.c
===================================================================
--- trunk/psphot/src/psphotMarkPSF.c	(revision 5058)
+++ trunk/psphot/src/psphotMarkPSF.c	(revision 5672)
@@ -30,9 +30,30 @@
     float nSx, nSy, Chi;
 
-    if (source->modelPSF == NULL) return (false);
+    pmModel *model = source->modelPSF;
 
-    // if object has fitted peak above saturation, label as SATSTAR
+    // do we actually have a valid PSF model?
+    if (model == NULL) return (false);
+
+    // did the model fit fail for one or another reason?
+    switch (model->status) {
+      case PM_MODEL_BADARGS:
+      case PM_MODEL_UNTRIED:
+	source->type = PM_SOURCE_FAIL_FIT_PSF;  // better choice?
+	return false;
+      case PM_MODEL_SUCCESS:
+	break;
+      case PM_MODEL_NONCONVERGE:
+      case PM_MODEL_OFFIMAGE:
+	psLogMsg ("psphot", 5, "PSF fit failed for %f, %f (%d iterations)\n", model->params->data.F32[2], model->params->data.F32[3], model->nIter);
+	source->type = PM_SOURCE_FAIL_FIT_PSF;  // better choice?
+	return false;
+      default:
+	return false;
+    }
+
+    // if the object has fitted peak above saturation, label as SATSTAR
+    // this is a valid PSF object, but ignore the other quality tests
     // remember: fit does not use saturated pixels (masked)
-    if (source->modelPSF->params->data.F32[1] >= SATURATE) {
+    if (model->params->data.F32[1] >= SATURATE) {
 	if (source->type == PM_SOURCE_PSFSTAR) {
 	    psLogMsg ("psphot", 5, "PSFSTAR marked SATSTAR\n");
@@ -41,4 +62,13 @@
 	return (true);
     } 
+
+    // if the object has a fitted peak below 0, the fit did not converge cleanly
+    if (model->params->data.F32[1] < 0) {
+	source->type = PM_SOURCE_FAIL_FIT_PSF;
+	return (false);
+    } 
+
+    // if the source was predicted to be a SATSTAR, but it fitted below saturation, 
+    // make a note to the user
     if (source->type == PM_SOURCE_SATSTAR) {
 	psLogMsg ("psphot", 5, "SATSTAR marked GOODSTAR (fitted peak below saturation)\n");
@@ -46,10 +76,10 @@
     }
 
-    SN  = source->modelPSF->params->data.F32[1]/source->modelPSF->dparams->data.F32[1];
-    SX  = source->modelPSF->params->data.F32[4];
-    SY  = source->modelPSF->params->data.F32[5];
-    dSX = source->modelPSF->dparams->data.F32[4];
-    dSY = source->modelPSF->dparams->data.F32[5];
-    Chi = source->modelPSF->chisq / source->modelPSF->nDOF;
+    SN  = model->params->data.F32[1]/model->dparams->data.F32[1];
+    SX  = model->params->data.F32[4];
+    SY  = model->params->data.F32[5];
+    dSX = model->dparams->data.F32[4];
+    dSY = model->dparams->data.F32[5];
+    Chi = model->chisq / model->nDOF;
 
     // swing of sigma_x,y in sigmas
