Index: trunk/ppImage/src/ppImageStatsOutput.c
===================================================================
--- trunk/ppImage/src/ppImageStatsOutput.c	(revision 18069)
+++ trunk/ppImage/src/ppImageStatsOutput.c	(revision 19928)
@@ -6,30 +6,11 @@
 
 // write stats to output file
-bool ppImageStatsOutput (pmConfig *config, const ppImageOptions *options) {
-
+bool ppImageStatsOutput(pmConfig *config, psMetadata *stats, const ppImageOptions *options)
+{
     bool mdok;
 
     // measure statistics, or ignore?
-    if (!options->doStats) return true;
-
-    // PPIMAGE.STATS is stored on PPIMAGE.OUTPUT
-    pmFPAfile *output = psMetadataLookupPtr(&mdok, config->files, "PPIMAGE.OUTPUT");
-    if (!output) {
-        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find PPIMAGE.OUTPUT entry in config file.\n");
-        return false;
-    }
-
-    // select the fpa-level analysis stats metadata:
-    psMetadata *stats = psMetadataLookupPtr (&mdok, output->fpa->analysis, "PPIMAGE.STATS");
-    if (!stats) {
-        psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find PPIMAGE.STATS entry in output 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;
+    if (!options->doStats) {
+        return true;
     }
 
@@ -37,15 +18,12 @@
     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.");
-        psFree(statsMDC);
+        psError(PS_ERR_UNEXPECTED_NULL, false, "missing STATS entry in arguments list.");
         return false;
     }
 
-    // convert to a real UNIX filename
+    // Write out
     psString resolved = pmConfigConvertFilename(statsName, config, true, 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(statsMDC);
+    if (!psMetadataConfigWrite(stats, resolved)) {
+        psError(PS_ERR_IO, false, "Unable to serialize stats metadata.\n");
         psFree(resolved);
         return false;
@@ -53,10 +31,4 @@
     psFree(resolved);
 
-    // write the stats MDC to a file
-    // XXX why does this not call psMetadataConfigPrint?
-    fprintf(statsFile, "%s", statsMDC);
-
-    psFree(statsMDC);
-    fclose(statsFile);
     return true;
 }
