Index: trunk/ppStack/src/ppStackLoop.c
===================================================================
--- trunk/ppStack/src/ppStackLoop.c	(revision 21376)
+++ trunk/ppStack/src/ppStackLoop.c	(revision 21477)
@@ -480,5 +480,6 @@
             psMetadataAddF32(stats, PS_LIST_TAIL, "STAMP.NUM", PS_META_DUPLICATE_OK,
                              "Number of stamps", kernels->numStamps);
-
+            psMetadataAddF32(stats, PS_LIST_TAIL, "PPSTACK.WEIGHTING", PS_META_DUPLICATE_OK,
+                             "Weighting for image", weightings->data.F32[i]);
         }
         psLogMsg("ppStack", PS_LOG_INFO, "Time to match image %d: %f sec", i, psTimerClear("PPSTACK_MATCH"));
@@ -495,5 +496,14 @@
         writeImage(maskNames->data[i], maskHeader, readout->mask, config);
         psFree(maskHeader);
+        psImageCovarianceTransfer(readout->variance, readout->covariance);
         writeImage(varianceNames->data[i], hdu->header, readout->variance, config);
+#ifdef TESTING
+        {
+            psString name = NULL;
+            psStringAppend(&name, "covariance_%d.fits", i);
+            writeImage(name, hdu->header, readout->covariance->image, config);
+            psFree(name);
+        }
+#endif
 
         pmCell *inCell = readout->parent; // Input cell
@@ -605,4 +615,6 @@
                              i, matchChi2->data.F32[i]);
                 } else {
+                    psLogMsg("ppStack", PS_LOG_INFO, "Image %d has matching chi^2: %f",
+                             i, matchChi2->data.F32[i]);
                     numGood++;
                 }
@@ -630,5 +642,6 @@
     // Start threading
     ppStackThreadInit();
-    ppStackThreadData *stack = ppStackThreadDataSetup(cells, imageNames, maskNames, varianceNames, config);
+    ppStackThreadData *stack = ppStackThreadDataSetup(cells, imageNames, maskNames, varianceNames,
+                                                      covariances, config);
     if (!stack) {
         psError(PS_ERR_IO, false, "Unable to initialise stack threads.");
@@ -729,6 +742,5 @@
             psArrayAdd(job->args, 1, config);
             psArrayAdd(job->args, 1, outRO);
-            psArrayAdd(job->args, 1, subRegions);
-            psArrayAdd(job->args, 1, subKernels);
+            psArrayAdd(job->args, 1, inputMask);
             psArrayAdd(job->args, 1, weightings);
             psArrayAdd(job->args, 1, matchChi2);
@@ -761,5 +773,4 @@
             return false;
         }
-        psFree(matchChi2);
 
         // Harvest the jobs, gathering the inspection lists
@@ -787,4 +798,8 @@
         memDump("initial");
     }
+
+#ifdef TESTING
+    writeImage("combined_initial.fits", NULL, outRO->image, config);
+#endif
 
     if (stats) {
@@ -828,4 +843,5 @@
                 psFree(rejected);
                 psFree(covariances);
+                psFree(matchChi2);
                 return false;
             }
@@ -844,4 +860,5 @@
             psFree(rejected);
             psFree(covariances);
+            psFree(matchChi2);
             return false;
         }
@@ -939,4 +956,5 @@
             psFree(outRO);
             psFree(covariances);
+            psFree(matchChi2);
             return false;
         }
@@ -969,4 +987,5 @@
                 psFree(outRO);
                 psFree(covariances);
+                psFree(matchChi2);
                 return false;
             }
@@ -981,6 +1000,8 @@
             psArrayAdd(job->args, 1, config);
             psArrayAdd(job->args, 1, outRO);
+            psArrayAdd(job->args, 1, inputMask);
             psArrayAdd(job->args, 1, rejected);
             psArrayAdd(job->args, 1, weightings);
+            psArrayAdd(job->args, 1, matchChi2);
             if (!psThreadJobAddPending(job)) {
                 psFree(job);
@@ -991,4 +1012,5 @@
                 psFree(outRO);
                 psFree(covariances);
+                psFree(matchChi2);
                 return false;
             }
@@ -1004,4 +1026,5 @@
             psFree(outRO);
             psFree(covariances);
+            psFree(matchChi2);
             return false;
         }
@@ -1009,4 +1032,8 @@
 
     memDump("final");
+
+#ifdef TESTING
+    writeImage("combined_final.fits", NULL, outRO->image, config);
+#endif
 
     // Sum covariance matrices
@@ -1019,4 +1046,5 @@
     outRO->covariance = psImageCovarianceSum(covariances);
     psFree(covariances);
+    psFree(matchChi2);
 
     if (stats) {
