Index: /trunk/psModules/src/detrend/pmShutterCorrection.c
===================================================================
--- /trunk/psModules/src/detrend/pmShutterCorrection.c	(revision 13699)
+++ /trunk/psModules/src/detrend/pmShutterCorrection.c	(revision 13700)
@@ -653,5 +653,5 @@
     }
     float exptime = psMetadataLookupF32(NULL, cell->concepts, "CELL.EXPOSURE"); // Exposure time
-    if (!isfinite(exptime) || exptime < 0.0) {
+    if (!isfinite(exptime)) {
         psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Bad exposure time: %f.\n", exptime);
         return false;
@@ -678,8 +678,24 @@
     }
     psImage *image = readout->image;    // Image to correct
-    for (int y = 0; y < image->numRows; y++) {
-        for (int x = 0; x < image->numCols; x++) {
-            image->data.F32[y][x] *= exptime / (exptime + shutterImage->data.F32[y][x]);
-        }
+
+    if (exptime <= 0.0) {
+	// In the extreme case that we have exptime <= 0.0, we correct the image to 
+	// counts-per-second, rather than counts in the nominal exposure time
+	for (int y = 0; y < image->numRows; y++) {
+	    for (int x = 0; x < image->numCols; x++) {
+		image->data.F32[y][x] *= 1.0 / (exptime + shutterImage->data.F32[y][x]);
+	    }
+	}
+	psMetadataAddF32 (cell->concepts, PS_LIST_TAIL, "CELL.EXPOSURE", PS_META_REPLACE, "exposure time re-normalized to 1.0", 1.0); // Exposure time
+	psString line = NULL;
+	psStringAppend (&line, "extreme exposure time %f, re-normalized to 1.0", exptime);
+	psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK, line, "");
+	psFree (line);
+    } else {
+	for (int y = 0; y < image->numRows; y++) {
+	    for (int x = 0; x < image->numCols; x++) {
+		image->data.F32[y][x] *= exptime / (exptime + shutterImage->data.F32[y][x]);
+	    }
+	}
     }
     psFree(shutterImage);
