Index: /trunk/psphot/src/psphotStackMatchPSFs.c
===================================================================
--- /trunk/psphot/src/psphotStackMatchPSFs.c	(revision 34720)
+++ /trunk/psphot/src/psphotStackMatchPSFs.c	(revision 34721)
@@ -108,16 +108,13 @@
     bool notMatched = psMetadataLookupBool(NULL, readoutOut->analysis, "NOT.PSF.MATCHED");
     if (notMatched) {
-        if (!readoutOut->image) {
-            // our images got freed in the matching process. Recreate them so that they
-            // are available when sources are copied to this readout.
-            readoutOut->image = psImageCopy(NULL, readoutSrc->image, PS_TYPE_F32);
-            if (readoutSrc->variance) {
-                psFree(readoutOut->variance);
-                readoutOut->variance = psImageCopy(NULL, readoutSrc->variance, PS_TYPE_F32);
-            }
-            if (readoutSrc->mask) {
-                psFree(readoutOut->mask);
-                readoutOut->mask = psImageCopy(NULL, readoutSrc->mask, PS_TYPE_IMAGE_MASK);
-            }
+        psFree(readoutOut->image);
+        readoutOut->image = psImageCopy(NULL, readoutSrc->image, PS_TYPE_F32);
+        psFree(readoutOut->variance);
+        if (readoutSrc->variance) {
+            readoutOut->variance = psImageCopy(NULL, readoutSrc->variance, PS_TYPE_F32);
+        }
+        psFree(readoutOut->mask);
+        if (readoutSrc->mask) {
+            readoutOut->mask = psImageCopy(NULL, readoutSrc->mask, PS_TYPE_IMAGE_MASK);
         }
     }
Index: /trunk/psphot/src/psphotStackMatchPSFsUtils.c
===================================================================
--- /trunk/psphot/src/psphotStackMatchPSFsUtils.c	(revision 34720)
+++ /trunk/psphot/src/psphotStackMatchPSFsUtils.c	(revision 34721)
@@ -303,9 +303,14 @@
 	if (!pmSubtractionMatch(NULL, readoutOut, fake, readoutSrc, footprint, stride, regionSize, spacing, threshold, stampSources, stampsName, type, size, order, widthsCopy, orders, inner, ringsOrder, binning, penalty, optimum, optWidths, optOrder, optThresh, iter, rej, normFrac, sysError, skyErr, kernelError, covarFrac, maskVal, maskBad, maskPoor, poorFrac, badFrac, PM_SUBTRACTION_MODE_2)) {
             int errorCode = psErrorCodeLast();
-            if (errorCode == PM_ERR_SMALL_AREA) {
+            if (errorCode == PM_ERR_SMALL_AREA || errorCode == PM_ERR_STAMPS) {
                 // failed to match but, don't fault. Just drop this input from measurements that need the
                 // matched readout.
+                psErrorClear();
                 rejectReadout = true;
-                psLogMsg("psphot", PS_LOG_WARN, "PSF match failed for input %d. Too few pixels.", index);
+                if (errorCode == PM_ERR_SMALL_AREA) {
+                    psLogMsg("psphot", PS_LOG_WARN, "PSF match failed for input %d. Too few pixels.", index);
+                } else if (errorCode == PM_ERR_STAMPS) {
+                    psLogMsg("psphot", PS_LOG_WARN, "PSF match failed for input %d. Failed to find stamps.", index);
+                }
             } else {
                 psError(psErrorCodeLast(), false, "Unable to match images.");
@@ -324,6 +329,8 @@
     
     if (rejectReadout) {
+        psMetadataAddBool(readoutSrc->analysis, PS_LIST_TAIL, "NOT.PSF.MATCHED", PS_META_REPLACE, "", true);
         psMetadataAddBool(readoutOut->analysis, PS_LIST_TAIL, "NOT.PSF.MATCHED", PS_META_REPLACE, "", true);
     } else {
+        psMetadataAddBool(readoutSrc->analysis, PS_LIST_TAIL, "NOT.PSF.MATCHED", PS_META_REPLACE, "", false);
         psMetadataAddBool(readoutOut->analysis, PS_LIST_TAIL, "NOT.PSF.MATCHED", PS_META_REPLACE, "", false);
     }
Index: /trunk/psphot/src/psphotStackReadout.c
===================================================================
--- /trunk/psphot/src/psphotStackReadout.c	(revision 34720)
+++ /trunk/psphot/src/psphotStackReadout.c	(revision 34721)
@@ -409,9 +409,10 @@
             }
         }
+        // mark any inputs that we want to skip the matched apertures for
+        psphotStackSetInputsToSkip(config, view, STACK_CNV, true);
+        psphotStackSetInputsToSkip(config, view, STACK_OUT, true);
         psphotRadialApertures (config, view, STACK_CNV, 0); // entry 0 == unmatched
         psMemDump("extmeas");
 
-        // mark any inputs that we want to skip the matched apertures for
-        psphotStackSetInputsToSkip(config, view, STACK_OUT, true);
 
         int nRadialEntries = psphotStackMatchPSFsEntries(config, view, STACK_OUT);
@@ -439,4 +440,5 @@
         }
     }
+    psphotStackSetInputsToSkip(config, view, STACK_CNV, false);
     psphotStackSetInputsToSkip(config, view, STACK_OUT, false);
 
