Index: branches/pap/ppSub/src/ppSubLoop.c
===================================================================
--- branches/pap/ppSub/src/ppSubLoop.c	(revision 23704)
+++ branches/pap/ppSub/src/ppSubLoop.c	(revision 23711)
@@ -55,4 +55,7 @@
     }
 
+    psMetadataAddF32(data->stats, PS_LIST_TAIL, "TIME_MATCH", 0, "Time to match PSFs",
+                     psTimerClear("PPSUB_MATCH"));
+
     // Close input files
     if (!ppSubFilesIterateUp(config, PPSUB_FILES_INPUT)) {
@@ -72,11 +75,11 @@
     }
 
-    if (data->inverse && !ppSubDefineOutput("PPSUB.OUTINV", config, data, view)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to define inverse.");
+    if (!data->quality && !ppSubMakePSF("PPSUB.OUTPUT", "PPSUB.INVERSE", config, data, view)) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to generate PSF.");
         return false;
     }
 
-    if (!data->quality && !ppSubMakePSF("PPSUB.OUTPUT", "PPSUB.OUTINV", config, data, view)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to generate PSF.");
+    if (!ppSubReadoutSubtract("PPSUB.OUTPUT", config, view)) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to subtract images.");
         return false;
     }
@@ -88,34 +91,24 @@
     }
 
-    if (!ppSubReadoutSubtract("PPSUB.OUTPUT", config, view)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to subtract images.");
-        return false;
-    }
-
     // Higher order background subtraction using psphot
-    if (!ppSubBackground("PPSUB.OUTPUT", config, view)) {
+    if (!ppSubBackground(config, view)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to subtract background.");
         return false;
     }
 
-    if (!data->quality && data->!ppSubReadoutPhotometry("PPSUB.OUTPUT", config, data, view)) {
+    if (!data->quality && ppSubReadoutPhotometry("PPSUB.OUTPUT", PPSUB_FILES_PHOT_SUB, config, data, view)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to perform photometry.");
         return false;
     }
 
-    if (!ppSubReadoutUpdate("PPSUB.OUTPUT", config, data, view)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to update.");
+    // Perform statistics on the cell
+    if (!ppSubReadoutStats(config, data, view)) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to collect statistics");
         return false;
     }
 
-    // Perform statistics on the cell
-    if (statsFile) {
-        pmFPAfile *output = psMetadataLookupPtr(NULL, config->files, "PPSUB.OUTPUT"); // Output file
-        if (!output) {
-            psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find file PPSUB.OUTPUT.\n");
-            goto ERROR;
-        }
-        psImageMaskType maskValue = pmConfigMaskGet("MASK.VALUE", config);
-        ppStatsFPA(data->stats, output->fpa, view, maskValue, config);
+    if (!ppSubReadoutJpeg("PPSUB.OUTPUT", config, data, view)) {
+        psError(PS_ERR_UNKNOWN, false, "Unable to update.");
+        return false;
     }
 
@@ -127,5 +120,10 @@
         }
 
-        if (!ppSubReadoutInverse("PPSUB.OUTINV", "PPSUB.OUTPUT", config, view)) {
+        if (data->inverse && !ppSubDefineOutput("PPSUB.INVERSE", config, data, view)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to define inverse.");
+            return false;
+        }
+
+        if (!ppSubReadoutInverse("PPSUB.INVERSE", "PPSUB.OUTPUT", config, view)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to invert images.");
             return false;
@@ -138,7 +136,14 @@
         }
 
-        if (!data->quality && data->!ppSubReadoutPhotometry("PPSUB.OUTINV", config, data, view)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to perform photometry.");
-        return false;
+        if (!data->quality && data->!ppSubReadoutPhotometry("PPSUB.INVERSE", PPSUB_FILES_PHOT_INV,
+                                                            config, data, view)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to perform photometry.");
+            return false;
+        }
+
+        // Close inverse subtraction files
+        if (!ppSubFilesIterateUp(config, PPSUB_FILES_INV)) {
+            psError(PPSUB_ERR_IO, false, "Unable to close subtraction files.");
+            return false;
         }
     } else {
@@ -149,11 +154,4 @@
         }
     }
-
-
-    if (!ppSubReadoutUpdate("PPSUB.OUTPUT", config, data, view)) {
-        psError(PS_ERR_UNKNOWN, false, "Unable to update.");
-        return false;
-    }
-
 
     psFree(view);
