Index: trunk/ppStack/src/ppStack.h
===================================================================
--- trunk/ppStack/src/ppStack.h	(revision 16987)
+++ trunk/ppStack/src/ppStack.h	(revision 16991)
@@ -23,5 +23,5 @@
 pmPSF *ppStackPSF(const pmConfig *config, // Configuration
                   int numCols, int numRows, // Size of image
-                  const psList *list    // List of input PSFs
+                  const psArray *psfs   // List of input PSFs
     );
 
Index: trunk/ppStack/src/ppStackLoop.c
===================================================================
--- trunk/ppStack/src/ppStackLoop.c	(revision 16987)
+++ trunk/ppStack/src/ppStackLoop.c	(revision 16991)
@@ -47,25 +47,18 @@
 }
 
-// Activate/deactivate a single element for a list; return array of files
-static psArray *fileActivationSingle(pmConfig *config, // Configuration
-                                     char **files, // Files to turn on/off
-                                     bool state,   // Activation state
-                                     int num // Number of file in sequence
-                                     )
+// Activate/deactivate a single element for a list
+static void fileActivationSingle(pmConfig *config, // Configuration
+                                 char **files, // Files to turn on/off
+                                 bool state,   // Activation state
+                                 int num // Number of file in sequence
+                                 )
 {
     assert(config);
     assert(files);
 
-    psList *list = psListAlloc(NULL);   // List of files
-
     for (int i = 0; files[i] != NULL; i++) {
-        pmFPAfile *file = pmFPAfileActivateSingle(config->files, state, files[i], num); // Activated file
-        psListAdd(list, PS_LIST_TAIL, file);
-    }
-
-    psArray *array = psListToArray(list);
-    psFree(list);
-
-    return array;
+        pmFPAfileActivateSingle(config->files, state, files[i], num); // Activated file
+    }
+    return;
 }
 
@@ -241,6 +234,7 @@
                                                                "^PPSTACK.INPUT$"); // Iterator
         psMetadataItem *fileItem; // Item from iteration
-        psList *psfList = psListAlloc(NULL); // List of PSFs for PSF envelope
+        psArray *psfs = psArrayAlloc(num); // PSFs for PSF envelope
         int numCols = 0, numRows = 0;   // Size of image
+        int index = 0;                  // Index for file
         while ((fileItem = psMetadataGetAndIncrement(fileIter))) {
             assert(fileItem->type == PS_DATA_UNKNOWN);
@@ -253,8 +247,9 @@
                 psFree(sources);
                 psFree(fileIter);
-                psFree(psfList);
+                psFree(psfs);
                 return false;
             }
-            psListAdd(psfList, PS_LIST_TAIL, psf);
+            psfs->data[index++] = psMemIncrRefCounter(psf);
+            psMetadataRemoveKey(chip->analysis, "PSPHOT.PSF");
 
             pmCell *cell = pmFPAviewThisCell(view, inputFile->fpa); // Cell of interest
@@ -268,5 +263,5 @@
                 psFree(sources);
                 psFree(fileIter);
-                psFree(psfList);
+                psFree(psfs);
                 return false;
             }
@@ -279,6 +274,6 @@
         psFree(view);
 
-        targetPSF = ppStackPSF(config, numCols, numRows, psfList);
-        psFree(psfList);
+        targetPSF = ppStackPSF(config, numCols, numRows, psfs);
+        psFree(psfs);
         if (!targetPSF) {
             psError(PS_ERR_UNKNOWN, false, "Unable to determine output PSF.");
@@ -313,5 +308,6 @@
         psTrace("ppStack", 2, "Convolving input %d of %d to target PSF....\n", i, num);
         pmFPAfileActivate(config->files, false, NULL);
-        psArray *files = fileActivationSingle(config, convolveFiles, true, i);
+        fileActivationSingle(config, convolveFiles, true, i);
+        pmFPAfile *file = pmFPAfileSelectSingle(config->files, "PPSTACK.INPUT", i); // File of interest
         pmFPAview *view = filesIterateDown(config);
         if (!view) {
@@ -321,5 +317,5 @@
         }
 
-        pmReadout *readout = pmFPAviewThisReadout(view, ((pmFPAfile*)files->data[0])->fpa); // Input readout
+        pmReadout *readout = pmFPAviewThisReadout(view, file->fpa); // Input readout
         psFree(view);
 
@@ -372,5 +368,10 @@
         psArray *readouts = psArrayAlloc(num); // Readouts for convolved images
         for (int i = 0; i < num; i++) {
-            readouts->data[i] = pmReadoutAlloc(cells->data[i]); // Readout into which to read
+            pmCell *cell = cells->data[i]; // Cell of interest
+            pmReadout *ro = cell->readouts->data[0]; // Readout of interest
+            if (!ro) {
+                ro = pmReadoutAlloc(cell);
+            }
+            readouts->data[i] = ro; // Readout into which to read
         }
         psFree(cells);
@@ -394,5 +395,4 @@
                 psError(PS_ERR_UNKNOWN, false, "Unable to open convolved files %s, %s, %s",
                         (char*)imageNames->data[i], (char*)maskNames->data[i], (char*)weightNames->data[i]);
-                psFree(cells);
                 psFree(subKernels);
                 psFree(subRegions);
@@ -471,4 +471,5 @@
             psPixels *reject = pmStackReject(inspect, NULL, threshold, subRegions->data[i],
                                              subKernels->data[i]); // Pixels to reject
+            psFree(inspect);
             psTrace("ppStack", 5, "%ld pixels rejected from image %d", reject->n, i);
             rejected->data[i] = reject;
@@ -525,4 +526,8 @@
 
         psFree(rejected);
+        for (int i = 0; i < readouts->n; i++) {
+            pmReadout *ro = readouts->data[i]; // Readout of interest
+            pmReadoutFreeData(ro);
+        }
         psFree(readouts);
 
Index: trunk/ppStack/src/ppStackPSF.c
===================================================================
--- trunk/ppStack/src/ppStackPSF.c	(revision 16987)
+++ trunk/ppStack/src/ppStackPSF.c	(revision 16991)
@@ -9,5 +9,5 @@
 #include "ppStack.h"
 
-pmPSF *ppStackPSF(const pmConfig *config, int numCols, int numRows, const psList *list)
+pmPSF *ppStackPSF(const pmConfig *config, int numCols, int numRows, const psArray *psfs)
 {
     // Get the recipe values
@@ -18,8 +18,6 @@
 
     // Solve for the target PSF
-    psArray *array = psListToArray(list); // Array of PSFs
-    pmPSF *psf = pmPSFEnvelope(numCols, numRows, array, psfInstances, psfRadius, psfModel,
+    pmPSF *psf = pmPSFEnvelope(numCols, numRows, psfs, psfInstances, psfRadius, psfModel,
                                psfOrder, psfOrder);
-    psFree(array);
     if (!psf) {
         psError(PS_ERR_UNKNOWN, false, "Unable to determine output PSF.");
