Index: trunk/ppImage/src/ppImageDetrendReadout.c
===================================================================
--- trunk/ppImage/src/ppImageDetrendReadout.c	(revision 42382)
+++ trunk/ppImage/src/ppImageDetrendReadout.c	(revision 42890)
@@ -4,4 +4,11 @@
 
 #include "ppImage.h"
+
+#define ESCAPE(STATUS, ...)                           \
+    {                                                 \
+        psError(PS_ERR_UNKNOWN, STATUS, __VA_ARGS__); \
+        psFree(view);                                 \
+        return false;                                 \
+    }
 
 bool ppImageDetrendReadout(pmConfig *config, ppImageOptions *options, pmFPAview *view)
@@ -117,10 +124,25 @@
     // Subtract the overscan
     if (options->doOverscan) {
-      if (!pmOverscanSubtract (input, options->overscan)) {
-	psError(PS_ERR_UNKNOWN, false, "Unable to subtract overscan.");
-	psFree(detview);
-	return false;
-      }
-      // psLogMsg ("ppImage", 6, "subtract overscan: %f sec\n", psTimerMark ("detrend.readout"));
+        bool doTwoDOverscan = false;
+        if (options->overscan->TwoD) {
+            pmChip *chip = pmFPAfileThisChip(config->files, view, "PPIMAGE.INPUT");
+            if (!ppImageDoPatternForView(&doTwoDOverscan, config, chip, view, RECIPE_NAME, "OVERSCAN.2D.SUBSET"))
+            {
+                ESCAPE(false, "Unable to determine whether 2D Overscan subtraction should be applied.");
+            }
+            // set doTwoDOverscan to False if the cell background is larger than 500 ADU or smaller than zero (peculiar)
+            if (doTwoDOverscan) {
+                float backest = psMetadataLookupF32(NULL, input->parent->concepts, "CELL.BACKEST");
+                if (!isfinite(backest) || backest > 500 || backest < 0) {
+                    doTwoDOverscan = false;
+                }
+            }
+        }
+        if (!pmOverscanSubtract(input, options->overscan, doTwoDOverscan)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to subtract overscan.");
+            psFree(detview);
+            return false;
+        }
+        // psLogMsg ("ppImage", 6, "subtract overscan: %f sec\n", psTimerMark ("detrend.readout"));
     }
 
