Index: branches/pap/ppStack/src/ppStackCamera.c
===================================================================
--- branches/pap/ppStack/src/ppStackCamera.c	(revision 25830)
+++ branches/pap/ppStack/src/ppStackCamera.c	(revision 25911)
@@ -316,4 +316,30 @@
         psError(PS_ERR_UNKNOWN, false, "Unable to generate output FPA.");
         return false;
+    }
+
+    // Unconvolved mask
+    pmFPAfile *unconvMask = pmFPAfileDefineOutput(config, unconvFPA, "PPSTACK.UNCONV.MASK");
+    if (!unconvMask) {
+        psError(PS_ERR_IO, false, _("Unable to generate output file from PPSTACK.UNCONV.MASK"));
+        return false;
+    }
+    if (unconvMask->type != PM_FPA_FILE_MASK) {
+        psError(PS_ERR_IO, true, "PPSTACK.UNCONV.MASK is not of type MASK");
+        return false;
+    }
+    unconvMask->save = true;
+
+    // Unconvolved variance
+    if (haveVariances) {
+        pmFPAfile *unconvVariance = pmFPAfileDefineOutput(config, unconvFPA, "PPSTACK.UNCONV.VARIANCE");
+        if (!unconvVariance) {
+            psError(PS_ERR_IO, false, _("Unable to generate output file from PPSTACK.UNCONV.VARIANCE"));
+            return false;
+        }
+        if (unconvVariance->type != PM_FPA_FILE_VARIANCE) {
+            psError(PS_ERR_IO, true, "PPSTACK.UNCONV.VARIANCE is not of type VARIANCE");
+            return false;
+        }
+        unconvVariance->save = true;
     }
 #endif
Index: branches/pap/ppStack/src/ppStackCombineFinal.c
===================================================================
--- branches/pap/ppStack/src/ppStackCombineFinal.c	(revision 25830)
+++ branches/pap/ppStack/src/ppStackCombineFinal.c	(revision 25911)
@@ -10,5 +10,5 @@
 #include "ppStackLoop.h"
 
