Index: trunk/ppStack/src/ppStackLoop.c
===================================================================
--- trunk/ppStack/src/ppStackLoop.c	(revision 19505)
+++ trunk/ppStack/src/ppStackLoop.c	(revision 19532)
@@ -390,4 +390,6 @@
     psVector *inputMask = psVectorAlloc(num, PS_TYPE_U8); // Mask for inputs
     psVectorInit(inputMask, 0);
+    psVector *matchChi2 = psVectorAlloc(num, PS_TYPE_F32); // chi^2 for stamps when matching
+    psVectorInit(matchChi2, NAN);
     for (int i = 0; i < num; i++) {
         psTrace("ppStack", 2, "Convolving input %d of %d to target PSF....\n", i, num);
@@ -402,4 +404,5 @@
             psFree(rng);
             psFree(inputMask);
+            psFree(matchChi2);
             return false;
         }
@@ -419,4 +422,5 @@
             psFree(rng);
             psFree(inputMask);
+            psFree(matchChi2);
             return false;
         }
@@ -425,5 +429,6 @@
         psArray *regions = NULL, *kernels = NULL; // Regions and kernels used in subtraction
         psArray *sources = haveSources ? globalSources : indSources->data[i]; // Sources for matching
-        if (!ppStackMatch(readout, &regions, &kernels, sources, targetPSF, rng, config)) {
+        if (!ppStackMatch(readout, &regions, &kernels, &matchChi2->data.F32[i],
+                          sources, targetPSF, rng, config)) {
             psErrorStackPrint(stderr, "Unable to match image %d --- ignoring.", i);
             inputMask->data.U8[i] = PPSTACK_MASK_MATCH;
@@ -459,4 +464,6 @@
         psFree(cells);
         psFree(inputMask);
+        psFree(inputMask);
+        psFree(matchChi2);
         return false;
     }
@@ -473,5 +480,5 @@
     memDump("preinitial");
 
-    // Stack the convolvd files
+    // Stack the convolved files
     psTrace("ppStack", 1, "Initial stack of convolved images....\n");
     pmReadout *outRO = NULL;            // Output readout
@@ -489,4 +496,5 @@
             psFree(stack);
             psFree(inputMask);
+            psFree(matchChi2);
             psFree(exptimes);
             psFree(cells);
@@ -502,4 +510,5 @@
             psFree(stack);
             psFree(inputMask);
+            psFree(matchChi2);
             psFree(exptimes);
             psFree(cells);
@@ -518,4 +527,5 @@
             psFree(stack);
             psFree(inputMask);
+            psFree(matchChi2);
             psFree(view);
             psFree(outRO);
@@ -546,5 +556,5 @@
         psFree(cellList);
 
-    psFree(cells);
+        psFree(cells);
 
         bool status;                    // Status of read
@@ -559,4 +569,5 @@
                 psFree(stack);
                 psFree(inputMask);
+                psFree(matchChi2);
                 psFree(view);
                 psFree(outRO);
@@ -576,4 +587,5 @@
             psArrayAdd(job->args, 1, subRegions);
             psArrayAdd(job->args, 1, subKernels);
+            psArrayAdd(job->args, 1, matchChi2);
             if (!psThreadJobAddPending(job)) {
                 psFree(job);
@@ -582,4 +594,5 @@
                 psFree(stack);
                 psFree(inputMask);
+                psFree(matchChi2);
                 psFree(view);
                 psFree(outRO);
@@ -596,4 +609,5 @@
             psFree(stack);
             psFree(inputMask);
+            psFree(matchChi2);
             psFree(view);
             psFree(outRO);
@@ -601,4 +615,5 @@
             return false;
         }
+        psFree(matchChi2);
 
         // Harvest the jobs, gathering the inspection lists
