Index: trunk/ppSub/src/ppSub.c
===================================================================
--- trunk/ppSub/src/ppSub.c	(revision 27060)
+++ trunk/ppSub/src/ppSub.c	(revision 27061)
@@ -66,4 +66,19 @@
     psTimerStop();
 
+    if (data && data->stats && data->statsFile) {
+        psString stats = psMetadataConfigFormat(data->stats); // Statistics to output
+        if (!stats || strlen(stats) == 0) {
+            psError(PPSUB_ERR_IO, false, "Unable to format statistics file");
+        } else if (fprintf(data->statsFile, "%s", stats) != strlen(stats)) {
+            psError(PPSUB_ERR_IO, true, "Unable to write statistics file");
+        }
+        psFree(stats);
+        if (fclose(data->statsFile) == EOF) {
+            psError(PPSUB_ERR_IO, true, "Unable to close statistics file");
+        }
+        data->statsFile = NULL;
+        pmConfigRunFilenameAddWrite(data->config, "STATS", data->statsName);
+    }
+
     if (data) {
         psString dump_file = psMetadataLookupStr(NULL, data->config->arguments, "-dumpconfig");
Index: trunk/ppSub/src/ppSubData.c
===================================================================
--- trunk/ppSub/src/ppSubData.c	(revision 27060)
+++ trunk/ppSub/src/ppSubData.c	(revision 27061)
@@ -13,15 +13,5 @@
 static void subDataFree(ppSubData *data)
 {
-    if (data->statsFile) {
-        psString stats = psMetadataConfigFormat(data->stats); // Statistics to output
-        if (!stats || strlen(stats) == 0) {
-            psWarning("Unable to generate statistics file.");
-        } else {
-            fprintf(data->statsFile, "%s", stats);
-        }
-        psFree(stats);
-        fclose(data->statsFile);
-        pmConfigRunFilenameAddWrite(data->config, "STATS", data->statsName);
-    }
+    psAssert(!data->statsFile, "Statistics file still open.");
     psFree(data->statsName);
     psFree(data->stamps);
