Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfile.c
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfile.c	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfile.c	(revision 43127)
@@ -542,4 +542,7 @@
     if (!strcasecmp(type, "NEWNONLIN"))  {
       return PM_FPA_FILE_NEWNONLIN;
+    }
+    if (!strcasecmp(type, "VALID_OVERSCAN"))  {
+      return PM_FPA_FILE_VALID_OVERSCAN;
     }
     if (!strcasecmp(type, "ASTROM"))     {
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfile.h
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfile.h	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfile.h	(revision 43127)
@@ -56,4 +56,5 @@
     PM_FPA_FILE_LINEARITY,
     PM_FPA_FILE_NEWNONLIN,
+    PM_FPA_FILE_VALID_OVERSCAN,
     PM_FPA_FILE_EXPNUM,
 } pmFPAfileType;
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfileIO.c
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfileIO.c	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/camera/pmFPAfileIO.c	(revision 43127)
@@ -286,4 +286,5 @@
       case PM_FPA_FILE_LINEARITY:
       case PM_FPA_FILE_NEWNONLIN:
+      case PM_FPA_FILE_VALID_OVERSCAN:
         break;
       default:
@@ -653,4 +654,5 @@
       case PM_FPA_FILE_LINEARITY:
       case PM_FPA_FILE_NEWNONLIN:
+      case PM_FPA_FILE_VALID_OVERSCAN:
       case PM_FPA_FILE_EXPNUM:
         psTrace ("psModules.camera", 5, "closing %s (%s) (%d:%d:%d)\n", file->filename, file->name, view->chip, view->cell, view->readout);
@@ -739,4 +741,5 @@
       case PM_FPA_FILE_LINEARITY:
       case PM_FPA_FILE_NEWNONLIN:
+      case PM_FPA_FILE_VALID_OVERSCAN:
         psTrace ("psModules.camera", 5, "nothing to free for %s (%s)\n", file->filename, file->name);
         return true;
@@ -900,4 +903,5 @@
       case PM_FPA_FILE_LINEARITY:
       case PM_FPA_FILE_NEWNONLIN:
+      case PM_FPA_FILE_VALID_OVERSCAN:
       case PM_FPA_FILE_EXPNUM:
         psTrace ("psModules.camera", 5, "opening %s (%s) (%d:%d:%d)\n",
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/Makefile.am
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/Makefile.am	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/Makefile.am	(revision 43127)
@@ -11,4 +11,5 @@
 	pmNonLinear.c \
 	pmNewNonLinear.c \
+	pmMaskBadOverscan.c \
 	pmBias.c \
 	pmOverscan.c \
@@ -32,4 +33,5 @@
 	pmNonLinear.h \
 	pmNewNonLinear.h \
+	pmMaskBadOverscan.h \
 	pmBias.h \
 	pmOverscan.h \
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmDetrendDB.c
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmDetrendDB.c	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmDetrendDB.c	(revision 43127)
@@ -113,4 +113,5 @@
 	DETREND_STRING_CASE(AUXMASK);
 	DETREND_STRING_CASE(KH_CORRECT);
+	DETREND_STRING_CASE(VALID_OVERSCAN);
 	DETREND_STRING_CASE(PATTERN_ROW_AMP);
 	DETREND_STRING_CASE(PATTERN_DEAD_CELLS);
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmDetrendDB.h
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmDetrendDB.h	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmDetrendDB.h	(revision 43127)
@@ -44,4 +44,5 @@
     PM_DETREND_TYPE_PATTERN_ROW_AMP,
     PM_DETREND_TYPE_PATTERN_DEAD_CELLS,
+    PM_DETREND_TYPE_VALID_OVERSCAN,
 } pmDetrendType;
 
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmMaskBadOverscan.c
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmMaskBadOverscan.c	(revision 43127)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmMaskBadOverscan.c	(revision 43127)
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <pslib.h>
+
+#include "pmFPA.h"
+#include "pmHDU.h"
+#include "pmHDUUtils.h"
+#include "pmMaskBadOverscan.h"
+
+// model is stored as a FITS table, read into an array
+// each row is one cell, with (min, max) valid overscan range
+bool pmMaskBadOverscanApply(pmReadout *inputReadout, float minValid, float maxValid, psImageMaskType maskValue)
+{
+    PS_ASSERT_PTR_NON_NULL(inputReadout, false);
+    PS_ASSERT_PTR_NON_NULL(inputReadout->image, false);
+    PS_ASSERT_PTR_NON_NULL(inputReadout->mask, false);
+    PS_ASSERT_IMAGE_TYPE(inputReadout->image, PS_TYPE_F32, false);
+    PS_ASSERT_IMAGE_TYPE(inputReadout->mask, PS_TYPE_IMAGE_MASK, false);
+
+    pmHDU *hdu = pmHDUFromReadout(inputReadout); // HDU of interest
+
+    bool status;
+    float overscan = psMetadataLookupF32(&status, hdu->header, "OVER_VAL");
+    if (!status) {
+      // no overscan value measured
+      return false;
+    }
+
+    // readout is either all good or all bad
+    if ((overscan >= minValid) && (overscan <= maxValid)) return true;
+
+    psImage *mask = inputReadout->mask;
+
+    // completely mask the readout
+    for (int iy = 0; iy < mask->numRows; iy++) { // Loop over rows : note: problem with discontinuity here
+	for (int ix = 0; ix < mask->numCols; ix++) { // Loop over columns
+	  mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] |= maskValue;
+	}
+    }
+    return true;
+}
+
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmMaskBadOverscan.h
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmMaskBadOverscan.h	(revision 43127)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmMaskBadOverscan.h	(revision 43127)
@@ -0,0 +1,17 @@
+/* @file pmMaskBadOverscan.h
+ * @brief mask entire cells based on the overscan value
+ * @author Eugene Magnier, IfA
+ * Copyright 2026 Institute for Astronomy, University of Hawaii
+ */
+
+#ifndef PM_MASK_BAD_OVERSCAN_H
+#define PM_MASK_BAD_OVERSCAN_H
+
+/// @addtogroup detrend Detrend Creation and Application
+/// @{
+
+/// mask bad readouts 
+bool pmMaskBadOverscanApply(pmReadout *inputReadout, float minValid, float maxValid, psImageMaskType maskValue);
+
+/// @}
+#endif
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmPattern.c
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmPattern.c	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/detrend/pmPattern.c	(revision 43127)
@@ -1217,10 +1217,8 @@
     // Count number of cells to tweak
     int numTweak = 0;                   // Number of cells to tweak
-    int numIgnore = 0;                  // Number of cells to ignore
     for (int i = 0; i < numCells; i++) {
         pmCell *cell = chip->cells->data[i]; // Cell of interest
         if (!cell || !cell->data_exists || !cell->process ||
             cell->readouts->n == 0 || cell->readouts->n > 1 || !cell->readouts->data[0]) {
-            numIgnore++;
             meanMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PM_PATTERN_IGNORE;
             continue;
Index: /branches/eam_branches/ipp-pstamp-20260421/psModules/src/psmodules.h
===================================================================
--- /branches/eam_branches/ipp-pstamp-20260421/psModules/src/psmodules.h	(revision 43126)
+++ /branches/eam_branches/ipp-pstamp-20260421/psModules/src/psmodules.h	(revision 43127)
@@ -75,4 +75,5 @@
 #include <pmFringeStats.h>
 #include <pmMaskBadPixels.h>
+#include <pmMaskBadOverscan.h>
 #include <pmMaskStats.h>
 #include <pmNonLinear.h>
