Index: trunk/ppImage/src/ppImageDetrendReadout.c
===================================================================
--- trunk/ppImage/src/ppImageDetrendReadout.c	(revision 13562)
+++ trunk/ppImage/src/ppImageDetrendReadout.c	(revision 13593)
@@ -18,5 +18,5 @@
     // Masking on the basis of pixel value needs to be done before anything else, so the values are pristine.
     if (options->doMask || options->doShutter || options->doFlat || options->doPhotom) {
-        pmReadoutGenerateMask(input);
+        pmReadoutGenerateMask(input, options->satMask, options->badMask);
     }
     // apply the externally supplied mask to the input->mask pixels
@@ -68,5 +68,5 @@
     if (options->doFlat) {
         pmReadout *flat = pmFPAfileThisReadout(config->files, detview, "PPIMAGE.FLAT");
-        if (!pmFlatField(input, flat)) {
+        if (!pmFlatField(input, flat, options->flatMask)) {
             return false;
         }
Index: trunk/ppImage/src/ppImageOptions.c
===================================================================
--- trunk/ppImage/src/ppImageOptions.c	(revision 13562)
+++ trunk/ppImage/src/ppImageOptions.c	(revision 13593)
@@ -24,5 +24,8 @@
     // default flags for various activities
     options->doMask     = false;        // Mask bad pixels
-    options->maskValue  = 0xff;         // Default mask value
+    options->maskValue  = 0x00;         // Default mask value
+    options->satMask    = 0x00;         // Saturated pixels
+    options->badMask    = 0x00;         // Bad pixels
+    options->flatMask   = 0x00;         // Bad flat pixels
 
     options->doNonLin   = false;        // Non-linearity correction
@@ -163,8 +166,12 @@
     // Mask recipe options
     options->doMask = psMetadataLookupBool(NULL, recipe, "MASK");
-    psMaskType maskValue = psMetadataLookupU8(&status, recipe, "MASK.VALUE");
+    const char *masks = psMetadataLookupStr(&status, recipe, "MASK.VALUE");
     if (status) {
-        options->maskValue = maskValue;
-    }
+        options->maskValue = pmConfigMask(masks, config);
+    }
+    options->satMask = pmConfigMask("SAT", config);
+    options->badMask = pmConfigMask("BAD", config);
+    options->flatMask = pmConfigMask("FLAT", config);
+
 
     options->doBias = psMetadataLookupBool(NULL, recipe, "BIAS");
Index: trunk/ppImage/src/ppImageOptions.h
===================================================================
--- trunk/ppImage/src/ppImageOptions.h	(revision 13562)
+++ trunk/ppImage/src/ppImageOptions.h	(revision 13593)
@@ -6,4 +6,7 @@
     bool doMask;                        // Mask bad pixels
     psMaskType maskValue;               // apply this bit-mask to choose masked bits
+    psMaskType satMask;                 // Mask value to give saturated pixels
+    psMaskType badMask;                 // Mask value to give bad pixels
+    psMaskType flatMask;                // Mask value to give bad flat pixels
 
     bool doBias;                        // Bias subtraction
