Index: trunk/ppStats/src/ppStatsLoop.c
===================================================================
--- trunk/ppStats/src/ppStatsLoop.c	(revision 7902)
+++ trunk/ppStats/src/ppStatsLoop.c	(revision 7903)
@@ -14,5 +14,5 @@
     psString keyword;                    // Header from iteration
     while ((keyword = psListGetAndIncrement(keywordsIter))) {
-        psMetadataAddItem(target, psMetadataLookup(source, keyword));
+        psMetadataAddItem(target, psMetadataLookup(source, keyword), PS_LIST_TAIL, 0);
     }
     return;
@@ -31,5 +31,5 @@
     // Iterate through the FPA
     pmFPA *fpa = data->inFPA;           // The FPA of interest
-    if (psListLength(data->headers) > 0 && fpa->hdu && pmFPAHeader(fpa, data->inFile)) {
+    if (psListLength(data->headers) > 0 && fpa->hdu && pmFPAReadHeader(fpa, data->inFile)) {
         pmHDU *hdu = fpa->hdu;          // HDU for headers
         getHeaders(fpaResults, hdu->header, headersIter);
@@ -45,5 +45,5 @@
         psMetadata *chipResults = psMetadataAlloc(); // Metadata to hold the chip-level results
 
-        if (psListLength(data->headers) > 0 && chip->hdu && pmChipHeader(chip, data->inFile)) {
+        if (psListLength(data->headers) > 0 && chip->hdu && pmChipReadHeader(chip, data->inFile)) {
             pmHDU *hdu = chip->hdu;     // HDU for headers
             getHeaders(chipResults, hdu->header, headersIter);
@@ -59,5 +59,5 @@
             psMetadata *cellResults = psMetadataAlloc(); // Metadata to hold the cell-level results
 
-            if (psListLength(data->headers) > 0 && cell->hdu && pmCellHeader(cell, data->inFile)) {
+            if (psListLength(data->headers) > 0 && cell->hdu && pmCellReadHeader(cell, data->inFile)) {
                 pmHDU *hdu = cell->hdu;     // HDU for headers
                 getHeaders(cellResults, hdu->header, headersIter);
@@ -106,12 +106,13 @@
                 psImage *image = readout->image; // The image of interest
                 psImage *mask = readout->mask; // The mask image
-                int numSamples = sample * image->numCols * image->numRows; // Number of samples
-                int sampleSpace = 1.0 / sample; // Space between samples
+                int numSamples = data->sample * image->numCols * image->numRows; // Number of samples
+                int sampleSpace = 1.0 / data->sample; // Space between samples
                 psVector *sampleValues = psVectorAlloc(numSamples, PS_TYPE_F32); // Vector of samples
+                sampleValues->n = numSamples;
                 psVector *sampleMask = NULL;  // Corresponding mask
                 if (mask) {
                     sampleMask = psVectorAlloc(numSamples, PS_TYPE_U8);
+                    sampleMask->n = numSamples;
                 }
-                samples->n = numSamples;
                 for (int i = 0; i < numSamples; i++) {
                     int j = i * sampleSpace;
@@ -120,5 +121,5 @@
                     sampleValues->data.F32[i] = image->data.F32[y][x];
                     if (mask) {
-                        sampleMask->data.U8 = mask->data.U8[y][x];
+                        sampleMask->data.U8[i] = mask->data.U8[y][x];
                     }
                 }
@@ -136,5 +137,5 @@
 
             #define WRITE_STAT(SYMBOL, NAME, SOURCE) \
-            if (data->stats & SYMBOL) { \
+            if (data->stats->options & SYMBOL) { \
                 psMetadataAddF32(cellResults, PS_LIST_TAIL, NAME, 0, NULL, data->stats->SOURCE); \
             }
@@ -156,5 +157,5 @@
 
            // If we didn't add it before, add it now
-            if (!psMetadataLookup(&mdok, chipResults, cellName)) {
+            if (!psMetadataLookup(chipResults, cellName)) {
                 psMetadataAdd(chipResults, PS_LIST_TAIL, cellName, PS_DATA_METADATA,
                               "Results for cell", cellResults);