-bool ppStackCombineFinal(pmReadout *target, ppStackThreadData *stack,
+bool ppStackCombineFinal(pmReadout *target, ppStackThreadData *stack, psArray *covariances,
                          ppStackOptions *options, pmConfig *config, bool full, bool normalise)
 {
@@ -56,13 +56,13 @@
 
     // Sum covariance matrices
-    if (options->covariances) {
+    if (covariances) {
         double sumWeights = 0.0;            // Sum of weights
         for (int i = 0; i < options->num; i++) {
             if (options->inputMask->data.U8[i]) {
-                psFree(options->covariances->data[i]);
-                options->covariances->data[i] = NULL;
+                psFree(covariances->data[i]);
+                covariances->data[i] = NULL;
                 continue;
             }
-            psKernel *covar = options->covariances->data[i]; // Covariance matrix
+            psKernel *covar = covariances->data[i]; // Covariance matrix
             if (!covar) {
                 continue;
@@ -73,8 +73,7 @@
         }
         if (sumWeights > 0.0) {
-            target->covariance = psImageCovarianceSum(options->covariances);
+            target->covariance = psImageCovarianceSum(covariances);
             psBinaryOp(target->covariance->image, target->covariance->image, "/",
                        psScalarAlloc(sumWeights, PS_TYPE_F32));
-            psFree(options->covariances); options->covariances = NULL;
             psImageCovarianceTransfer(target->variance, target->covariance);
         }
Index: branches/pap/ppStack/src/ppStackConvolve.c
===================================================================
--- branches/pap/ppStack/src/ppStackConvolve.c	(revision 25830)
+++ branches/pap/ppStack/src/ppStackConvolve.c	(revision 25911)
@@ -39,5 +39,6 @@
     options->weightings = psVectorAlloc(num, PS_TYPE_F32); // Combination weightings for images (1/noise^2)
     psVectorInit(options->weightings, 0.0);
-    options->covariances = psArrayAlloc(num); // Covariance matrices
+    options->origCovars = psArrayAlloc(num);
+    options->convCovars = psArrayAlloc(num); // Covariance matrices
 
     psList *fpaList = psListAlloc(NULL); // List of input FPAs, for concept averaging
@@ -79,4 +80,5 @@
         // Background subtraction, scaling and normalisation is performed automatically by the image matching
         psTimerStart("PPSTACK_MATCH");
+        options->origCovars->data[i] = psMemIncrRefCounter(readout->covariance);
         if (!ppStackMatch(readout, options, i, config)) {
             psErrorStackPrint(stderr, "Unable to match image %d --- ignoring.", i);
@@ -85,5 +87,5 @@
             continue;
         }
-        options->covariances->data[i] = psMemIncrRefCounter(readout->covariance);
+        options->convCovars->data[i] = psMemIncrRefCounter(readout->covariance);
 
         if (options->stats) {
Index: branches/pap/ppStack/src/ppStackLoop.c
===================================================================
--- branches/pap/ppStack/src/ppStackLoop.c	(revision 25830)
+++ branches/pap/ppStack/src/ppStackLoop.c	(revision 25911)
@@ -97,5 +97,5 @@
     // Final combination
     psTrace("ppStack", 2, "Final stack of convolved images....\n");
-    if (!ppStackCombineFinal(options->outRO, stack, options, config, false, false)) {
+    if (!ppStackCombineFinal(options->outRO, stack, options->convCovars, options, config, false, false)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to perform final combination.");
         psFree(stack);
@@ -132,5 +132,5 @@
         }
         psTrace("ppStack", 2, "Stack of unconvolved images....\n");
-        if (!ppStackCombineFinal(options->unconvRO, stack, options, config, true, true)) {
+        if (!ppStackCombineFinal(options->unconvRO, stack, options->origCovars, options, config, true, true)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to perform unconvolved combination.");
             psFree(stack);
Index: branches/pap/ppStack/src/ppStackLoop.h
===================================================================
--- branches/pap/ppStack/src/ppStackLoop.h	(revision 25830)
+++ branches/pap/ppStack/src/ppStackLoop.h	(revision 25911)
@@ -58,4 +58,5 @@
     pmReadout *target,                  // Target readout
     ppStackThreadData *stack,           // Stack
+    psArray *covariances,               // Covariances
     ppStackOptions *options,            // Options
     pmConfig *config,                   // Configuration
Index: branches/pap/ppStack/src/ppStackOptions.c
===================================================================
--- branches/pap/ppStack/src/ppStackOptions.c	(revision 25830)
+++ branches/pap/ppStack/src/ppStackOptions.c	(revision 25911)
@@ -15,4 +15,5 @@
     psFree(options->origMasks);
     psFree(options->origVariances);
+    psFree(options->origCovars);
     psFree(options->convImages);
     psFree(options->convMasks);
@@ -27,5 +28,5 @@
     psFree(options->matchChi2);
     psFree(options->weightings);
-    psFree(options->covariances);
+    psFree(options->convCovars);
     psFree(options->outRO);
     psFree(options->unconvRO);
@@ -46,4 +47,5 @@
     options->origMasks = NULL;
     options->origVariances = NULL;
+    options->origCovars = NULL;
     options->convImages = NULL;
     options->convMasks = NULL;
@@ -61,5 +63,5 @@
     options->matchChi2 = NULL;
     options->weightings = NULL;
-    options->covariances = NULL;
+    options->convCovars = NULL;
     options->outRO = NULL;
     options->unconvRO = NULL;
Index: branches/pap/ppStack/src/ppStackOptions.h
===================================================================
--- branches/pap/ppStack/src/ppStackOptions.h	(revision 25830)
+++ branches/pap/ppStack/src/ppStackOptions.h	(revision 25911)
@@ -13,4 +13,5 @@
     psArray *origImages, *origMasks, *origVariances; // Filenames of the original images
     psArray *convImages, *convMasks, *convVariances; // Filenames for the temporary convolved images
+    psArray *origCovars;                // Original covariances matrices
     int num;                            // Number of inputs
     // Prepare
@@ -27,5 +28,5 @@
     psVector *matchChi2;                // chi^2 for stamps from matching
     psVector *weightings;               // Combination weightings for images (1/noise^2)
-    psArray *covariances;                 // Convolved covariance matrices
+    psArray *convCovars;                // Convolved covariance matrices
     // Combine initial
     pmReadout *outRO;                   // Output readout
Index: branches/pap/ppStack/src/ppStackThread.c
===================================================================
--- branches/pap/ppStack/src/ppStackThread.c	(revision 25830)
+++ branches/pap/ppStack/src/ppStackThread.c	(revision 25911)
@@ -64,6 +64,6 @@
     const psArray *imageNames = conv ? options->convImages : options->origImages; // Names of images to read
     const psArray *maskNames = conv ? options->convMasks : options->origMasks; // Names of masks to read
-    const psArray *varianceNames = conv ? options->convVariances : NULL; // Variance names
-    const psArray *covariances = conv ? options->covariances : NULL; // Covariance matrices
+    const psArray *varianceNames = conv ? options->convVariances : options->origVariances; // Variance names
+    const psArray *covariances = conv ? options->convCovars : options->origCovars; // Covariance matrices
 
     PS_ASSERT_ARRAY_NON_NULL(cells, NULL);
