Index: trunk/ppImage/src/ppImageDetrendBias.c
===================================================================
--- trunk/ppImage/src/ppImageDetrendBias.c	(revision 5857)
+++ trunk/ppImage/src/ppImageDetrendBias.c	(revision 5858)
@@ -1,57 +1,54 @@
 # include "ppImage.h"
 
-bool ppDetrendBias (pmCell *input, psImage *bias, psImage *dark, ppRecipe *options) {
+bool ppDetrendBias (pmCell *inputCell, pmReadout *inputReadout, pmReadout *pedestal, ppOptions *options) {
 
     psPolynomial1D *poly;
     psSpline1D *spline;
+    psString coeffs;
 
-    // XXX EAM : this is an odd trigger for this
-    if (options->overscanMode == PM_OVERSCAN_ROWS || options->overscanMode == PM_OVERSCAN_COLUMNS) {
+    // XXX EAM : renamed the general edge overscan concept
+    if (options->overscanMode == PM_OVERSCAN_EDGE) {
 	// Need to get the read direction
 	int readdir = psMetadataLookupS32(NULL, inputCell->concepts, "CELL.READDIR");
 	if (readdir == 1) {
-// psmodule-0.8.0 has confused PM_OVERSCAN_ROWS and PM_OVERSCAN_COLUMNS; bug 608.
-#ifdef PRODUCTION
 	    options->overscanMode = PM_OVERSCAN_ROWS;
-#else
+	} else if (readdir == 2) {
 	    options->overscanMode = PM_OVERSCAN_COLUMNS;
-#endif
-	} else if (readdir == 2) {
-#ifdef PRODUCTION
-	    options->overscanMode = PM_OVERSCAN_COLUMNS;
-#else
-	    options->overscanMode = PM_OVERSCAN_ROWS;
-#endif
 	} else {
-	    psErrorStackPrint(stderr, "CELL.READDIR (%d) is not 1 or 2 --- assuming 1.\n",
-			      readdir);
-	    options->overscanMode = PM_OVERSCAN_ROWS;
+	    psAbort("phase2", "CELL.READDIR (%d) is not 1 or 2", readdir);
 	}
     }
 
-    psList *inputOverscans = pmReadoutGetBias(inputReadout); // List of overscan bias regions
-#ifdef PRODUCTION
-    (void)pmSubtractBias(inputReadout, overscanFit, inputOverscans, overscanMode,
-			 overscanStats, overscanBins, overscanFitType, pedestal);
-#else
-    (void)pmSubtractBias(inputReadout, overscanFit, inputOverscans, overscanMode,
-			 overscanStats, overscanBins, overscanFitType, biasReadout);
-#endif
+    // XXX : should this be a psArray?
+    psList *inputOverscans = NULL;
+    if (options->doOverscan) {
+	inputOverscans = pmReadoutGetBias(inputReadout); // List of overscan bias regions
+    }
+
+    // supplies the fit result in 'overscanFit'
+    pmSubtractBias(inputReadout, 
+		   options->overscanFit, 
+		   inputOverscans, 
+		   options->overscanMode, 
+		   options->overscanStats, 
+		   options->overscanBins, 
+		   options->overscanFitType, 
+		   pedestal);
     psFree(inputOverscans);
-
+    
     // Output overscan fit results, if required
-    if (!doOverscan) { 
+    if (! options->doOverscan) { 
 	return true;
     }
 
-    if (! overscanFit) {
+    if (! options->overscanFit) {
 	psLogMsg("phase2", PS_LOG_WARN, "No fit generated!\n");
 	return true;
     } 
 
-    switch (overscanFitType) {
+    switch (options->overscanFitType) {
       case PM_FIT_POLYNOMIAL:
-	poly = (psPolynomial1D*)overscanFit; // The polynomial
-	psString coeffs = NULL;     // String containing the coefficients
+	poly = (psPolynomial1D *) options->overscanFit; // The polynomial
+	coeffs = NULL;     // String containing the coefficients
 	for (int i = 0; i < poly->nX; i++) {
 	    psStringAppend(&coeffs, "%e ", poly->coeff[i]);
@@ -63,6 +60,6 @@
 
       case PM_FIT_SPLINE:
-	spline = (psSpline1D*)overscanFit; // The spline
-	psString coeffs = NULL;     // String containing the coefficients
+	spline = (psSpline1D *) options->overscanFit; // The spline
+	coeffs = NULL;     // String containing the coefficients
 	for (int i = 0; i < spline->n; i++) {
 	    psPolynomial1D *poly = spline->spline[i]; // i-th polynomial
