Index: trunk/psModules/src/imcombine/pmSubtractionParams.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionParams.c	(revision 14719)
+++ trunk/psModules/src/imcombine/pmSubtractionParams.c	(revision 14733)
@@ -212,4 +212,7 @@
     for (int i = 0; i < numStamps; i++) {
         pmSubtractionStamp *stamp = stamps->data[i]; // Stamp of interest
+        if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED || stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+            continue;
+        }
         psKernel *input = stamp->input; // Input image of interest
         psImage *copy = psImageCopy(NULL, input->image, PS_TYPE_F32); // Copy of the image
@@ -221,4 +224,7 @@
     for (int i = 0; i < numStamps; i++) {
         pmSubtractionStamp *stamp = stamps->data[i]; // Stamp of interest
+        if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED || stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+            continue;
+        }
         if (!stamp->convolutions) {
             stamp->convolutions = psArrayAlloc(numKernels);
@@ -235,4 +241,7 @@
     for (int i = 0; i < numStamps; i++) {
         pmSubtractionStamp *stamp = stamps->data[i]; // Stamp of interest
+        if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED || stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+            continue;
+        }
         psKernel *weight = stamp->weight; // Weight map for stamp
 
@@ -250,5 +259,10 @@
     for (int i = 0; i < numKernels; i++) {
         for (int j = 0; j < numStamps; j++) {
-            accumulateConvolutions(&sumC->data.F64[i], &sumCC->data.F64[i], stamps->data[j], i, footprint);
+            pmSubtractionStamp *stamp = stamps->data[j]; // Stamp of interest
+            if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED ||
+                stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+                continue;
+            }
+            accumulateConvolutions(&sumC->data.F64[i], &sumCC->data.F64[i], stamp, i, footprint);
         }
     }
@@ -256,7 +270,12 @@
     // Initial chi^2
     double lastChi2 = 0.0;              // Chi^2 from last iteration
-    int numPixels = numStamps * PS_SQR(2 * footprint + 1); // Number of pixels contributing to chi^2
+    int numPixels = 0;                  // Number of pixels contributing to chi^2
     for (int i = 0; i < numStamps; i++) {
-        lastChi2 += initialChi2(inputs->data[i], stamps->data[i], footprint);
+        pmSubtractionStamp *stamp = stamps->data[i]; // Stamp of interest
+        if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED || stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+            continue;
+        }
+        lastChi2 += initialChi2(inputs->data[i], stamp, footprint);
+        numPixels += PS_SQR(2 * footprint + 1);
     }
     lastChi2 /= numPixels;
@@ -282,5 +301,10 @@
 
             for (int j = 0; j < numStamps; j++) {
-                accumulateCross(&sumI, &sumII, &sumIC, stamps->data[j], inputs->data[j], i, footprint);
+                pmSubtractionStamp *stamp = stamps->data[j]; // Stamp of interest
+                if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED ||
+                    stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+                    continue;
+                }
+                accumulateCross(&sumI, &sumII, &sumIC, stamp, inputs->data[j], i, footprint);
             }
 
@@ -291,5 +315,10 @@
             double chi2 = 0.0;          // Chi^2
             for (int j = 0; j < numStamps; j++) {
-                chi2 += accumulateChi2(inputs->data[j], stamps->data[j], i, coeff, bg, footprint);
+                pmSubtractionStamp *stamp = stamps->data[j]; // Stamp of interest
+                if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED ||
+                    stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+                    continue;
+                }
+                chi2 += accumulateChi2(inputs->data[j], stamp, i, coeff, bg, footprint);
             }
 
@@ -321,5 +350,10 @@
         // Remove its contribution, and don't include it in the future.
         for (int j = 0; j < numStamps; j++) {
-            subtractConvolution(inputs->data[j], stamps->data[j], bestIndex, bestCoeff, bestBG, footprint);
+            pmSubtractionStamp *stamp = stamps->data[j]; // Stamp of interest
+            if (stamp->status == PM_SUBTRACTION_STAMP_REJECTED ||
+                stamp->status == PM_SUBTRACTION_STAMP_NONE) {
+                continue;
+            }
+            subtractConvolution(inputs->data[j], stamp, bestIndex, bestCoeff, bestBG, footprint);
         }
 
