Index: trunk/ppSub/src/ppSubBackground.c
===================================================================
--- trunk/ppSub/src/ppSubBackground.c	(revision 21183)
+++ trunk/ppSub/src/ppSubBackground.c	(revision 21257)
@@ -1,41 +1,27 @@
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <pslib.h>
-#include <psmodules.h>
-#include <psphot.h>
 #include "ppSub.h"
 
-// Copied from ppImageSubtractBackground()
-bool ppSubBackground(pmReadout *ro, pmConfig *config, const pmFPAview *view)
+// Based on ppImageSubtractBackground()
+bool ppSubBackground(pmConfig *config, const pmFPAview *view)
 {
     psAssert(config, "Need configuration");
     psAssert(view, "Need view to chip");
 
-    // The background model file may be defined, though the model hasn't been built
-    // If so, we will build it below.
-    bool status;                        // Status of lookup
-    pmFPAfile *modelFile = psMetadataLookupPtr(&status, config->files, "PSPHOT.BACKMDL"); // Background model
-    if (!status) {
-        psError(PS_ERR_UNEXPECTED_NULL, true, "PSPHOT.BACKMDL file is not defined");
-        return false;
-    }
+    bool status; // Status of metadata lookups
 
     psMetadata *ppSubRecipe = psMetadataLookupPtr(NULL, config->recipes, PPSUB_RECIPE);
     psAssert(ppSubRecipe, "Need PPSUB recipe");
+
     psMetadata *psphotRecipe = psMetadataLookupPtr(NULL, config->recipes, PSPHOT_RECIPE);
-    psAssert(psphotRecipe, "Need PSPHOT recipe");
+    psAssert(psphotRecipe, "Need PSPHOT recipe for binning");
 
-    psString maskBadStr = psMetadataLookupStr(NULL, ppSubRecipe, "MASK.BAD"); // Name of bits to mask for bad
-    psImageMaskType maskBad = pmConfigMaskGet(maskBadStr, config); // Bits to mask for bad pixels
+    psImageMaskType maskBad = pmConfigMaskGet("BLANK", config); 
 
-    // user-defined masks to test for good/bad pixels (build from recipe list if not yet set)
-    psMetadataAddImageMask(psphotRecipe, PS_LIST_TAIL, "MASK.PSPHOT", PS_META_REPLACE, "user-defined mask", maskBad);
+    // select the output readout
+    pmReadout *outRO = pmFPAfileThisReadout(config->files, view, "PPSUB.OUTPUT");
 
-    psImage *image = ro->image, *mask = ro->mask; // Image and mask of interest
+    // select the model readout, if it exist already; if not, generate it
+    pmReadout *modelRO = pmFPAfileThisReadout(config->files, view, "PSPHOT.BACKMDL");
 
-    pmReadout *modelRO = pmFPAviewThisReadout(view, modelFile->fpa); // Background model
+    // if necessary, generate the background model
     if (!modelRO) {
         // Create the background model
@@ -44,6 +30,6 @@
             return false;
         }
-        modelRO = (modelFile->mode == PM_FPA_MODE_INTERNAL) ? modelFile->readout :
-                   pmFPAviewThisReadout(view, modelFile->fpa);
+	// select the model readout (should now exist)
+	modelRO = pmFPAfileThisReadout(config->files, view, "PSPHOT.BACKMDL");
         if (!modelRO) {
             psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find background model");
@@ -54,4 +40,7 @@
                                                   "PSPHOT.BACKGROUND.BINNING"); // Binning for model
     psImage *modelImage = modelRO->image; // Background model
+
+    psImage *image = outRO->image; // Image of interest
+    psImage *mask = outRO->mask; // Mask of interest
 
     // Do the background subtraction
