Index: /trunk/magic/remove/src/streaksio.c
===================================================================
--- /trunk/magic/remove/src/streaksio.c	(revision 30262)
+++ /trunk/magic/remove/src/streaksio.c	(revision 30263)
@@ -121,14 +121,4 @@
     sf->transparentStreaks = psMetadataLookupF64(&status, config->arguments, "TRANSPARENT_STREAKS");
 
-    sf->stats = psMetadataAlloc();
-    psString statsFileName= psMetadataLookupStr(&status, config->arguments, "STATS");
-    if (statsFileName) {
-        sf->statsFile = fopen(statsFileName, "w");
-        if (!sf->statsFile) {
-            psError(PS_ERR_IO, true, "failed to open stats file %s", statsFileName);
-            streaksExit("", PS_EXIT_CONFIG_ERROR);
-        }
-    }
-
     return sf;
 }
@@ -138,4 +128,5 @@
 {
     freeImages(sf);
+    psFree(sf->stats);
     psFree(sf->diffedPixels);
     psFree(sf->tiles);
@@ -861,4 +852,5 @@
         streaksExit("", PS_EXIT_DATA_ERROR);
     }
+    sfile->fits = NULL;
     psFree(sfile->header);
     sfile->header = NULL;
Index: /trunk/magic/remove/src/streaksremove.c
===================================================================
--- /trunk/magic/remove/src/streaksremove.c	(revision 30262)
+++ /trunk/magic/remove/src/streaksremove.c	(revision 30263)
@@ -275,17 +275,21 @@
     psLogMsg("streaksremove", PS_LOG_INFO, "time to run streaksremove: %f\n", total_time);
 
-    if (sfiles->statsFile) {
-        const char *statsMDC = psMetadataConfigFormat(sfiles->stats);
-        if (!statsMDC || strlen(statsMDC) == 0) {
-            psError(PS_ERR_IO, false, "Unable to get statistics MDC file.\n");
-        } else {
-            fprintf(sfiles->statsFile, "%s", statsMDC);
-            psFree(statsMDC);
-            fclose(sfiles->statsFile);
-            sfiles->statsFile = NULL;
-            psFree(sfiles->stats);
-            sfiles->stats = NULL;
-        }
-    }
+    psString statsFileName= psMetadataLookupStr(&status, config->arguments, "STATS");
+
+    if (statsFileName) {
+    // Write out
+        psString resolved = pmConfigConvertFilename(statsFileName, config, true, true); // Resolved filename
+        if (!resolved) {
+            psError(psErrorCodeLast(), false, "Unable to resolve statistics file name");
+            return false;
+        }
+        if (!psMetadataConfigWrite(sfiles->stats, resolved, NULL)) {
+            psError(psErrorCodeLast(), false, "Unable to serialize stats metadata.\n");
+            psFree(resolved);
+            return false;
+        }
+        psFree(resolved);
+    }
+
     // all done. Clean up to look for memory leaks.
 
