Index: branches/tap_branches/psastro/src/psastroMetadataStats.c
===================================================================
--- branches/tap_branches/psastro/src/psastroMetadataStats.c	(revision 25900)
+++ branches/tap_branches/psastro/src/psastroMetadataStats.c	(revision 27838)
@@ -31,4 +31,13 @@
     pmFPAview *view = pmFPAviewAlloc(0);
 
+    // Entries in the PSASTRO.HEADER in the FPA don't get seen by ppStats
+    psMetadata *header = psMetadataLookupMetadata(&status, output->fpa->analysis, "PSASTRO.HEADER");
+    if (status && header) {
+        psMetadataItemSupplement(&status, stats, header, "ZPT_OBS");
+        psMetadataItemSupplement(&status, stats, header, "ZPT_ERR");
+        psMetadataItemSupplement(&status, stats, header, "CERROR");
+        psMetadataItemSupplement(&status, stats, header, "NASTRO");
+    }
+
     if (!ppStatsMetadata(stats, output->fpa, view, 0, config)) {
         psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to generate stats for image.");
@@ -37,8 +46,9 @@
     }
 
+    psFree(view);
+
     // if we did not request any specific stats, the structure is empty
     if (stats && stats->list->n == 0) {
         psWarning ("stats output specified, but no requested stats entries in headers");
-        psFree(view);
         return true;
     }
@@ -53,8 +63,12 @@
     // convert to a real UNIX filename
     psString resolved = pmConfigConvertFilename(filename, config, true, false); // Resolved filename
+    if (!resolved) {
+        psError(psErrorCodeLast(), false, "Unable to resolve statistics filename: %s", filename);
+        psFree(statsMDC);
+        return false;
+    }
     FILE *statsFile = fopen (resolved, "w");
     if (!statsFile) {
         psError(PS_ERR_IO, true, "Unable to open statistics file %s for writing.\n", resolved);
-        psFree(view);
         psFree(statsMDC);
         psFree(resolved);
@@ -63,12 +77,21 @@
 
     // write the stats MDC to a file
-    fprintf(statsFile, "%s", statsMDC);
-    fclose(statsFile);
+    if (fprintf(statsFile, "%s", statsMDC) != strlen(statsMDC)) {
+        psError(PS_ERR_IO, false, "Unable to write statistics file %s", resolved);
+        psFree(statsMDC);
+        psFree(resolved);
+        return false;
+    }
+    psFree(statsMDC);
+    if (fclose(statsFile) == EOF) {
+        psError(PS_ERR_IO, false, "Unable to write statistics file %s", resolved);
+        psFree(resolved);
+        return false;
+    }
+
+    psFree(resolved);
 
     pmConfigRunFilenameAddWrite(config, "STATS", filename);
 
-    psFree(resolved);
-    psFree(statsMDC);
-    psFree(view);
     return true;
 }
