Index: /trunk/ppImage/src/ppImageDetrendFringe.c
===================================================================
--- /trunk/ppImage/src/ppImageDetrendFringe.c	(revision 10330)
+++ /trunk/ppImage/src/ppImageDetrendFringe.c	(revision 10331)
@@ -141,5 +141,5 @@
 
 
-psImage *ppImageDetrendFringeGenerate(pmCell *science, pmCell *fringes)
+bool ppImageDetrendFringeGenerate(pmCell *science, pmCell *fringes)
 {
     PS_ASSERT_PTR_NON_NULL(science, false);
@@ -159,4 +159,6 @@
         expTime = 1.0;
     }
+
+    pmHDU *hdu = pmHDUFromCell(science);// HDU  of interest
 
     // Construct the fringe image from the scale
@@ -174,4 +176,13 @@
             psBinaryOp(sumFringe, sumFringe, "+", fringe);
         }
+
+        psVector *md5 = psImageMD5(fringe); // md5 hash
+        psString md5string = psMD5toString(md5); // String
+        psFree(md5);
+        psStringPrepend(&md5string, "Fringe image %d (scale %.3f) MD5: ",
+                        i, solution->coeff->data.F32[i + 1]);
+        psMetadataAddStr(hdu->header, PS_LIST_TAIL, "HISTORY", PS_META_DUPLICATE_OK,
+                         md5string, "");
+        psFree(md5string);
     }
     if (expTime != 1.0) {
@@ -179,4 +190,20 @@
     }
 
+    // Apply the correction to all readouts
+    psArray *readouts = science->readouts; // Array of science readouts
+    for (int i = 0; i < readouts->n; i++) {
+        pmReadout *readout = readouts->data[i]; // Readout of interest
+        if (!readout || !readout->data_exists) {
+            continue;
+        }
+
+        // XXX: Make generic, so subregions may be subtracted as well
+        if (!psBinaryOp(readout->image, readout->image, "-", sumFringe)) {
+            psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to subtract fringe.\n");
+            return false;
+        }
+    }
+    psFree(sumFringe);
+
     return sumFringe;
 }
