Index: /trunk/ppMerge/src/ppMergeCheckInputs.c
===================================================================
--- /trunk/ppMerge/src/ppMergeCheckInputs.c	(revision 7758)
+++ /trunk/ppMerge/src/ppMergeCheckInputs.c	(revision 7759)
@@ -31,4 +31,8 @@
         data->in->n = filenames->n;
     }
+    if (!data->files) {
+        data->files = psArrayAlloc(filenames->n);
+        data->files->n = filenames->n;
+    }
     int numGood = 0;                    // Number of good files
     for (int i = 0; i < filenames->n; i++) {
@@ -51,5 +55,5 @@
             psMetadataPrint(stdout, header, 9);
         }
-        psFitsClose(inFile);
+        data->files->data[i] = inFile;
 
         // The formats must be identical.  The chief reason for this is so that we know what output format to
Index: /trunk/ppMerge/src/ppMergeCombine.c
===================================================================
--- /trunk/ppMerge/src/ppMergeCombine.c	(revision 7758)
+++ /trunk/ppMerge/src/ppMergeCombine.c	(revision 7759)
@@ -68,5 +68,5 @@
                         continue;
                     }
-                    psFits *fits = psFitsOpen(filenames->data[k], "r"); // FITS file handle
+                    psFits *fits = data->files->data[k]; // FITS file handle
                     if (!fits) {
                         psError(PS_ERR_IO, false, "Unable to open input file %s --- ignored.\n",
@@ -91,5 +91,4 @@
                         numRead++;
                     }
-                    psFitsClose(fits);
                 }
 
Index: /trunk/ppMerge/src/ppMergeData.c
===================================================================
--- /trunk/ppMerge/src/ppMergeData.c	(revision 7758)
+++ /trunk/ppMerge/src/ppMergeData.c	(revision 7759)
@@ -9,4 +9,11 @@
     )
 {
+    if (data->files) {
+        for (long i = 0; i < data->files->n; i++) {
+            psFitsClose(data->files->data[i]);
+            data->files->data[i] = NULL;
+        }
+        psFree(data->files);
+    }
     psFree(data->in);
     psFree(data->out);
@@ -23,4 +30,5 @@
 
     data->numCells = 0;
+    data->files = NULL;
     data->in = NULL;
     data->out = NULL;
Index: /trunk/ppMerge/src/ppMergeData.h
===================================================================
--- /trunk/ppMerge/src/ppMergeData.h	(revision 7758)
+++ /trunk/ppMerge/src/ppMergeData.h	(revision 7759)
@@ -8,4 +8,5 @@
 typedef struct {
     int numCells;                       // Number of (valid) cells in the FPA
+    psArray *files;                     // Input file pointers
     psArray *in;                        // Input FPA structures
     pmFPA *out;                         // Output FPA structure
Index: /trunk/ppMerge/src/ppMergeScaleZero.c
===================================================================
--- /trunk/ppMerge/src/ppMergeScaleZero.c	(revision 7758)
+++ /trunk/ppMerge/src/ppMergeScaleZero.c	(revision 7759)
@@ -176,11 +176,5 @@
         }
         psTrace(__func__, 9, "Opening %s to get background...\n", name);
-        psFits *inFile = psFitsOpen(filenames->data[i], "r"); // The FITS file to read
-        if (!inFile) {
-            psLogMsg(__func__, PS_LOG_WARN, "Unable to open input file %s --- ignored.\n", name);
-            status = false;
-            continue;
-        }
-
+        psFits *inFile = data->files->data[i]; // The FITS file to read
         pmFPA *fpa = data->in->data[i]; // The FPA for this input
         int cellNum = -1;               // Number of the cell
@@ -282,5 +276,4 @@
         }
         pmFPAFreeData(fpa);
-        psFitsClose(inFile);
     }
     psFree(bgStats);
