Index: trunk/ppImage/src/ppImageStats.c
===================================================================
--- trunk/ppImage/src/ppImageStats.c	(revision 13970)
+++ trunk/ppImage/src/ppImageStats.c	(revision 14000)
@@ -3,10 +3,5 @@
 #endif
 
-#include <stdio.h>
-#include <pslib.h>
-#include <psmodules.h>
-
 #include "ppImage.h"
-#include "ppStats.h"
 
 // calculate stats, including MD5
@@ -42,7 +37,10 @@
 	if (options->doStats) {
 
-	    pmFPAfile *output = psMetadataLookupPtr(&mdok, config->files, "PPIMAGE.OUTPUT");
-	    if (!mdok || !output) {
-		psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find file PPIMAGE.OUTPUT.");
+	    pmFPAfile *outImage = psMetadataLookupPtr(&mdok, config->files, "PPIMAGE.OUTPUT");
+	    pmFPAfile *outPhotom = psMetadataLookupPtr(&mdok, config->files, "PSPHOT.OUTPUT");
+	    pmFPAfile *outAstrom = psMetadataLookupPtr(&mdok, config->files, "PSASTRO.OUTPUT");
+
+	    if (!outImage && !outPhotom && !outAstrom) {
+		psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find any output file (PPIMAGE.OUTPUT, PSPHOT.OUTPUT, PSASTRO.OUTPUT).");
 		psFree (view);
 		psFree(stats);
@@ -50,5 +48,14 @@
 	    }
 
-	    if (!ppStats(stats, output->fpa, view,
+	    // get the latest output product available
+	    pmFPAfile *output = outAstrom;
+	    if (!output) {
+		output = outPhotom;
+	    }
+	    if (!output) {
+		output = outImage;
+	    }
+
+	    if (!ppStatsFPA(stats, output->fpa, view,
 			 options->satMask | options->badMask | options->maskValue,
 			 config)) {
@@ -98,50 +105,2 @@
     return true;
 }
-
-// write stats to output file 
-bool ppImageStatsOutput (pmConfig *config, pmFPA *fpa, const ppImageOptions *options) {
-
-    bool mdok;
-
-    // measure statistics, or ignore?
-    if (!options->doStats) return true;
-	
-    // get the output stats filename
-    const char *statsName = psMetadataLookupStr(&mdok, config->arguments, "STATS"); // Filename for statistics
-    if (!statsName && !strlen(statsName)) {
-	psError (PS_ERR_UNEXPECTED_NULL, false, "missing STATS entry in arguments list.");
-	return false;
-    }
-
-    // convert to a real UNIX filename
-    psString resolved = pmConfigConvertFilename(statsName, config, true); // Resolved filename
-    FILE *statsFile = fopen (resolved, "w");
-    if (!statsFile) {
-	psError(PS_ERR_IO, true, "Unable to open statistics file %s for writing.\n", resolved);
-	psFree(resolved);
-	return false;
-    }
-    psFree(resolved);
-
-    // select the fpa-level analysis stats metadata:
-    psMetadata *stats = psMetadataLookupPtr (&mdok, fpa->analysis, "PPIMAGE.STATS");
-    if (!stats) {
-	psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find PPIMAGE.STATS entry in fpa analysis.\n");
-	return false;
-    }
-
-    // convert the stats MDC to a string
-    char *statsMDC = psMetadataConfigFormat(stats);
-    if (!statsMDC || strlen(statsMDC) == 0) {
-	psError(PS_ERR_IO, false, "Unable to serialize stats metadata.\n");
-	return false;
-    } 
-
-    // write the stats MDC to a file
-    // XXX why does this not call psMetadataConfigPrint?
-    fprintf(statsFile, "%s", statsMDC);
-
-    psFree(statsMDC);
-    fclose(statsFile);
-    return true;
-}
