Index: /trunk/psphot/src/psphotChoosePSF.c
===================================================================
--- /trunk/psphot/src/psphotChoosePSF.c	(revision 42379)
+++ /trunk/psphot/src/psphotChoosePSF.c	(revision 42380)
@@ -594,9 +594,22 @@
     psVector *psfExtra2 = psVectorAllocEmpty (100, PS_DATA_F32);
 
+    // count how many PSF stars are defined
+    int nPSFstars = 0; // count the number of PSF stars
     for (int i = 0; i < sources->n; i++) {
-
 	pmSource *source = sources->data[i];
-
 	if (!(source->mode & PM_SOURCE_MODE_PSFSTAR)) continue;
+    }
+
+    for (int i = 0; i < sources->n; i++) {
+
+	pmSource *source = sources->data[i];
+
+	// If no sources are PSFSTARs, then let's just use all with S/N > 0.1.
+	// (This can happen if all are supplied)
+	if (nPSFstars) {
+	    if (!(source->mode & PM_SOURCE_MODE_PSFSTAR)) continue;
+	} else {
+	    if (source->psfMagErr > 0.1) continue;
+	}
 
 	float xc = source->peak->xf;
@@ -638,4 +651,10 @@
 	// float fwhmtest = pmPSFtoFWHM(psf, xc, yc);
 	// fprintf (stderr, "fwhm: %f, %f : %f\n", FWHM_MAJOR, FWHM_MINOR, fwhmtest);
+    }
+
+    // XXX should we catch this case and exit immediately? (need to raise an error?)
+    if (0 && !fwhmMajor->n) {
+	psLogMsg ("psphot", PS_LOG_DETAIL, "no stars on the chip to measure PSF FWHM");
+	goto escape;
     }
 
@@ -721,4 +740,17 @@
 
 escape:
+    // failed to measure the PSF stats
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FWHM_MAJ",   PS_META_REPLACE, "PSF FWHM Major axis (mean)",           NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MJ_SG",   PS_META_REPLACE, "PSF FWHM Major axis (sigma)",          NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MJ_LQ",   PS_META_REPLACE, "PSF FWHM Major axis (lower quartile)", NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MJ_UQ",   PS_META_REPLACE, "PSF FWHM Major axis (upper quartile)", NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FWHM_MIN",   PS_META_REPLACE, "PSF FWHM Minor axis (mean)",           NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MN_SG",   PS_META_REPLACE, "PSF FWHM Minor axis (sigma)",          NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MN_LQ",   PS_META_REPLACE, "PSF FWHM Minor axis (lower quartile)", NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "FW_MN_UQ",   PS_META_REPLACE, "PSF FWHM Minor axis (upper quartile)", NAN);
+    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "ANGLE",      PS_META_REPLACE, "PSF angle",                            NAN);
+    psMetadataAddS32 (readout->analysis, PS_LIST_TAIL, "NPSFSTAR",   PS_META_REPLACE, "Number of stars used to make PSF", 0);
+    psMetadataAddBool(readout->analysis, PS_LIST_TAIL, "PSF_OK",     PS_META_REPLACE, "Valid PSF Model?", false);
+
     psFree (fwhmMajor);
     psFree (fwhmMinor);
Index: /trunk/psphot/src/psphotSkyReplace.c
===================================================================
--- /trunk/psphot/src/psphotSkyReplace.c	(revision 42379)
+++ /trunk/psphot/src/psphotSkyReplace.c	(revision 42380)
@@ -4,4 +4,7 @@
 {
     bool status = true;
+
+    fprintf (stdout, "\n");
+    psLogMsg ("psphot", PS_LOG_INFO, "--- psphot Replace Sky ---");
 
     int num = psphotFileruleCount(config, filerule);
