Index: /tags/ipp-20121026/psModules/src/objects/pmSourceIO.c
===================================================================
--- /tags/ipp-20121026/psModules/src/objects/pmSourceIO.c	(revision 34721)
+++ /tags/ipp-20121026/psModules/src/objects/pmSourceIO.c	(revision 34722)
@@ -1028,4 +1028,5 @@
 	if (strcmp (xtension, "BINTABLE")) {
 	    psWarning ("no binary table in extension %s, skipping\n", dataname);
+            psFree(tableHeader);
 	    return false;
 	}
@@ -1242,4 +1243,5 @@
     if (!xtension) psAbort("cannot read table type");
     if (strcmp (xtension, "BINTABLE")) {
+        psFree(tableHeader);
         psWarning ("no binary table in extension %s, skipping\n", xsrcname);
         return false;
@@ -1281,4 +1283,5 @@
     if (strcmp (xtension, "BINTABLE")) {
         psWarning ("no binary table in extension %s, skipping\n", extname);
+        psFree(tableHeader);
         return false;
     }
@@ -1318,4 +1321,5 @@
     if (strcmp (xtension, "BINTABLE")) {
         psWarning ("no binary table in extension %s, skipping\n", extname);
+        psFree(tableHeader);
         return false;
     }
Index: /tags/ipp-20121026/psphot/src/psphotStackMatchPSFs.c
===================================================================
--- /tags/ipp-20121026/psphot/src/psphotStackMatchPSFs.c	(revision 34721)
+++ /tags/ipp-20121026/psphot/src/psphotStackMatchPSFs.c	(revision 34722)
@@ -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: /tags/ipp-20121026/psphot/src/psphotStackMatchPSFsUtils.c
===================================================================
--- /tags/ipp-20121026/psphot/src/psphotStackMatchPSFsUtils.c	(revision 34721)
+++ /tags/ipp-20121026/psphot/src/psphotStackMatchPSFsUtils.c	(revision 34722)
@@ -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: /tags/ipp-20121026/psphot/src/psphotStackReadout.c
===================================================================
--- /tags/ipp-20121026/psphot/src/psphotStackReadout.c	(revision 34721)
+++ /tags/ipp-20121026/psphot/src/psphotStackReadout.c	(revision 34722)
@@ -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);
 
