Index: trunk/ppStack/src/ppStackLoop.c
===================================================================
--- trunk/ppStack/src/ppStackLoop.c	(revision 21183)
+++ trunk/ppStack/src/ppStackLoop.c	(revision 21199)
@@ -357,4 +357,5 @@
         }
 
+        // Generate target PSF
         targetPSF = ppStackPSF(config, numCols, numRows, psfs);
         psFree(psfs);
@@ -365,4 +366,6 @@
             return false;
         }
+        psMetadataAddPtr(config->arguments, PS_LIST_TAIL, "PSF.TARGET", PS_DATA_UNKNOWN,
+                         "Target PSF for stack", targetPSF);
 
         pmChip *outChip = pmFPAviewThisChip(view, output->fpa); // Output chip
@@ -423,4 +426,6 @@
             psFree(inputMask);
             psFree(matchChi2);
+            psFree(fpaList);
+            psFree(cellList);
             return false;
         }
@@ -440,4 +445,6 @@
             psFree(inputMask);
             psFree(matchChi2);
+            psFree(fpaList);
+            psFree(cellList);
             return false;
         }
@@ -446,4 +453,5 @@
         psArray *regions = NULL, *kernels = NULL; // Regions and kernels used in subtraction
         psTimerStart("PPSTACK_MATCH");
+
         if (!ppStackMatch(readout, &regions, &kernels, &matchChi2->data.F32[i], &weightings->data.F32[i],
                           sourceLists->data[i], targetPSF, rng, config)) {
@@ -476,5 +484,8 @@
         assert(hdu);
         writeImage(imageNames->data[i],  hdu->header, readout->image, config);
-        writeImage(maskNames->data[i],   hdu->header, readout->mask, config);
+        psMetadata *maskHeader = psMetadataCopy(NULL, hdu->header); // Copy of header, for mask
+        pmConfigMaskWriteHeader(config, maskHeader);
+        writeImage(maskNames->data[i],   maskHeader, readout->mask, config);
+        psFree(maskHeader);
         writeImage(weightNames->data[i], hdu->header, readout->weight, config);
 
@@ -486,4 +497,6 @@
         cells->data[i] = psMemIncrRefCounter(inCell);
         if (!filesIterateUp(config)) {
+            psFree(fpaList);
+            psFree(cellList);
             return false;
         }
@@ -503,4 +516,6 @@
         psFree(inputMask);
         psFree(matchChi2);
+        psFree(fpaList);
+        psFree(cellList);
         return false;
     }
@@ -569,5 +584,5 @@
             numGood = 0;                    // Number of good images
             for (int i = 0; i < num; i++) {
-	      if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PPSTACK_MASK_ALL) {
+              if (inputMask->data.PS_TYPE_VECTOR_MASK_DATA[i] & PPSTACK_MASK_ALL) {
                     continue;
                 }
@@ -612,5 +627,4 @@
     pmFPAview *view = NULL;             // View to readout
     psArray *inspect = NULL;            // Array of arrays of pixels to inspect
-    psVector *exptimes = psVectorAlloc(num, PS_TYPE_F32); // Exposure times for each input
     {
         int row0, col0;                 // Offset for readout
@@ -624,5 +638,4 @@
             psFree(inputMask);
             psFree(matchChi2);
-            psFree(exptimes);
             psFree(cells);
             return false;
@@ -638,5 +651,4 @@
             psFree(inputMask);
             psFree(matchChi2);
-            psFree(exptimes);
             psFree(cells);
             return false;
@@ -657,5 +669,4 @@
             psFree(view);
             psFree(outRO);
-            psFree(exptimes);
             psFree(cells);
             return false;
@@ -678,5 +689,4 @@
                 psFree(view);
                 psFree(outRO);
-                psFree(exptimes);
                 return false;
             }
@@ -705,5 +715,4 @@
                 psFree(view);
                 psFree(outRO);
-                psFree(exptimes);
                 return false;
             }
@@ -720,5 +729,4 @@
             psFree(view);
             psFree(outRO);
-            psFree(exptimes);
             return false;
         }
@@ -788,5 +796,4 @@
                 psFree(inspect);
                 psFree(rejected);
-                psFree(exptimes);
                 return false;
             }
@@ -804,5 +811,4 @@
             psFree(inspect);
             psFree(rejected);
-            psFree(exptimes);
             return false;
         }
@@ -899,5 +905,4 @@
             psFree(view);
             psFree(outRO);
-            psFree(exptimes);
             return false;
         }
@@ -928,5 +933,4 @@
                 psFree(view);
                 psFree(outRO);
-                psFree(exptimes);
                 return false;
             }
@@ -950,5 +954,4 @@
                 psFree(view);
                 psFree(outRO);
-                psFree(exptimes);
                 return false;
             }
@@ -963,5 +966,4 @@
             psFree(view);
             psFree(outRO);
-            psFree(exptimes);
             return false;
         }
@@ -1042,5 +1044,4 @@
     psFree(weightNames);
 
-    psFree(exptimes);
     psFree(inputMask);
     psFree(stack);
