Index: branches/pap/ppStack/src/ppStackConvolve.c
===================================================================
--- branches/pap/ppStack/src/ppStackConvolve.c	(revision 28179)
+++ branches/pap/ppStack/src/ppStackConvolve.c	(revision 28484)
@@ -45,4 +45,13 @@
     options->convCovars = psArrayAlloc(num); // Covariance matrices
 
+    psImage *target = NULL;             // Target PSF image
+    if (options->convolve) {
+        target = ppStackTarget(options, config);
+        if (!target) {
+            psError(psErrorCodeLast(), false, "Unable to produce stack target image");
+            return false;
+        }
+    }
+
     psVector *renorms = psVectorAlloc(num, PS_TYPE_F32); // Renormalisation values for variances
     psVectorInit(renorms, NAN);
@@ -71,4 +80,5 @@
             psFree(fpaList);
             psFree(cellList);
+            psFree(target);
             return false;
         }
@@ -87,4 +97,5 @@
             psFree(fpaList);
             psFree(cellList);
+            psFree(target);
             return false;
         }
@@ -93,5 +104,5 @@
         psTimerStart("PPSTACK_MATCH");
         options->origCovars->data[i] = psMemIncrRefCounter(readout->covariance);
-        if (!ppStackMatch(readout, options, i, config)) {
+        if (!ppStackMatch(readout, target, options, i, config)) {
             // XXX many things can cause a failure of ppStackMatch -- should some be handled differently?
             psErrorCode error = psErrorCodeLast(); // Error code
@@ -102,4 +113,8 @@
               case PPSTACK_ERR_IO:
                 psError(error, false, "Unable to match image %d due to fatal error.", i);
+                psFree(rng);
+                psFree(fpaList);
+                psFree(cellList);
+                psFree(target);
                 return false;
                 // Non-fatal errors
@@ -154,4 +169,5 @@
             psFree(cellList);
             psFree(rng);
+            psFree(target);
             return false;
         }
@@ -164,4 +180,5 @@
             psFree(rng);
             psFree(maskHeader);
+            psFree(target);
             return false;
         }
@@ -172,4 +189,5 @@
             psFree(cellList);
             psFree(rng);
+            psFree(target);
             return false;
         }
@@ -222,4 +240,5 @@
             psFree(cellList);
             psFree(rng);
+            psFree(target);
             return false;
         }
@@ -229,4 +248,5 @@
     }
     psFree(rng);
+    psFree(target);
 
     psFree(options->sourceLists); options->sourceLists = NULL;
@@ -235,8 +255,11 @@
 
     if (numGood == 0) {
-        psError(PPSTACK_ERR_REJECTED, false, "No good images to combine.");
+        options->quality = PPSTACK_ERR_REJECTED;
+        psErrorStackPrint(stderr, "No good images survived convolution stage.");
+        psErrorClear();
+        psWarning("No good images survived convolution stage.");
         psFree(fpaList);
         psFree(cellList);
-        return false;
+        return true;
     }
 
@@ -324,6 +347,9 @@
 
     if (numGood == 0) {
-        psError(PPSTACK_ERR_REJECTED, false, "No good images to combine.");
-        return false;
+        options->quality = PPSTACK_ERR_REJECTED;
+        psErrorStackPrint(stderr, "No good images survived convolution stage.");
+        psErrorClear();
+        psWarning("No good images survived convolution stage.");
+        return true;
     }
 
