Index: trunk/ppStack/src/ppStackMatch.c
===================================================================
--- trunk/ppStack/src/ppStackMatch.c	(revision 18559)
+++ trunk/ppStack/src/ppStackMatch.c	(revision 18591)
@@ -30,5 +30,8 @@
     psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, "PPSUB"); // PPSUB recipe
     int size = psMetadataLookupS32(NULL, recipe, "KERNEL.SIZE"); // Kernel half-size
-    psMaskType maskBad = pmConfigMaskGet(psMetadataLookupStr(NULL, recipe, "MASK.BAD"), config); // Value to mask
+
+    psMaskType maskIn = pmConfigMaskGet("MASK.VALUE", config); // Bits to mask going in to pmSubtractionMatch
+    psMaskType maskOut = pmConfigMaskGet("BLANK", config); // Bits to mask after pmSubtractionMatch
+
     bool mdok;                          // Status of MD lookup
     bool renorm = psMetadataLookupBool(&mdok, config->arguments, "RENORM"); // Renormalise variances?
@@ -41,5 +44,5 @@
     float penalty = psMetadataLookupF32(NULL, config->arguments, "PENALTY"); // Penalty for wideness
 
-    if (!pmReadoutMaskNonfinite(readout, maskBad)) {
+    if (!pmReadoutMaskNonfinite(readout, maskIn)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to mask non-finite pixels in readout.");
         return false;
@@ -64,6 +67,4 @@
         int ringsOrder = psMetadataLookupS32(NULL, recipe, "RINGS.ORDER"); // RINGS polynomial order
         int binning = psMetadataLookupS32(NULL, recipe, "SPAM.BINNING"); // Binning for SPAM kernel
-        psMaskType maskBlank = pmConfigMaskGet(psMetadataLookupStr(NULL, recipe, "MASK.BLANK"),
-                                            config); // Mask for blank reg.
         float badFrac = psMetadataLookupF32(NULL, recipe, "BADFRAC"); // Maximum bad fraction
         bool optimum = psMetadataLookupBool(&mdok, recipe, "OPTIMUM"); // Derive optimum parameters?
@@ -114,5 +115,5 @@
                                 sources, stampsName, type, size, order, widths, orders, inner, ringsOrder,
                                 binning, penalty, optimum, optWidths, optOrder, optThresh, iter, rej,
-                                maskBad, maskBlank, badFrac, PM_SUBTRACTION_MODE_1)) {
+                                maskIn, maskOut, badFrac, PM_SUBTRACTION_MODE_1)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to match images.");
             psFree(fake);
@@ -200,5 +201,5 @@
     if (renorm) {
         psLogMsg("ppStack", PS_LOG_INFO, "Renormalising variance map.");
-        if (!pmReadoutWeightRenorm(readout, maskBad, renormMean, renormStdev, renormWidth, rng)) {
+        if (!pmReadoutWeightRenorm(readout, maskOut, renormMean, renormStdev, renormWidth, rng)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to renormalise variances.");
             psFree(output);
@@ -209,5 +210,5 @@
     // Ensure the background value is zero
     psStats *bg = psStatsAlloc(PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV); // Statistics for background
-    if (!psImageBackground(bg, NULL, readout->image, readout->mask, maskBad, rng)) {
+    if (!psImageBackground(bg, NULL, readout->image, readout->mask, maskOut, rng)) {
         psWarning("Can't measure background for image.");
         psErrorClear();
