Index: trunk/ppSub/src/ppSubCamera.c
===================================================================
--- trunk/ppSub/src/ppSubCamera.c	(revision 27039)
+++ trunk/ppSub/src/ppSubCamera.c	(revision 27040)
@@ -107,5 +107,5 @@
 
     // look for the file on the RUN metadata
-    pmFPAfile *file = pmFPAfileDefineFromRun(&status, bind, config, filerule); // File to return
+    pmFPAfile *file = pmFPAfileDefineFromRun(&status, NULL, config, filerule); // File to return
     if (!status) {
         psError(psErrorCodeLast(), false, "Failed to load file definition for %s", filerule);
@@ -348,5 +348,5 @@
 
     // Output subtraction kernel
-    pmFPAfile *kernel = defineCalcFile(config, NULL, "PPSUB.OUTPUT.KERNELS", PM_FPA_FILE_SUBKERNEL);
+    pmFPAfile *kernel = defineCalcFile(config, output, "PPSUB.OUTPUT.KERNELS", PM_FPA_FILE_SUBKERNEL);
     if (!kernel) {
         psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to define file PPSUB.OUTPUT.KERNELS");
Index: trunk/psModules/src/imcombine/pmSubtractionMatch.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 27039)
+++ trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 27040)
@@ -197,4 +197,57 @@
 }
 
+
+/// Allocate images, as required
+static void subtractionMatchAlloc(pmReadout *conv1, pmReadout *conv2, // Output readouts
+                                  const pmReadout *ro1, const pmReadout *ro2, // Input readouts
+                                  const psImage *subMask,                     // Subtraction mask
+                                  psImageMaskType maskBad,                    // Mask value for bad pixels
+                                  pmSubtractionMode subMode,          // Subtraction mode
+                                  int numCols, int numRows            // Size of image
+    )
+{
+    if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_UNSURE ||
+        subMode == PM_SUBTRACTION_MODE_DUAL) {
+        if (!conv1->image) {
+            conv1->image = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+        }
+        psImageInit(conv1->image, NAN);
+        if (ro1->variance) {
+            if (!conv1->variance) {
+                conv1->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+            }
+            psImageInit(conv1->variance, NAN);
+        }
+        if (subMask) {
+            if (!conv1->mask) {
+                conv1->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);
+            }
+            psImageInit(conv1->mask, maskBad);
+        }
+    }
+    if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_UNSURE ||
+        subMode == PM_SUBTRACTION_MODE_DUAL) {
+        if (!conv2->image) {
+            conv2->image = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+        }
+        psImageInit(conv2->image, NAN);
+        if (ro2->variance) {
+            if (!conv2->variance) {
+                conv2->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);
+            }
+            psImageInit(conv2->variance, NAN);
+        }
+        if (subMask) {
+            if (!conv2->mask) {
+                conv2->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);
+            }
+            psImageInit(conv2->mask, maskBad);
+        }
+    }
+
+    return;
+}
+
+
 static void subtractionAnalysisUpdate(pmReadout *conv1, pmReadout *conv2, // Convolved images
                                       const psMetadata *analysis, // Analysis metadata
@@ -343,4 +396,7 @@
     psMetadata *outHeader = psMetadataAlloc(); // Output header values
 
+    int numCols = ro1->image->numCols, numRows = ro1->image->numRows; // Size of image
+    subtractionMatchAlloc(conv1, conv2, ro1, ro2, subMask, maskBad, mode, numCols, numRows);
+
     psTrace("psModules.imcombine", 2, "Convolving...\n");
     for (int i = 0; i < kernels->n; i++) {
@@ -515,48 +571,9 @@
             stampThresh2 = threshold * bg->robustStdev;
             psBinaryOp(ro2->image, ro2->image, "-", psScalarAlloc((float)bg->robustMedian, PS_TYPE_F32));
-       }
+        }
         psFree(bg);
     }
 
-    // Just in case the iso-kernel region doesn't cover the entire image...
-    if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_UNSURE ||
-        subMode == PM_SUBTRACTION_MODE_DUAL) {
-        if (!conv1->image) {
-            conv1->image = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-        }
-        psImageInit(conv1->image, NAN);
-        if (ro1->variance) {
-            if (!conv1->variance) {
-                conv1->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-            }
-            psImageInit(conv1->variance, NAN);
-        }
-        if (subMask) {
-            if (!conv1->mask) {
-                conv1->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);
-            }
-            psImageInit(conv1->mask, maskBad);
-        }
-    }
-    if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_UNSURE ||
-        subMode == PM_SUBTRACTION_MODE_DUAL) {
-        if (!conv2->image) {
-            conv2->image = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-        }
-        psImageInit(conv2->image, NAN);
-        if (ro2->variance) {
-            if (!conv2->variance) {
-                conv2->variance = psImageAlloc(numCols, numRows, PS_TYPE_F32);
-            }
-            psImageInit(conv2->variance, NAN);
-        }
-        if (subMask) {
-            if (!conv2->mask) {
-                conv2->mask = psImageAlloc(numCols, numRows, PS_TYPE_IMAGE_MASK);
-            }
-            psImageInit(conv2->mask, maskBad);
-        }
-    }
-
+    subtractionMatchAlloc(conv1, conv2, ro1, ro2, subMask, maskBad, subMode, numCols, numRows);
 
     // Iterate over iso-kernel regions
