Index: trunk/pswarp/src/pswarpLoop.c
===================================================================
--- trunk/pswarp/src/pswarpLoop.c	(revision 17554)
+++ trunk/pswarp/src/pswarpLoop.c	(revision 17569)
@@ -8,6 +8,6 @@
 static char *detectorFiles[] = { "PSWARP.INPUT", "PSWARP.MASK", "PSWARP.WEIGHT", NULL };
 static char *skycellFiles[] = { "PSWARP.OUTPUT", "PSWARP.OUTPUT.MASK", "PSWARP.OUTPUT.WEIGHT",
-                                "PSPHOT.OUTPUT", "PSPHOT.BACKMDL", "PSPHOT.BACKMDL.STDEV", "PSPHOT.BACKGND",
-                                "PSPHOT.BACKSUB", "PSPHOT.PSF.SAVE", "SOURCE.PLOT.MOMENTS",
+                                "PSPHOT.OUTPUT", "PSPHOT.RESID", "PSPHOT.BACKMDL", "PSPHOT.BACKMDL.STDEV",
+                                "PSPHOT.BACKGND", "PSPHOT.BACKSUB", "PSPHOT.PSF.SAVE", "SOURCE.PLOT.MOMENTS",
                                 "SOURCE.PLOT.PSFMODEL", "SOURCE.PLOT.APRESID", NULL };
 static char *independentFiles[] = { "PSWARP.ASTROM", // Read independently from the input pixels
@@ -27,4 +27,35 @@
     }
     return;
+}
+
+// Run down the FPA hierarchy, checking files
+static bool ioChecksBefore(pmConfig *config // Configuration
+                           )
+{
+    pmFPAview *view = pmFPAviewAlloc(0); // View for checking
+    bool status = true;                 // Status of checks
+    status &= pmFPAfileIOChecks(config, view, PM_FPA_BEFORE);
+    view->chip = 0;
+    status &= pmFPAfileIOChecks(config, view, PM_FPA_BEFORE);
+    view->cell = 0;
+    status &= pmFPAfileIOChecks(config, view, PM_FPA_BEFORE);
+    psFree(view);
+    return status;
+}
+
+// Run up the FPA hierarchy, checking files
+static bool ioChecksAfter(pmConfig *config // Configuration
+                          )
+{
+    pmFPAview *view = pmFPAviewAlloc(0); // View for checking
+    view->chip = view->cell = 0;
+    bool status = true;                 // Status of checks
+    status &= pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
+    view->cell = -1;
+    status &= pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
+    view->chip = -1;
+    status &= pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
+    psFree(view);
+    return status;
 }
 
@@ -89,13 +120,7 @@
         fileActivation(config, independentFiles, false);
         fileActivation(config, skycellFiles, true);
-
-        pmFPAview *view = pmFPAviewAlloc(0);
-        pmFPAfileIOChecks (config, view, PM_FPA_BEFORE);
-        // They should all be defined at the FPA level, so that should be enough
-        psFree(view);
-
+        ioChecksBefore(config);
         fileActivation(config, skycellFiles, false);
     }
-
 
     // Read the input astrometry
@@ -317,15 +342,9 @@
     psFree(md5string);
     psFree(headerName);
+    psFree(view);
 
     // Ensure everything is written out, at every level
-    view->chip = view->cell = view->readout = 0;
-    pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
-    view->readout = -1;
-    pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
-    view->cell = -1;
-    pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
-    view->chip = -1;
-    pmFPAfileIOChecks(config, view, PM_FPA_AFTER);
-    psFree(view);
+    ioChecksAfter(config);
+
     // Now done with the skycell side of things
 
